Feature engineering = créer de nouvelles variables (features) pertinentes à partir des données brutes pour aider le modèle. Souvent plus impactant que de changer d'algorithme.
1. COMBINAISONS ARITHMÉTIQUES
df['total'] = df['prix'] * df['quantite']
df['ratio'] = df['gain'] / (df['cout'] + 1e-9)2. TRANSFORMATIONS
df['log_prix'] = np.log1p(df['prix']) # log(1+x), gère le 0
df['sqrt_age'] = np.sqrt(df['age'])3. DISCRÉTISATION (binning)
df['prix_bin'] = pd.cut(df['prix'], bins=[0, 100, 500, 1000],
labels=['bas', 'moyen', 'haut'])
df['decile'] = pd.qcut(df['salaire'], q=10, labels=False) # quantiles4. FEATURES TEMPORELLES (à partir d'une date)
df['mois'] = df['date'].dt.month
df['jour_semaine'] = df['date'].dt.dayofweek
df['weekend'] = df['date'].dt.dayofweek >= 5
df['saison'] = df['date'].dt.month % 12 // 35. ENCODAGE CATÉGORIEL
# One-hot encoding : une colonne 0/1 par modalité
dummies = pd.get_dummies(df['categorie'], prefix='cat')
df = pd.concat([df, dummies], axis=1) # Label encoding : 1 valeur entière par modalité
df['cat_id'] = df['categorie'].astype('category').cat.codesimport pandas as pd
import numpy as npnp.random.seed(42)
df = pd.DataFrame({
'prix': np.random.uniform(10, 1000, 100),
'quantite': np.random.randint(1, 50, 100),
'categorie': np.random.choice(['A', 'B', 'C'], 100),
'date_str': pd.date_range('2024-01-01', periods=100)
})df['total'] = df['prix'] * df['quantite']
df['log_prix'] = np.log1p(df['prix'])
df['prix_bin'] = pd.cut(df['prix'], bins=[0, 100, 500, 1000],
labels=['bas', 'moyen', 'haut'])
df['mois'] = df['date_str'].dt.month
df['jour_semaine'] = df['date_str'].dt.dayofweekcat_dummies = pd.get_dummies(df['categorie'], prefix='cat')
df = pd.concat([df, cat_dummies], axis=1)print('Nouvelles colonnes:', [c for c in df.columns if c.startswith(('total','log','prix_b','mois','jour','cat_'))])
print('Shape finale:', df.shape)Une feature qui utilise des données du futur (par rapport à la cible) gonfle artificiellement les performances. Ex : prédire le défaut d'un client avec son nb d'incidents postérieurs au prêt. À éviter absolument.
Pour automatiser : sklearn.preprocessing.PolynomialFeatures, featuretools (auto FE), category_encoders (encodages avancés).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →