Exercice 98 / 100

Projet — Feature Engineering

Crée de nouvelles features pour améliorer un modèle

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.

Techniques courantes

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) # quantiles
4. 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 // 3
5. 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.codes
Le feature engineering n'enlève rien : il ajoute des colonnes calculées à partir de celles qui existent déjà, un produit, un logarithme, un morceau de date, pour donner au modèle des repères qu'il ne trouverait pas seul

Exemple complet

import pandas as pd import numpy as np
np.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.dayofweek
cat_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)

⚠ Risque de fuite de données

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).

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →