Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Repérer un modèle qui apprend par cœur

Après cette leçon: Je peux repérer un modèle qui a appris ses exemples par cœur.

Leçon de 40 minAucune commande

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

MotCe que ça veut direExemple
Surapprentissageretenir les exemples au lieu de la règle
Sous-apprentissageun modèle trop simple, faible partout
Écartla différence entre deux scores95 % et 70 % : 25 points
Bruitdes détails dus au hasard dans les exemples
Généraliserbien 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

Code: python
# 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èleEntraînementTestÉcartDiagnostic
A99 %62 %37 pointsSurapprentissage
B64 %61 %3 pointsSous-apprentissage
C88 %85 %3 pointsCorrect
D93 %86 %7 pointsCorrect, à 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.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.