Le feature engineering, un champ d’exploration et d’application illimité ?

Sans les données brutes et les informations qui s’y cachent, les meilleurs algorithmes de machine learning ne peuvent rien. Entre elles et ces algorithmes, un travail de feature engineering doit être réalisé.

Granularité des faits

Le premier exemple peut surprendre tant il relève davantage de la modélisation même du problème à traiter que des features à proprement parler. Il s'agit du choix de la granularité des faits d'apprentissage.

Vous avez à prévoir une série temporelle, disons les ventes dans un magasin, avec un pas de temps d'une semaine. Deux stratégies s'affrontent : agréger les données de ventes journalières à la semaine et apprendre directement de ces faits agrégés, ou bien apprendre et prévoir sur une base journalière, avant d'agréger à la semaine.

Chaque stratégie de machine learning possède ses avantages propres. Dans le premier cas, les données de ventes sont « consolidées », donc plus régulières et donc plus faciles à apprendre. La volumétrie est également moindre (d'un facteur 7), d'où des temps et des moyens de calcul plus raisonnables.

Se pose en revanche le problème du choix des features. En effet, la réalité physique du phénomène à l'étude (les ventes) est naturellement au jour, voire à l’heure, et ainsi les features seront automatiquement liées à cette maille. Le magasin a peut-être été exceptionnellement fermé ou ouvert un certain jour, un produit a été en promotion le lundi et mardi, etc. Comment traduire ces informations dans une granularité semaine ? Est-ce que disposer de 7 fois plus de faits d'apprentissage ne permet-il pas de mieux entraîner les modèles ? Mais peut-être que les données jours sont si irrégulières qu'elles sont difficiles à prévoir avec précision, et l'agrégat final accumulera encore les erreurs ?

Ce genre de problématiques est classique dans la prévision de séries hiérarchiques et nous n'allons pas débattre ici des multiples solutions et approches possibles. Nous voyons cependant que dès la genèse du problème, le feature engineer est confronté à des choix stratégiques déterminants pour le reste du projet.

Inventivité et expressivité...

La création de features originales est un exemple important et plus « pur » de feature engineering. Il s'agit ici de créer de nouvelles features à partir de données brutes ou de features déjà existantes. Cette démarche est motivée par plusieurs objectifs.

Si l'on sait que l'algorithme qui va être utilisé est incapable de synthétiser un certain type de features (par exemple, une régression linéaire ne peut synthétiser d'elle-même le produit de deux features), l'introduction manuelle de cette feature va étendre l'expressivité du modèle. Le « kernel trick » utilisé dans les support vector machines est une variante sophistiquée de ce type de démarche : un noyau gaussien revient ainsi à plonger le problème dans l'espace des polynômes, équivalent de la création de l'infinité des monômes de tous degrés.

L'utilisation de la météo est un autre exemple où l’utilisation du feature engineering est presque indispensable. A partir d'un historique de météo, il sera ainsi intéressant d'introduire, pour chaque jour du passé, des features représentant des caractéristiques météo significatives pour les humains (pluie, température, saison…)  Il importera également de prendre en considération le fait que les prévisions météo, comme toutes prévisions, souffrent d'une incertitude (assez forte au demeurant) et que la plupart des personnes prennent leurs décisions en fonction du temps qu'il a fait les jours précédents mais également du temps prévu. Ainsi concernant le passé, il faudra veiller à utiliser des features relatives non pas au temps qu'il a fait, mais au temps qui était prévu à ce moment-là. En l’absence d'historique des prévisions, une des solutions est de « bruiter » la météo réelle afin de simuler l'incertitude des projections météorologiques.

De nos jours, grâce à la puissance de calcul accrue, qui devient presque la norme, une philosophie différente gagne du terrain concernant cet aspect du feature engineering : laissons la machine trouver d'elle-même à partir des données brutes. Dans certaines applications liées à l'analyse d'image, cette approche donne de bons résultats. Il faut dire que dans ce domaine, nous humains, sommes relativement démunis : nous sommes incapables de donner un début sérieux de piste pour apprendre à reconnaître une forme à partir de pixels.

Néanmoins, ne perdons pas de vue que, dans certains cas la création manuelle de features permet d'améliorer significativement la forecast accuracy.

… juste ce qu'il faut

Plutôt que d’en créer de nouvelles pour enrichir l'expressivité d'un modèle, ou proposer des leviers explicatifs, la sélection de features vise à en réduire le nombre. Dans quel(s) but(s) ?

Premièrement, gagner du temps de traitement. En effet, un modèle construit avec moins de features est plus économique en temps d’apprentissage ou d’exploitation.

Ensuite, gagner en forecast accuracy. En évitant de demander à l'algorithme de machine learning de rechercher une aiguille dans une botte de foin, c'est-à-dire quelques features utiles parmi une multitude d'inutiles, on obtient un modèle plus simple et souvent plus robuste : on accepte un peu de biais supplémentaires contre un gain en variance. Philosophiquement, il s'agit du principe du rasoir d'Ockham, selon lequel l'explication la plus simple devrait être privilégiée.

Du maximum de variance à la recherche de colinéarité en passant par des formes de pénalisation, les techniques de sélection de features sont nombreuses. Il existe encore bien d'autres formes de "gestes métiers" faisant partie intégrante du feature engineering, et il faudrait bien plus que quelques pages pour les couvrir toutes. Citons pêle-mêle :

  • Le traitement des features catégorielles : ces features non ordonnées et non comparables doivent être numérisées d'une façon ou d'une autre afin d'être acceptées par les algorithmes d'apprentissage. De nombreuses stratégies sont possibles pour cela : le one-hot encoding ou d'autres formes de plongements dans les embeddings ; voire le ranking. C'est-à-dire le remplacement des modalités de la variable catégorielle par des 'potentiels' numériques directement liés à la force du lien entre la variable et la variable cible ;
  • Le traitement des valeurs manquantes, notamment par l'introduction d'un « code » spécial signifiant « valeur inconnue », accompagné ou non d'une variable binaire indiquant si la feature est inconnue ou pas. Les valeurs manquantes peuvent également être imputées à partir des features connues. Dans ce cas, le data scientist aura à mettre en place un apprentissage dédié préalable permettant d'entraîner le modèle d'imputation ;
  • Le traitement des features de type « texte libre » ;
  • L'enrichissement du jeu de données par des faits additionnels facilitant l'apprentissage ou la détection d'une colinéarité entre features.

A l’évidence, les possibilités sont nombreuses et chaque data scientist doit apprendre à se constituer petit à petit ses propres outils, avec une spécialisation métier plus ou moins forte. Toutefois, bien que le champ d'action du feature engineering soit très riche, l'existence de quelques grands principes utilisés de manière routinière et quasi systématique nourrit l'ambition d'un processus de feature engineering automatisé. Un champ qui justifierait une tribune libre spécifique.