Un modèle à 98 %, puis la déception
Un opérateur mobile veut savoir quels abonnés vont résilier ce mois-ci. L’équipe pourrait alors leur proposer une offre avant leur départ.
Un premier modèle annonce 98 % de bonnes réponses. Le mois suivant, il ne repère qu’un départ sur deux.
Le problème ne venait pas du modèle. Il venait de la façon de le mesurer : sur les abonnés qu’il connaissait déjà.
À la fin de cette leçon
Remarque
Je peux expliquer pourquoi on teste un modèle sur des données qu’il n’a pas vues.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Jeu d’entraînement | les exemples dont le modèle apprend |
| Jeu de test | des exemples mis de côté pour le contrôle |
| Généraliser | bien répondre sur des cas nouveaux |
| Fuite de données | la réponse cachée dans les données d’entrée |
| Mise en production | le moment où le modèle sert pour de vrai |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un modèle se juge sur des cas nouveaux
Imaginez un conseiller client tout juste embauché. Pendant sa formation, il apprend par cœur la réponse à 20 demandes.
Pour savoir s’il est prêt, on ne lui repose pas ces 20 demandes. On lui en donne de nouvelles.
Pour un modèle, c’est pareil. Son score sur les exemples d’entraînement mesure surtout sa mémoire. Ce qui compte, c’est sa capacité à généraliser : bien répondre sur des abonnés qu’il n’a jamais vus.
Un même modèle, mesuré trois fois
| Mesuré sur | Bonnes réponses | Ce que cela dit |
|---|---|---|
| Les abonnés de l’entraînement | 98 % | Sa mémoire |
| Des abonnés mis de côté | 71 % | Une estimation honnête |
| Les vrais abonnés du mois suivant | 70 % | La réalité |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
On met de côté une partie des exemples
Avant l’entraînement, on sépare les exemples en deux parts. Souvent, 80 % forment le jeu d’entraînement et 20 % le jeu de test.
On mélange d’abord les lignes au hasard. Ainsi, les deux parts ressemblent aux mêmes abonnés.
Le modèle ne voit jamais le jeu de test pendant l’apprentissage. On ne l’utilise qu’à la fin, pour mesurer.
Exemple travaillé : la répartition 80/20
| Exemples en tout | Entraînement (80 %) | Test (20 %) |
|---|---|---|
| 1 000 | 800 | 200 |
| 5 000 | 4 000 | 1 000 |
| 250 | 200 | 50 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Séparez dix abonnés en Python
# Dix abonnés d'un opérateur mobile, déjà mélangés au hasard
abonnes = ["Martin", "Bernard", "Dubois", "Thomas", "Robert",
"Richard", "Petit", "Durand", "Leroy", "Moreau"]
pourcentage_test = 20
nombre_test = len(abonnes) * pourcentage_test // 100
coupe = len(abonnes) - nombre_test
# Les premiers servent à apprendre, les derniers sont gardés de côté
entrainement = abonnes[:coupe]
test = abonnes[coupe:]
print("Entraînement :", len(entrainement), "abonnés")
print("Test :", len(test), "abonnés :", test)
# Mettez pourcentage_test à 30, puis relancez le programme.
Une fuite de données fausse le test
Parfois, la réponse se cache dans les données. Prenons une colonne « date de résiliation ». Elle n’est remplie que pour les abonnés déjà partis.
Le modèle apprend vite : « date remplie, donc départ ». Son score de test est presque parfait.
Mais en production, cette colonne est vide pour tous les abonnés actuels. Le modèle ne sert alors à rien. Avant d’entraîner, demandez pour chaque colonne : la connaîtra-t-on au moment de prédire ?
Une erreur fréquente
Attention
Beaucoup pensent qu’un bon score sur les exemples d’entraînement prouve que le modèle marche. Ce score mesure surtout ce qu’il a retenu. Seul le score sur le jeu de test, jamais vu, annonce son comportement avec de nouveaux abonnés.