Feature Engineering
L’ingénierie des caractéristiques transforme des données brutes en entrées qu’un modèle peut facilement exploiter, en s’appuyant sur les connaissances du domaine. Principales techniques, pièges liés aux fuites de données, usages et code.
L'ingénierie des caractéristiques consiste à créer, transformer et sélectionner les variables d'entrée, ou caractéristiques, à partir desquelles un modèle d'apprentissage automatique apprend, en s'appuyant sur la connaissance du domaine et des données. Un horodatage brut devient l'heure de la journée et le jour de la semaine ; une liste de transactions par carte devient les dépenses d'un client au cours des 30 derniers jours ; et la distance et la durée d'un trajet permettent de calculer sa vitesse. Des caractéristiques bien choisies aident un modèle simple à saisir des motifs qu'il manquerait autrement ; elles sont particulièrement importantes pour les données tabulaires et les séries temporelles, où le modèle ne peut utiliser que les colonnes qu'on lui fournit. Les modèles d'apprentissage profond apprennent leurs propres caractéristiques à partir d'images, de sons et de textes bruts ; dans ces domaines, l'ingénierie des caractéristiques s'est donc orientée vers la préparation des données et la création de caractéristiques à partir des sorties des modèles.
Techniques courantes#
- Mise à l'échelle et normalisation : standardiser les caractéristiques pour obtenir une moyenne nulle et une variance unitaire empêche celles exprimées dans de grandes unités de dominer les modèles fondés sur les distances et l'entraînement fondé sur les gradients ; une transformation logarithmique compresse les valeurs asymétriques comme les revenus ou les prix.
- Encodage des variables catégorielles : le codage one-hot transforme une catégorie comme une couleur en colonnes binaires ; le codage par cible remplace chaque catégorie par la cible moyenne correspondante, calculée sur des plis distincts afin que l'encodage ne révèle pas l'étiquette propre à chaque ligne.
- Rapports et interactions : le ratio dette/revenu, le prix au pied carré et l'indice de masse corporelle combinent deux valeurs brutes pour calculer la quantité qui détermine réellement le résultat.
- Caractéristiques de date et d'heure : l'heure, le jour de la semaine, le mois et les indicateurs de jours fériés révèlent les cycles ; les encodages sinus et cosinus de l'heure placent 23:00 à côté de 00:00.
- Retards et fenêtres glissantes : les valeurs précédentes, les moyennes glissantes et les décomptes sur des fenêtres récentes fournissent au modèle l'historique récent d'un capteur, d'un compte ou d'un produit.
- Discrétisation : regrouper les valeurs continues en intervalles, comme des tranches d'âge, permet de saisir les effets par paliers et de limiter l'influence des valeurs extrêmes.
- Réduction de dimensionnalité par ACP : l'analyse en composantes principales condense de nombreuses caractéristiques corrélées en quelques caractéristiques non corrélées.
- Sélection de caractéristiques : les méthodes de filtrage classent les caractéristiques selon leur corrélation ou leur information mutuelle avec la cible ; les méthodes enveloppantes testent des sous-ensembles de caractéristiques avec un modèle ; et les méthodes intégrées, comme la régularisation L1, éliminent des caractéristiques pendant l'entraînement.
Une caractéristique de ratio montre pourquoi cette méthode fonctionne. Un arbre de décision à profondeur limitée ne peut effectuer une séparation que sur une seule caractéristique à la fois ; il ne peut donc qu’approximer grossièrement la règle « vitesse moyenne supérieure à 90 km/h » à partir de la distance et de la durée seules, alors qu’il la reproduit exactement dès que la vitesse est calculée :
import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 1,000 trips: raw distance (km) and duration (h); label = average speed above 90 km/h
rng = np.random.default_rng(0)
distance = rng.uniform(10, 300, 1000)
hours = rng.uniform(0.5, 4.0, 1000)
y = (distance / hours > 90).astype(int)
raw = np.column_stack([distance, hours])
engineered = (distance / hours).reshape(-1, 1) # domain knowledge: speed = distance / time
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
for name, X in [("Raw distance and duration", raw), ("Engineered speed", engineered)]:
print(f"{name}: accuracy {cross_val_score(tree, X, y, cv=5).mean():.3f}")Avec le même arbre de profondeur 2, la précision validée par validation croisée passe de 0,861 avec la distance et la durée brutes à 1,000 avec la caractéristique de vitesse conçue, car la frontière diagonale dans l’espace distance-durée devient un seuil unique sur la vitesse.
Valider les caractéristiques sans fuite de données#
Une caractéristique n’est valable que si sa valeur est connue au moment de la prédiction. Un modèle d’attrition qui utilise le « nombre d’appels au support au cours du mois suivant la résiliation », ou un encodage de cible calculé sur l’ensemble du jeu de données, obtient de bons résultats pendant les tests et échoue en production : c’est une forme de fuite de données. Chaque transformation avec des paramètres appris, comme les moyennes du normaliseur ou les encodages de catégories, est donc ajustée uniquement sur les plis d’entraînement, comme le font automatiquement les pipelines scikit-learn, et chaque nouvelle caractéristique n’est conservée que si elle améliore le score de validation croisée. Les systèmes de production doivent également calculer chaque caractéristique exactement comme pendant l’entraînement ; les magasins de caractéristiques s’en chargent en fournissant les mêmes définitions de caractéristiques aux deux.
Ingénierie des caractéristiques en vision par ordinateur#
La vision par ordinateur classique s’appuyait sur des caractéristiques conçues manuellement, comme les cartes de contours, les descripteurs de points clés SIFT et les histogrammes de gradients orientés, que des classificateurs comme les machines à vecteurs de support étiquetaient ensuite. Depuis la victoire d’AlexNet au défi ImageNet en 2012, les réseaux de neurones convolutifs apprennent leurs propres cartes de caractéristiques à partir des pixels, et les efforts d’ingénierie se sont déplacés vers les données d’entraînement, au moyen de l’augmentation des données, ainsi que vers les sorties des modèles de vision. Le SpeedEstimator d’Ultralytics crée une caractéristique de vitesse à partir de la sortie du suivi d’objets de YOLO26 : dès qu’une piste compte cinq positions, il convertit en mètres le déplacement en pixels entre la première et la dernière à l’aide de l’échelle meter_per_pixel, puis le divise par le temps écoulé pour indiquer la vitesse en km/h.
Applications#
- Risque de crédit : les prêteurs calculent le ratio dette/revenu, le taux d’utilisation du crédit et le nombre de mois écoulés depuis le dernier paiement manqué à partir des données brutes des comptes. Ces caractéristiques prédisent mieux les défauts de paiement que les soldes bruts.
- Maintenance prédictive : les moyennes glissantes, les taux de variation et l’énergie des bandes de fréquences calculés à partir des flux de vibrations et de température révèlent une usure naissante avant qu’une mesure brute ne dépasse un seuil d’alarme.
- Détection de fraude : les caractéristiques de vélocité, comme le nombre de transactions par carte au cours de la dernière heure et la distance entre un achat et l’emplacement habituel du titulaire de la carte, permettent de distinguer la fraude des dépenses normales.
- Prévision de la demande : les modèles de vente au détail combinent, pour chaque magasin et chaque produit, les retards de ventes, les moyennes glissantes, les variations de prix, les indicateurs de promotion et les indicateurs de jours fériés.
Ingénierie des caractéristiques et notions connexes#
- Extraction de caractéristiques : calcule automatiquement des caractéristiques à l’aide d’un algorithme fixe ou d’un modèle appris, comme l’ACP ou le réseau de base d’un réseau de neurones. Les deux termes sont souvent utilisés de manière interchangeable ; l’ingénierie des caractéristiques désigne le processus plus large, guidé par le domaine.
- Prétraitement des données : nettoie et met en forme les données en corrigeant les erreurs, en remplissant les valeurs manquantes et en convertissant les types ; cette étape précède la conception des caractéristiques.
- Plongements : vecteurs denses qu’un modèle apprend pendant l’entraînement pour représenter des mots, des images ou des utilisateurs ; ils remplacent les caractéristiques conçues manuellement, comme le comptage des mots, dans la plupart des systèmes de traitement du langage et de vision.










