ML Atlas

Le machine learning en partant de zéro · Leçon 3.1 · 14 sur 33 leçons prêtes · 10 min

Surapprentissage : quand un modèle apprend par cœur

En bref

Un modèle souple peut coller parfaitement à ses données d’entraînement et échouer sur de nouvelles. Quand le degré d’un polynôme monte, les erreurs divergent.

Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
De la leçon 2.6 : Métrique et seuil selon le coût des erreurs Un filtre antispam : un bon courriel dans les spams coûte 5 fois plus qu’un spam dans la boîte. Où placer le seuil sur P(spam) ?

Voir la réponse

Bonne réponse : Haut, vers 5 / (5 + 1) ≈ 0,83 : seuls les cas sûrs vont aux spams

Ici, l’erreur chère est la fausse alerte, donc le seuil monte : c_FP / (c_FP + c_FN) = 5/6 ≈ 0,83, si le modèle est calibré. Dans le lab, une alerte plus chère pousse aussi le seuil le moins cher au-dessus de 0,5.

De la leçon 2.5 : Classes déséquilibrées Avec 8 malignes pour apprendre, les poids de classe font passer le rappel de 61,5 % à 80,0 %. Que ne font-ils pas ?

Voir la réponse

Bonne réponse : Ils n’ajoutent pas de nouveaux exemples, donc il manque encore quelque chose

Les poids changent seulement combien coûte une erreur sur chaque classe. Toutes les données avec poids donnent un rappel de 86,8 %, donc avec 8 malignes il manque 6,8 points.

Deux élèves préparent un examen de maths. L’un travaille les idées derrière les exercices. L’autre apprend par cœur, mot pour mot, les corrigés de toutes les annales. Sur les annales, le second est impeccable. Puis arrive le vrai examen, avec de nouveaux nombres. Sur qui pariez-vous ? Les modèles font exactement face à ce choix, et livré à lui-même, un modèle flexible deviendra volontiers le second élève.

Prédisez, puis vérifiez Vous ajustez des polynômes de degré 0 à 10 sur 30 patients. Quel degré donne la plus petite erreur sur les patients de test ?
Quel est votre degré de certitude ?

Labo interactif

Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.

Voir la réponse

Bonne réponse : Degré 1 (une simple droite)

Le degré 1 est le meilleur : erreur de test de 64,1. Le degré 3 donne 65,2, le degré 6 donne 70,3 et le degré 10 pas moins de 132,6, alors que l’erreur d’entraînement passe de 60,2 (degré 1) à 51,1 (degré 10). Plus de flexibilité réduit l’erreur d’entraînement, pas l’erreur de test.

À vous de jouer

  • Commencez au degré 1 et notez les deux erreurs. Puis montez le curseur du degré cran par cran et regardez l’erreur d’entraînement baisser.
  • Continuez et surveillez l’erreur de test. Trouvez le degré où elle est la plus basse – c’est le point idéal pour cet échantillon.
  • Poussez le curseur du degré au maximum. Regardez la courbe entre les points : décrit-elle encore de façon sensée le lien entre l’IMC et la progression ?
  • Comparez l’écart entre erreur d’entraînement et erreur de test au degré le plus bas et au plus élevé. Un écart qui grandit est l’empreinte digitale du surapprentissage.

L’idée en quelques mots

Voyons maintenant ce que vous venez de manipuler, en termes simples.

Dans la leçon 3, nous avons ajusté une droite. Une droite est rigide : elle ne peut pas se plier pour suivre une courbe, même quand les données sont clairement courbées. Un polynôme est une famille de courbes plus souple :

ŷ = w₀ + w₁x + w₂x² + … + w_d·x^d

Le degré d règle la souplesse. Le degré 1 est la droite ; le degré 2 peut faire un virage ; les degrés plus élevés peuvent onduler de plus en plus. Avec un degré suffisant, un polynôme peut passer par chacun des points d’entraînement.

Cela ressemble à un succès, mais les vraies données contiennent du bruit – une variation aléatoire qu’aucune variable n’explique. Deux patients au même IMC ne progressent pas de la même façon. Un modèle assez souple pour toucher chaque point n’apprend pas seulement la tendance ; il apprend aussi le bruit, les accidents de cet échantillon particulier. C’est le surapprentissage (overfitting) : le modèle colle de mieux en mieux aux données d’entraînement tandis que ses prédictions sur de nouvelles données empirent. L’échec inverse, un modèle trop rigide pour capter la vraie tendance, s’appelle le sous-apprentissage (underfitting).

Pourquoi ça marche

Prenons un petit échantillon aléatoire des patients diabétiques de la leçon 3 et répartissons-le en points d’entraînement et points de test. Un petit échantillon rend l’effet facile à voir, car quelques points inhabituels peuvent faire dévier loin une courbe souple.

Suivons ce qui arrive aux deux erreurs quand le degré augmente. L’erreur d’entraînement ne cesse de baisser : une courbe plus souple peut toujours faire au moins aussi bien sur les points sur lesquels elle est ajustée, puisqu’elle peut imiter n’importe quelle courbe plus simple. L’erreur de test se comporte autrement. D’abord, elle baisse aussi, parce que la souplesse supplémentaire capte une vraie structure. Puis, au-delà d’un certain degré, elle remonte, parce que la courbe se plie désormais pour courir après des points d’entraînement isolés, et ces plis sont faux pour tous les autres. Le résultat est la fameuse courbe en U de l’erreur de test.

La raison porte un nom : le compromis biais-variance. Un modèle rigide a un biais élevé – il se trompe de façon systématique, quel que soit l’échantillon qu’il voit. Un modèle très souple a une variance élevée – tirez un échantillon légèrement différent et vous obtenez une courbe complètement différente. Le meilleur modèle se situe entre les deux, assez souple pour suivre le signal et assez rigide pour ignorer le bruit. L’emplacement de ce point dépend de la quantité de données : avec plus de données, le bruit se compense et davantage de souplesse devient sans danger.

Erreur fréquente

L’erreur fondamentale consiste à choisir la complexité d’un modèle d’après l’erreur d’entraînement. L’erreur d’entraînement récompense toujours plus de souplesse, donc elle votera toujours pour le modèle le plus complexe – l’élève qui apprend par cœur. La seconde erreur est de croire que le surapprentissage est rare ou exotique. C’est le comportement par défaut de tout modèle souple sur des données limitées, ce qui couvre les arbres de décision, les réseaux de neurones et la plupart de ce que vous construirez. Le remède n’est pas d’éviter les modèles souples, mais de les maîtriser : modèles plus simples, plus de données, ou régularisation, qui pénalise les poids extrêmes.

Ce raisonnement cache un piège : nous avons choisi le meilleur degré en regardant l’erreur de test, exactement ce contre quoi la leçon 2 mettait en garde. Dans la prochaine leçon, nous apprenons à choisir les réglages honnêtement, grâce à la validation et à la validation croisée.

Trouvez l’erreur de l’IA

Voici la réponse d’un chatbot. Une phrase est fausse. Laquelle ?

Question : J’ai ajusté des polynômes de degré 1 à 10 sur 30 patients, IMC contre progression de la maladie. Quel degré dois-je choisir ?

Réponse du chatbot

Montrer la phrase fausse

La phrase fausse : Le degré qui a la plus petite erreur d’entraînement, ici le degré 10, est donc aussi celui qui prédira le mieux les nouveaux patients.

L’erreur d’entraînement récompense toujours la flexibilité, elle ne peut donc pas servir à choisir le degré. Dans la leçon, le degré 10 a la plus petite erreur d’entraînement (51,1 contre 60,2 pour le degré 1), mais son erreur de test est de 132,6, plus du double des 64,1 de la droite.

Quiz

Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.

1. Quand le degré du polynôme augmente, qu’arrive-t-il à l’erreur d’entraînement ?
Voir la réponse

Bonne réponse : Elle baisse ou reste stable : une courbe plus souple peut copier une courbe plus simple

Un polynôme de degré supérieur contient tous ceux de degré inférieur comme cas particuliers, il ne peut donc jamais ajuster moins bien les points d’entraînement.

2. L’erreur d’entraînement est minuscule mais l’erreur de test est grande. Quel est le diagnostic le plus probable ?
Voir la réponse

Bonne réponse : Surapprentissage

Un grand écart entre erreur d’entraînement et erreur de test signifie que le modèle a appris des détails de l’échantillon d’entraînement qui ne se généralisent pas.

3. Pourquoi davantage de données d’entraînement rendent-elles généralement un modèle souple moins risqué ?
Voir la réponse

Bonne réponse : Plus de points compensent le bruit : la courbe ne suit plus les points isolés

Le bruit de chaque point demeure, mais sur beaucoup de points il se compense, si bien que l’ajustement suit la vraie tendance.

À retenir

  • Le surapprentissage, c’est apprendre le bruit des données d’entraînement, ce qui dégrade la performance en test.
  • L’erreur d’entraînement récompense toujours la souplesse ; seules des données dont le modèle n’a pas appris révèlent le surapprentissage.
  • L’erreur de test dessine typiquement un U quand la complexité augmente : sous-apprentissage d’un côté, surapprentissage de l’autre.
  • Plus de données, des modèles plus simples et la régularisation réduisent tous le surapprentissage.

Pour aller plus loin : formule, code, pratique

Les maths

Un polynôme de degré d a d + 1 poids : ŷ = w₀ + w₁x + … + w_d·x^d. L’ajustement par moindres carrés minimise l’erreur d’entraînement. Tout polynôme de degré d − 1 est aussi un polynôme de degré d (avec w_d = 0), donc la meilleure erreur d’entraînement ne peut que rester la même ou baisser quand d augmente. Avec n points tous de x différents, le degré n − 1 passe par chaque point et l’erreur d’entraînement est nulle.

L’erreur de test se décompose en trois parties : E[(y − ŷ)²] = bias² + variance + σ². Le biais est l’écart systématique d’un modèle trop rigide. La variance mesure de combien la courbe ajustée change d’un échantillon à l’autre. σ² est le bruit que personne ne peut supprimer. Un degré plus élevé réduit le biais et augmente la variance, ce qui donne la forme en U.

Le lab donne la REQM, √MSE, dans les unités de la cible.

En code (Python)

Trente patients diabétiques tirés au hasard comme jeu d’entraînement, les autres patients (dans la plage d’IMC de l’entraînement) comme jeu de test. C’est le même genre d’expérience que dans le lab, mais avec un autre échantillon aléatoire, donc les nombres diffèrent de ceux du lab :

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
x, y = X["bmi"].to_numpy(), y.to_numpy()
perm = np.random.default_rng(0).permutation(len(x))
tr, te = perm[:30], perm[30:]
te = te[(x[te] >= x[tr].min()) & (x[te] <= x[tr].max())]  # rester dans la plage d'entraînement
rmse = lambda i, p: np.sqrt(np.mean((y[i] - p(x[i])) ** 2))
for deg in (1, 3, 10):
    p = np.polynomial.Polynomial.fit(x[tr], y[tr], deg)  # ajuste sur un x remis à l'échelle, donc le degré 10 est stable
    print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")

Sortie

degree  1: train RMSE   61.6, test RMSE   63.5
degree  3: train RMSE   60.9, test RMSE   63.8
degree 10: train RMSE   54.7, test RMSE  199.5

L’erreur d’entraînement continue de baisser avec le degré. L’erreur de test du degré 10 est plus de trois fois celle du degré 1.

Pour les praticiens
  • Ne choisissez jamais le degré, ni aucun autre réglage de flexibilité, d’après l’erreur d’entraînement. Elle vote toujours pour le modèle le plus flexible.
  • Regardez l’écart entre l’erreur d’entraînement et l’erreur de test. Une petite erreur d’entraînement avec une grande erreur de test signifie surapprentissage. Si les deux erreurs sont élevées, c’est du sous-apprentissage.
  • Les polynômes de degré élevé explosent en dehors de la plage des données d’entraînement. Ne les utilisez pas pour extrapoler.
  • Avec un seul petit échantillon, l’image est bruitée. Répétez le découpage avec plusieurs graines avant de vous fier à un « meilleur degré ».
  • Pour tenir un modèle flexible en bride, essayez plus de données, un modèle plus simple ou la régularisation (ridge, lasso) avant de renoncer entièrement à la flexibilité.

Aller plus loin dans l’Atlas

Articles de l’encyclopédie sur les notions de cette leçon :