Surapprentissage et courbes d'apprentissage : diagnostiquer sans fuite
Comparer entraînement et validation, apprendre le prétraitement dans un pipeline et préserver un test final indépendant.
Dans ce guide
La réponse courte
Un modèle nettement meilleur sur ses données d'entraînement que sur des exemples de validation inédits peut surapprendre. Cet écart est un indice, pas une explication complète : découpage inadapté, changement de distribution, fuite et petit échantillon comptent aussi. Commencez par un découpage représentant l'utilisation future, placez les transformations apprises dans un pipeline et comparez une référence simple. Les courbes montrent ensuite l'évolution des scores avec la taille d'entraînement. Choisissez la complexité sur les données de développement et gardez un test indépendant pour l'évaluation finale, sans sélectionner les réglages en le consultant constamment.
Distinguer le surapprentissage d'autres causes
Pour une métrique où une valeur élevée est meilleure, comme l'exactitude, un bon score d'entraînement et une validation bien plus faible suggèrent un problème de généralisation. Si les deux scores sont faibles, le modèle ou les variables peuvent être insuffisants. Ne concluez pas à partir d'un seul nombre ou d'un découpage chanceux. Examinez taille, étiquettes et représentativité. Un écart lié à une nouvelle population demande une autre analyse qu'une mémorisation dans des données comparables.
Choisir un découpage correspondant au futur
Définissez les prédictions futures : nouveaux exemples indépendants, nouveaux clients ou observations ultérieures. Un découpage aléatoire ne convient pas toujours. Des mesures répétées du même sujet peuvent nécessiter des groupes ; une prévision chronologique peut demander une séparation temporelle. La stratification préserve les proportions des classes mais ne résout pas la dépendance ou la fuite temporelle. Le code emploie des plis stratifiés sur une classification synthétique ; vérifiez ces hypothèses avant d'utiliser ce choix sur des données réelles.
Apprendre le prétraitement dans le pipeline
Séparez les données avant d'apprendre une transformation. Mise à l'échelle, imputation et sélection de variables peuvent transmettre de l'information de validation si elles sont ajustées sur tout le jeu. Un pipeline permet à la validation croisée d'ajuster le scaler sur chaque portion d'entraînement puis de l'appliquer à la portion de validation. Il ne corrige cependant pas une variable qui révèle déjà la cible ou n'existe pas au moment de prédire. Vérifiez le sens et la disponibilité temporelle des variables.
Lire les deux courbes ensemble
Une courbe d'apprentissage évalue entraînement et validation pour plusieurs tailles d'entraînement. Lisez les deux lignes plutôt que leur meilleur point. Un grand écart persistant peut suggérer une variance élevée ; deux courbes faibles et proches peuvent indiquer une capacité ou des variables insuffisantes. Davantage d'exemples peut aider, sans promesse de gain précis. Dans le code, chaque ligne des tableaux de scores correspond à une taille et chaque colonne à un pli ; leur moyenne résume ces plis.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, learning_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# Illustrative synthetic classification data.
X, y = make_classification(
n_samples=500, n_features=20,
n_informative=5, n_redundant=5, random_state=42
)
model = make_pipeline(
StandardScaler(), LogisticRegression(max_iter=1000)
)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
sizes, training_scores, validation_scores = learning_curve(
model, X, y, cv=cv,
train_sizes=np.linspace(0.2, 1.0, 5), scoring="accuracy"
)
print(sizes)
print(training_scores.mean(axis=1))
print(validation_scores.mean(axis=1))Comparer une référence et une métrique adaptée
Comparez une référence simple adaptée à la tâche avant de commenter un score impressionnant. Sur des classes déséquilibrées, une exactitude élevée peut simplement refléter des prédictions de la classe fréquente plutôt qu'une détection utile de la classe rare. Choisissez la métrique selon la décision soutenue et gardez son sens d'amélioration clair. L'exemple utilise accuracy pour illustrer l'API sur des données synthétiques. Cela ne démontre pas que cette métrique convient à toutes les classifications réelles.
Modifier complexité et régularisation délibérément
Essayez un petit ensemble prévu de réglages de complexité ou régularisation avec le même protocole de développement. Pour LogisticRegression, diminuer C renforce la régularisation ; max_iter limite les itérations d'optimisation et n'en règle pas la force. Contrôlez aussi échelle et convergence. Changez un facteur pertinent à la fois et comparez la validation plutôt que de maximiser l'entraînement. Un modèle plus simple peut mieux généraliser, mais ce jugement exige des données de validation représentatives, pas seulement une courbe séduisante.
Examiner les différences entre plis
Examinez chaque score de pli en plus de la moyenne. Une forte dispersion peut signaler une sensibilité aux exemples choisis ou des difficultés différentes selon les plis. L'écart-type décrit leur variation ; ce n'est pas automatiquement un intervalle de confiance. Les portions d'entraînement de validation croisée se recouvrent, donc ces résultats ne sont pas des répétitions expérimentales indépendantes. Utilisez cette dispersion pour réexaminer protocole, échantillon et groupes, sans y voir une preuve de borne précise de l'erreur future.
Garder l'évaluation finale hors de la sélection
Fixez variables et paramètres avant l'évaluation finale sur les données réservées. Consulter régulièrement ce test pour choisir les réglages l'intègre à la sélection et affaiblit son indépendance. Notez version des données, définition des variables, règles de découpage, état aléatoire, métrique et versions logicielles. Le code crée un jeu synthétique et imprime les scores calculés ; aucun score précis ni résultat de benchmark n'est annoncé. Un processus reproductible distingue une amélioration réelle d'un simple changement de procédure d'évaluation.
Points à vérifier
- Adapter le découpage aux futurs exemples, groupes ou périodes.
- Apprendre le prétraitement sur l'entraînement seulement, idéalement dans un pipeline.
- Lire les deux courbes avec la référence et la dispersion entre plis.
- Choisir les paramètres sur le développement et préserver le test final.
Champ d’application
Les courbes dépendent de la qualité des données, du découpage, du modèle et de la métrique. Elles suggèrent des causes sans prouver que davantage de données ou de régularisation résoudra la tâche. L'exemple synthétique n'a pas été exécuté comme benchmark.