Intelligence Artificielle en Data Science ? Et si l’automatisation du Machine Learning suffisait ?

Introduction
Chaque Data Scientist, que cela soit durant sa formation, une compétition ou dans sa vie professionnelle s’est posé au moins une des questions suivantes “Quel modèle est le plus intéressant à utiliser ?” “Quelle transformation de mon jeu de données faut-il effectuer ?”.
Bien que le métier de Data Scientist s’est vu décerner la palme du “métier le plus sexy du siècle”, il est tout de même nécessaire de se salir les mains afin d’obtenir des résultats qui soient à la fois satisfaisants et qui réussissent à expliquer le phénomène du problème. C’est à ce moment là qu’intervient l’automatisation du Machine Learning. L’objectif étant de délester le Data Scientist des tâches laborieuses et répétitives lui permettant d’allouer plus de temps à son expertise sur le domaine des données.
L’automatisation du Machine Learning est un terme souvent utilisé de paire avec l’éviction du Data Scientist. Pour autant cette conclusion est fausse. Effectivement, si une personne possède des connaissances mathématiques solides mais éprouve quelques difficultés en informatique, l’automatisation du machine learning permettrait de se passer d’un Data Scientist pour la modélisation. Toutefois, il manquerait certainement des fondements statistiques pour fournir des conclusions viables. De plus, une personne très éloignée des mathématiques ne tirera aucun bénéfice de l’automatisation du Machine Learning pour les raisons citées ci-dessus.
Machine learning et intelligence artificielle sont souvent confondus dans leur définition, quelques mots pour rappeler la différence. L’intelligence artificielle propose à une machine d’apprendre et de comprendre des concepts lui permettant d’effectuer des tâches qu’on pourrait considéré comme “intelligentes”. Le machine learning quant à lui, est une branche de l’intelligence artificielle qui permet à la machine d’apprendre par elle-même au fur et à mesure qu’on lui fournit les données.
Lorsqu’un Data Scientist s’intéresse au Machine Learning, ce dernier fait face à un processus qui est souvent identique au cours de ses projets :
- Collecte des données
- Assemblage des données
- Nettoyage des données
- Modélisation des variables
- Sélection de l’algorithme
- Affinage du modèle
Sur le papier cela semble très intéressant. Toutefois, les trois premières sections prennent à elles-seules 70% du temps du Data Scientist, pour autant, aucune expertise particulière n’est demandée pour effectuer ces tâches. L’automatisation du Machine Learning prend ici tout son sens. Cette solution propose d’effectuer tout le processus en tentant en plus de l’optimiser pour répondre au mieux aux problématiques qui peuvent être à la fois diverses et variées (classification, régression, prédiction, contrainte de temps, …).
En résumé, l’automatisation du Machine Learning semble révolutionnaire. On fournit un jeu de données, on lui indique notre problème et on récupère la modélisation qu’il nous suffit d’interpréter.
De nombreuses personnes ont déjà contribué à l’automatisation du Machine Learning en commençant par des compétitions, des sites ou encore des librairies telles que :
- auto sickit-learn : Tuning d’hyper-paramètres, feature engineering et sélection de modèle(s), fonctionne sur un jeu de données petit ou moyen mais plus difficilement sur un large jeu de données. Utilise la recherche bayésienne pour le Deep Learning
- TPOT : Fournit un pipeline très complet au Data Scientist, mais n’est pas adapté au NLP
- H2O : Bon pour le Deep Learning, fait ses propres algorithmes
- MLBox : Data cleaning, sélection d’hyper-paramètres et sélection de modèle
Chacun ayant ses avantages et ses inconvénients.
Cet article est divisé en deux parties, une première avec une présentation plus complète sur le cycle de modélisation d’un Data Scientist, suivi d’une focalisation sur l’optimisation.
Cycle de modélisation
Comme cité plus haut, le rôle d’un Data Scientist n’est pas uniquement d’effectuer des modélisations mathématiques et statistiques. La première étape, souvent oubliée, mais qui représente une phase décisive du métier n’est autre que l’exploitation des données brutes. Qu’elles soient issues d’un fichier ou de web scraping, l’objectif du Data Scientist sera de sélectionner, nettoyer et transformer ces informations brutes en données adaptées à sa problématique.
La phase de sélection des données est une tâche propre au Data Scientist et non à l’automatisation. C’est un travail qui nécessite du bon sens et une certaine expertise à la fois concernant la science des données mais aussi du métier auquel on tente de répondre à la problématique, pour choisir les informations qui sembleraient utiles au sujet.
C’est à partir de la phase de nettoyage que l’automatisation du processus d’apprentissage statistique prend tout son sens. En effet, une solution offrant une structure claire aux données ainsi que la gestion de tout élément bloquant la modélisation comme les Not a Number (NaN) en proposant différentes possibilités telles que la suppression des observations qui en possède ou en les remplaçant par la moyenne offrirait un gain de temps certain ainsi que des intuitions intéressantes aux Data Scientist. L’auto ML peut aussi transformer automatiquement des types de données (string, datetime) pour qu’ils soient interprétable pour toute modélisation, c’est ce qu’on appelle l’encodage des données. De façon très simple un one hot encoding peut être une solution.
La phase de pré-traitement se situe entre le nettoyage du jeu de données et la transformation des variables. L’objectif est d’harmoniser l’ensemble des données en utilisant par exemple une normalisation, une standardisation ou tout autre type de mise à l’échelle. Là encore, quel pré-traitement est le plus intéressant pour notre problématique ? Serait-il judicieux de combiner deux pré-traitements ? De plus, si on ajoute les possibilités du paragraphe précédent, cela commence à faire beaucoup. Une nouvelle fois, l’automatisation du Machine Learning est une solution tout à fait intéressante car elle effectue les combinaisons disponibles en considérant les contraintes.
La suite est d’autant plus complexe qu’il n’y a pas de limite. Cette phase peut durer quelques instants comme plusieurs semaines, c’est le Feature Processing, comprenez le traitement des variables explicatives. Il existe deux notions bien distinctes :
- Le Feature Engineering qui s’intéresse aux transformations des variables disponibles
- La Feature Selection qui quant à elle s’occupe de conserver les variables selon certains critères.
Le Feature Engineering reste cependant un moment délicat dans le processus du Machine Learning car les mêmes variables explicatives peuvent avoir un effet totalement contradictoire pour différents jeux de données. Dans le cadre de l’automatisation, il paraît judicieux de fournir des transformations simples qui soient reconnues le plus souvent comme source de valeur ajoutée, on pensera par exemple :
- Analyse en Composantes Principales (ACP)
- t-distributed Stochastic Neighbor Embedding (t-SNE)
- Polynomial Features
- Transformation de la variable explicative des dates
Il existe des libraires sous python permettant du Feature Engineering telles que :
La Feature Selection permet, une fois que les variables sont créées, de ne conserver que celles qui semblent convenir selon les contraintes proposées. Ces méthodes peuvent être :
- Filtre : Corrélation, hypothèse de test, gain supplémentaire d’une variable
- Wrapper : Sélection de type forward, backward ou encore stepwise
- Embedded : Lasso, Random Forest
- La combinaison de plusieurs feature selection
Dans le cadre de l’automatisation du Machine Learning, le Feature Processing est très intéressant. Il offre la possibilité de créer de nombreuses variables puis de sélectionner uniquement celles qui semblent les plus pertinentes.
La partie suivante est consacrée à la sélection de l’algorithme ainsi que l’affinage du modèle qui se fait à l’aide d’optimisations et plus principalement, l’optimisation bayésienne.
L’optimisation
Quand on parle du métier de Data Scientist, on fait souvent référence à la section consacrée à la modélisation. En effet, c’est maintenant que tout ce qui a été fait auparavant est utilisé pour mettre sur pied le modèle. De nouveau, on doit effectuer un choix, quel modèle correspond le mieux aux données : Un modèle linéaire, un modèle à arbre, une méthode de bagging, de boosting, d’autres modèles non-linéaires ? Les possibilités sont nombreuses, d’autant plus qu’il existe des méthodes qui consistent à assembler les prédictions de différents modèles entre eux ou encore utiliser la prédiction d’une modélisation pour construire une nouvelle variable explicative pour un autre modèle ! Autant de possibilités que de doutes. Une nouvelle fois l’automatisation du Machine Learning peut être utile. Mais ne manque-t-il pas un petit détail ? Choisir le type de modèle selon la situation, c’est bien, mais encore faut-il choisir les hyper-paramètres, et là, les possibilités sont presques infinies. C’est pour cette raison que nous utilisons l’optimisation bayésienne !
Si l’on devait définir très rapidement ce que sont des hyper-paramètres, ils correspondent aux paramètres généraux d’un algorithme, qui restent fixes sur l’ensemble de la modélisation.
Avant de nous concentrer sur l’optimisation bayésienne, il serait intéressant de discuter des autres méthodes disponibles.
La première méthode et la plus pragmatique est celle dite “Manuelle” où l’on décide des hyper-paramètres selon notre intuition, une fois le premier résultat obtenu on affine afin d’obtenir une meilleure métrique. C’est intéressant, mais avouons le, c’est long et fastidieux.
La seconde méthode, qui est sûrement la plus répandue, est le grid search. On donne une plage de valeurs que les hyper-paramètres prendront afin de tester toutes les combinaisons possibles entre eux. Cette méthode a le mérite de très bien fonctionner, mais son grand défaut réside dans le temps de calcul parfois long pour entraîner des modèles sur des grands jeux de données. A titre d’exemple, si l’on donne trois valeurs pour trois hyper-paramètres le grid search effectuera 27 combinaisons.
La troisième méthode se situe légèrement entre les deux, c’est le random search, le principe est comme le grid search : on fournit une plage de valeurs pour les hyper-paramètres que l’on souhaite tester et on décide arbitrairement de limiter le nombre de modélisations. Le random search