Parfait sur le passé, perdu sur l’avenir
Une agence immobilière de Bordeaux entraîne un modèle qui estime le prix des appartements. Sur ses 300 ventes passées, il se trompe en moyenne de 500 €.
Sur les ventes du mois suivant, l’erreur moyenne passe à 40 000 €.
Le modèle a retenu chaque vente passée. Il n’a pas appris ce qui fait le prix d’un logement.
À la fin de cette leçon
Remarque
Je peux repérer un modèle qui a appris ses exemples par cœur.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Surapprentissage | retenir les exemples au lieu de la règle | |
| Sous-apprentissage | un modèle trop simple, faible partout | |
| Écart | la différence entre deux scores | 95 % et 70 % : 25 points |
| Bruit | des détails dus au hasard dans les exemples | |
| Généraliser | bien répondre sur des cas nouveaux |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Retenir par cœur n’est pas apprendre
Imaginez un modèle qui garde simplement la liste de tous ses exemples. Pour un cas déjà vu, il ressort la bonne réponse. Il obtient donc 100 % sur l’entraînement.
Pour un cas nouveau, il n’a rien appris d’utile. Il répond au hasard.
Ce défaut s’appelle le surapprentissage. Le modèle a retenu les exemples, y compris leur bruit, au lieu de la règle.
Comparez un modèle par cœur et une règle
# Livraisons d'entraînement : distance en km, et retard ou non
entrainement = {8: False, 14: False, 19: False, 21: False,
23: True, 26: False, 30: True, 35: True}
# Livraisons nouvelles, jamais vues pendant l'entraînement
test = {10: False, 24: False, 29: True, 33: True, 17: False, 27: True}
def par_coeur(km):
# Ressort la réponse apprise, sinon répond « pas de retard »
if km in entrainement:
return entrainement[km]
return False
def regle(km):
return km > 28
def score(modele, donnees):
justes = 0
for km in donnees:
if modele(km) == donnees[km]:
justes = justes + 1
return round(justes * 100 / len(donnees))
print("Par cœur :", score(par_coeur, entrainement), "% puis", score(par_coeur, test), "%")
print("Règle :", score(regle, entrainement), "% puis", score(regle, test), "%")
# Remplacez 28 par 20 dans regle, puis relancez.
Le signe : un grand écart entre les scores
Pour repérer le surapprentissage, comparez deux scores : entraînement et test.
Un grand écart, plus de 10 points par exemple, doit vous alerter.
Si les deux scores sont faibles, le problème est inverse. Le modèle est trop simple pour la tâche : c’est le sous-apprentissage.
Un bon modèle a deux scores proches et assez hauts.
Exemple travaillé : quatre modèles comparés
| Modèle | Entraînement | Test | Écart | Diagnostic |
|---|---|---|---|---|
| A | 99 % | 62 % | 37 points | Surapprentissage |
| B | 64 % | 61 % | 3 points | Sous-apprentissage |
| C | 88 % | 85 % | 3 points | Correct |
| D | 93 % | 86 % | 7 points | Correct, à surveiller |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Que faire contre le surapprentissage ?
Plusieurs gestes aident le modèle à apprendre la règle plutôt que les exemples.
Ajoutez des exemples : il devient plus difficile de tout retenir. Choisissez un modèle plus simple. Arrêtez l’entraînement plus tôt, quand le score de test cesse de monter. Retirez les colonnes inutiles, comme le numéro de rue d’un appartement.
Après chaque changement, mesurez de nouveau les deux scores.
Une erreur fréquente
Attention
Beaucoup pensent qu’un modèle plus complexe est toujours meilleur. C’est faux quand les exemples sont peu nombreux. Un modèle complexe retient alors le bruit de chaque exemple. Comparez toujours les scores d’entraînement et de test avant de choisir.