Les fuites de données sont l'un des problèmes les plus critiques en Machine Learning. Elles se produisent lorsque des informations extérieures au jeu de données d'entraînement influencent le modèle, entraînant une performance artificiellement élevée qui s'effondre en production.
Une fuite de données survient lorsque le modèle accède, directement ou indirectement, à des informations qu'il ne devrait pas voir lors de l'entraînement. Cela peut fausser l'apprentissage et donner des performances trompeuses.
Exemples courants :
train_test_split
correctement en s'assurant qu'aucune donnée de test ne contamine l'entraînement.from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import pandas as pd
# Chargement des données
data = pd.read_csv("data.csv")
X = data.drop("target", axis=1)
y = data["target"]
# Mauvaise pratique : Normalisation avant la séparation
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # ❌ Inclut des infos du futur !
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# Bonne pratique : Séparation avant normalisation
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # ✅ Normalisation sur entraînement
X_test_scaled = scaler.transform(X_test) # ✅ Appliquer la même transformation
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
# Entraîner un modèle pour voir l'importance des features
model = RandomForestClassifier()
model.fit(X_train_scaled, y_train)
# Visualiser les features importantes
feature_importances = pd.Series(model.feature_importances_, index=X.columns)
feature_importances.sort_values(ascending=False).plot(kind='bar')
plt.show()
Si une variable suspecte (comme un ID) apparaît comme la plus importante, il y a probablement une fuite de données !
Les fuites de données sont un piège redoutable qui peut ruiner un modèle en production. Pour les éviter : ✅ Toujours séparer les données avant tout prétraitement. ✅ Vérifier que les features ne contiennent pas d'infos cachées sur la cible. ✅ Appliquer les transformations uniquement sur l'entraînement, puis les répliquer sur le test.
En appliquant ces bonnes pratiques, votre modèle sera robuste, généralisable et fiable en production ! 🚀
Vous avez des questions, des projets ou souhaitez simplement en savoir plus ? N'hésitez pas à nous contacter !