Objectifs du chapitre
À la fin de ce chapitre, vous serez capable de:
- dresser la matrice de confusion d'un classifieur binaire et en tirer l'exactitude, la précision, le rappel, la spécificité et le score F1, en disant ce que chacun mesure et ce qu'il ignore;
- expliquer pourquoi l'exactitude trompe sur des classes déséquilibrées, et toujours comparer un modèle au prédicteur constant;
- choisir un seuil de décision à partir des coûts des deux erreurs, tracer la courbe ROC et la courbe précision–rappel d'un modèle à scores, et démontrer que l'AUC est la probabilité qu'un positif soit mieux classé qu'un négatif;
- mesurer un modèle de régression par la MAE, la RMSE et le coefficient , sur l'entraînement et hors de l'entraînement;
- organiser une évaluation en ensembles d'entraînement, de validation et de test, et programmer la validation croisée à plis;
- reconnaître une fuite de données et le piège du taux de base, et calculer la précision qu'un filtre aura réellement une fois déployé.
Ce que l'on mesure, et pour qui
Le chapitre 4 a produit un modèle: une régression logistique sur le jeu B, qui attribue à chaque courriel une probabilité d'être un pourriel, et qui classe correctement 14 des 16 courriels au seuil 0,5. Est-ce un bon filtre? La question paraît simple, et ce chapitre montre qu'elle en contient au moins quatre. Bon selon quel critère? Un filtre qui jette une convocation d'examen pour laisser passer moins de publicités n'est pas «meilleur», il est différent. Bon sur quelles données? Quatorze sur seize, c'est la performance sur les courriels qui ont servi à l'entraîner, et le chapitre 1 a montré qu'elle ment. Bon par rapport à quoi? Un taux de réussite n'a de sens que comparé à celui d'un prédicteur sans intelligence. Bon dans quelles conditions? Un filtre réglé sur une boîte où un courriel sur cinq est un pourriel ne se comporte pas de la même façon dans une boîte où il y en a un sur cinquante.
Ce chapitre répond à ces questions dans l'ordre. Il commence par la classification binaire, où tout se résume à un tableau de quatre nombres, la matrice de confusion, et aux rapports que l'on peut en tirer. Il traite ensuite les modèles qui produisent un score plutôt qu'une décision, comme la régression logistique, et montre comment le choix d'un seuil transforme le score en décision; la courbe ROC résume tous les seuils à la fois. Viennent ensuite les métriques de la régression, puis la méthodologie: comment découper les données pour que le chiffre annoncé soit honnête, comment la validation croisée réutilise chaque exemple, et comment l'information du test peut s'infiltrer dans l'entraînement sans que personne ne s'en aperçoive. Il se termine par le piège le plus coûteux de tous, celui du taux de base, qui relie l'évaluation à la formule de Bayes.
Une convention traverse tout le chapitre: en classification binaire, la classe est la classe positive, celle que l'on cherche à détecter — ici le pourriel. Le mot «positif» n'a rien d'élogieux: un test médical «positif» annonce une maladie.
La matrice de confusion
Un classifieur binaire peut se tromper de deux façons, et elles n'ont presque jamais le même coût. Laisser passer un pourriel coûte quelques secondes d'attention; jeter un courriel légitime peut coûter une inscription manquée. Le taux d'erreur du chapitre 1 additionne les deux erreurs comme si elles se valaient. La première chose à faire est donc de les compter séparément.
Les noms se lisent de droite à gauche: le second mot dit ce que le classifieur a prédit (positif ou négatif), le premier dit s'il avait raison (vrai ou faux). Un faux positif est donc un négatif prédit positif — dans notre cas, un courriel légitime envoyé aux indésirables. Les statisticiens parlent aussi d'erreur de première espèce pour le faux positif et de deuxième espèce pour le faux négatif, comme dans les tests d'hypothèses (Probabilités et statistique, chapitre 12): le classifieur «rejette» l'hypothèse qu'un courriel est légitime.
Le cours utilise une matrice de confusion témoin, la même dans tous les chapitres qui en citent une. Un filtre a été évalué sur un ensemble de test de 1 000 courriels, dont 200 pourriels; ce sont des données fictives, construites pour le cours.
| Pourriel réel | Courriel légitime réel | Total | |
|---|---|---|---|
| Prédit pourriel | VP = 170 | FP = 40 | 210 |
| Prédit légitime | FN = 30 | VN = 760 | 790 |
| Total | 200 | 800 | 1 000 |
Les quatre nombres racontent une histoire que le taux d'erreur seul ne raconte pas. Le filtre a commis erreurs, soit un taux d'erreur de 7 %; mais ces 70 erreurs se répartissent en 30 pourriels qui sont arrivés dans la boîte de réception et 40 courriels légitimes qui sont partis aux indésirables. Si chaque courriel légitime perdu est une catastrophe, ce sont les 40 qui comptent, et le chiffre de 7 % les noie dans un total.
La figure 5.1 montre les quatre effectifs avec leurs vraies proportions. Le bloc des faux positifs y paraît négligeable, une mince bande en haut de la colonne des courriels légitimes; c'est qu'il représente 5 % de cette colonne. Mais cette colonne est quatre fois plus large que l'autre, et la bande pèse 40 courriels, presque le quart des 170 vrais positifs. Cette illusion d'optique — une petite proportion d'une grande classe peut valoir une grande proportion d'une petite — est exactement le mécanisme du piège du taux de base, à la fin du chapitre.
L'exactitude et les classes déséquilibrées
La mesure la plus naturelle est la proportion de bonnes réponses.
Pour le filtre témoin, l'exactitude vaut . Cela semble excellent. Considérons maintenant le filtre le plus paresseux qui soit: celui qui déclare tous les courriels légitimes. Il ne détecte aucun pourriel, mais il ne se trompe que sur les 200 pourriels: sa matrice de confusion est , , , , et son exactitude vaut . Le filtre témoin ne gagne donc que treize points sur un prédicteur sans aucune intelligence — c'est le prédicteur constant du chapitre 1, qui prédit la classe majoritaire.
Plus les classes sont déséquilibrées, plus le piège est profond. Dans un problème de détection de fraude où une transaction sur mille est frauduleuse, le classifieur «jamais de fraude» atteint 99,9 % d'exactitude et ne sert à rien. Dans un dépistage d'une maladie rare, un test qui déclare tout le monde sain a une exactitude égale à la proportion de personnes saines. L'exactitude mesure surtout, dans ces cas, la proportion de la classe majoritaire.
L'exactitude n'est pas fausse pour autant. Elle est la bonne mesure quand les deux classes sont de tailles comparables et que les deux erreurs coûtent à peu près la même chose — les deux conditions à la fois. Sur le jeu B, avec huit exemples de chaque classe, l'exactitude d'entraînement de 87,5 % du modèle logistique se compare honnêtement aux 50 % du prédicteur constant. Ailleurs, il faut des mesures qui regardent chaque classe séparément.
Précision, rappel, spécificité et score F1
La matrice de confusion a deux colonnes et deux lignes, et l'on peut calculer un taux de réussite en lisant soit une colonne, soit une ligne. Les deux lectures répondent à deux questions différentes, posées par deux personnes différentes.
Le rappel répond à la question de la personne qui craint de manquer un pourriel: «parmi tous les pourriels, combien le filtre en a-t-il attrapé?» La précision répond à la question de la personne qui ouvre son dossier des indésirables: «parmi les courriels que le filtre a mis là, combien sont vraiment des pourriels?» La spécificité, enfin, est la question de la personne qui craint de perdre son courrier: «parmi mes courriels légitimes, combien me sont parvenus?» Pour le filtre témoin:
Rappel et spécificité se lisent dans les colonnes, c'est-à-dire à classe réelle fixée: ils décrivent le classifieur indépendamment de la proportion de pourriels dans les données. La précision se lit dans une ligne, et elle mélange les deux colonnes: elle dépend du classifieur et de la proportion de positifs. Cette différence d'apparence technique est ce qui rend la précision fragile quand on change de population — la dernière section y revient avec la formule de Bayes.
Précision et rappel tirent en sens contraire. Un filtre qui ne marque comme pourriel que les messages dont il est absolument certain aura une excellente précision et un rappel médiocre; un filtre qui marque tout ce qui est un peu suspect aura un excellent rappel et une précision médiocre. Le filtre «tout pourriel» a un rappel de 1 — il attrape tous les pourriels — et une précision égale à la proportion de pourriels, 0,2. Aucun des deux nombres ne suffit donc seul: un rappel élevé est facile à obtenir si l'on accepte une précision basse, et réciproquement. Quand on veut un seul nombre qui exige les deux, on prend leur moyenne harmonique.
La dernière forme de (5.3) s'obtient en remplaçant et ; elle a l'avantage de rester définie quand la précision ne l'est pas. Le score F1 ne fait pas intervenir les vrais négatifs: il ignore complètement la masse des courriels légitimes bien classés, ce qui est précisément ce qu'on lui demande sur des classes déséquilibrées. La moyenne harmonique est dominée par le plus petit de ses termes: avec et , la moyenne arithmétique vaut 0,55, la moyenne harmonique 0,18. Un modèle ne peut pas obtenir un bon F1 en sacrifiant l'une des deux mesures.
D'autres combinaisons existent, et vous les rencontrerez. L'exactitude équilibrée (balanced accuracy) est la moyenne du rappel et de la spécificité, pour le filtre témoin et pour les deux filtres triviaux: c'est l'exactitude qu'on obtiendrait si les deux classes étaient de même taille. Le score pondère le rappel fois plus que la précision, ; est d'usage quand manquer un positif est le pire. Ces raffinements ne changent rien au principe: , et le choix de ce qu'on accepte d'écraser se fait en regardant le problème, pas les résultats.
Pour chacune de ces situations, quelle mesure faut-il surveiller en priorité? Indiquez les associations correctes. (Plusieurs réponses possibles.)
Plusieurs réponses possibles
Un autre filtre, évalué sur 1 000 courriels dont 100 pourriels, obtient , , , . Calculez son score F1.
Ces mesures se programment en quelques lignes, et il vaut la peine de les écrire une fois pour toutes: elles serviront dans tous les chapitres de classification.
Complétez matrice_confusion(y_vrai, y_predit), qui renvoie le quadruplet (vp, fp, fn, vn) pour la classe positive 1, et metriques(vp, fp, fn, vn), qui renvoie le triplet (precision, rappel, f1) — avec la convention qu'une mesure dont le dénominateur est nul vaut 0.0. Le programme applique le modèle logistique du chapitre 4 au jeu B avec trois seuils.
Du score à la décision: le seuil
La régression logistique ne classe pas: elle note. Pour chaque courriel, elle produit un nombre , et c'est nous qui décidons, par un seuil, à partir de quel score un courriel part aux indésirables. Il en va de même pour beaucoup de modèles: un réseau de neurones produit une probabilité, un -PPV une proportion de voisins, une machine à vecteurs de support une distance signée à la frontière. Tous deviennent des classifieurs une fois qu'on a fixé un seuil.
Le seuil 0,5 du chapitre 4 n'a rien de sacré. Il correspond à la règle «prédire la classe la plus probable», qui minimise le taux d'erreur si les probabilités sont justes et si les deux erreurs coûtent autant. Le résultat suivant dit ce qui change quand elles ne coûtent pas autant.
Démonstration. Fixons et notons . Si l'on prédit 1, on ne paie que lorsque , ce qui arrive avec probabilité : le coût moyen est . Si l'on prédit 0, on ne paie que lorsque : le coût moyen est . Prédire 1 est au moins aussi bon que prédire 0 si et seulement si
la dernière équivalence parce que . Comme la décision se prend point par point, la règle qui fait le meilleur choix en chaque minimise aussi le coût moyen sur toute la loi des .
Dans l'exercice 1.4, écarter un courriel légitime coûtait 5 et laisser passer un pourriel coûtait 1. Le théorème donne : on ne jette un courriel que si l'on est sûr à plus de 83 % qu'il s'agit d'un pourriel. C'est le même nombre que le seuil de proportion trouvé pour le prédicteur constant dans cet exercice, et ce n'est pas un hasard: le prédicteur constant est un classifieur dont le «score» est la proportion de pourriels.
La courbe ROC et l'aire sous la courbe
Chaque seuil donne un classifieur, et chaque classifieur se résume par deux nombres qui ne dépendent pas de la proportion de positifs: son rappel (taux de vrais positifs) et son taux de faux positifs. Placer tous ces couples dans un même plan donne une image complète du modèle, indépendante de tout choix de seuil.
Le nom vient de la théorie de la détection des signaux radar, où la courbe décrivait le comportement d'un récepteur (receiver) pour tous les réglages de sensibilité. Sur un ensemble fini, la courbe est un escalier. Partons d'un seuil plus grand que tous les scores, puis abaissons-le: chaque fois qu'il passe sous le score d'un positif, le taux de vrais positifs gagne et le point monte; chaque fois qu'il passe sous le score d'un négatif, le taux de faux positifs gagne et le point va vers la droite. La courbe ROC n'est donc rien d'autre que la liste des exemples triés par score décroissant, lue comme une suite de pas «haut» (positif) et «droite» (négatif).
Deux courbes servent de repères. Un classifieur parfait, qui donne à tous les positifs un score plus élevé qu'à tous les négatifs, monte d'abord jusqu'à , puis va à droite jusqu'à : son AUC vaut 1. Un classifieur qui attribue des scores au hasard, indépendamment de la classe, avance en moyenne autant vers le haut que vers la droite, proportionnellement: sa courbe suit la diagonale et son AUC vaut 1/2 (exercice 5.2). Une courbe sous la diagonale signale un modèle qui ordonne à l'envers — inverser ses scores la ramènerait au-dessus.
La figure 5.2 montre l'escalier du jeu B. En lisant le tableau de l'exemple 5.2 de haut en bas, on monte six fois (E13, E14, E11, E9, E10, E16), on va une fois à droite (E8), on monte (E12), on va deux fois à droite (E7, E6), on monte (E15), puis on va cinq fois à droite. Le point du seuil 0,5 est : un faux positif sur huit courriels légitimes, sept pourriels détectés sur huit.
L'aire sous l'escalier a une interprétation remarquable, qui est le résultat central de ce chapitre.
Démonstration. Comme les scores sont distincts, abaisser le seuil fait franchir les scores un par un, et la courbe ROC est un escalier fait de pas verticaux de hauteur (un positif franchi) et de pas horizontaux de longueur (un négatif franchi). Les pas verticaux n'ajoutent aucune aire: l'aire sous l'escalier est la somme, sur les pas horizontaux, de leur longueur multipliée par la hauteur à laquelle ils sont faits.
Considérons le pas horizontal du négatif . Il se produit quand le seuil passe sous . À ce moment, les positifs déjà franchis sont exactement ceux dont le score dépasse , et la hauteur de la courbe est leur proportion:
L'aire de la bande verticale sous ce pas est donc , et en sommant sur on obtient la double somme de (5.7).
Pour la seconde égalité, tirons un indice uniforme sur et, indépendamment, un indice uniforme sur , et posons , . Chacun des couples a la probabilité , donc
qui est la même double somme.
Quand un positif et un négatif ont le même score, le seuil les franchit ensemble et la courbe fait un pas en diagonale; l'aire sous ce pas est un trapèze, qui compte la paire pour une demie. La formule (5.7) reste vraie si l'on remplace par . Le théorème a deux conséquences pratiques. D'abord, l'AUC des scores: toute transformation strictement croissante des scores, par exemple passer de au logit , la laisse inchangée (exercice 5.5). Ensuite, elle se calcule sans tracer de courbe, en comptant les paires — c'est d'ailleurs la statistique du test de Mann–Whitney, divisée par .
Un modèle attribue les scores , et à trois positifs, et , , et à quatre négatifs. Calculez son AUC.
Complétez auc(scores, etiquettes), qui calcule l'AUC en comptant les paires (positif, négatif) selon le théorème 5.2, une égalité de scores comptant pour une demie, et point_roc(scores, etiquettes, seuil), qui renvoie le couple (taux_faux_positifs, taux_vrais_positifs) du classifieur qui prédit 1 quand le score est supérieur ou égal au seuil. Le programme calcule l'AUC du modèle logistique sur le jeu B, puis celle de son logit.
La courbe précision–rappel
La courbe ROC a une propriété qui est parfois un défaut: elle ignore la proportion de positifs, puisque ses deux coordonnées sont calculées à classe réelle fixée. Sur des données très déséquilibrées, un taux de faux positifs de 1 % peut paraître négligeable sur la courbe ROC, alors qu'il représente, sur 100 000 courriels légitimes, mille messages perdus — peut-être bien plus que le nombre total de pourriels détectés. Quand c'est la qualité de ce que l'on signale qui compte, on remplace le taux de faux positifs par la précision.
Le panneau de droite de la figure 5.2 montre la courbe du jeu B. Tant que le seuil reste au-dessus du score de E8, tous les courriels signalés sont des pourriels, et la précision vaut 1 pendant que le rappel monte jusqu'à . Le premier faux positif, E8, fait chuter la précision à ; le pourriel suivant, E12, la fait remonter à . Contrairement à la courbe ROC, la courbe précision–rappel n'est pas monotone: chaque vrai positif la fait remonter, chaque faux positif la fait descendre. À l'extrémité droite, quand tout est déclaré pourriel, la précision tombe à la proportion de pourriels, .
Les deux courbes ne se contredisent pas: pour un jeu de données fixé, l'une se calcule à partir de l'autre, puisque connaître , , et permet de retrouver VP et FP. Elles mettent l'accent sur des choses différentes. La courbe ROC répond à «ce modèle sépare-t-il bien les deux classes?», indépendamment de leur proportion. La courbe précision–rappel répond à «si je signale des exemples avec ce modèle, quelle proportion de mes signalements sera juste?», sur cette proportion de positifs. Quand les positifs sont rares — fraude, maladies rares, recherche d'information —, c'est la seconde question qu'on se pose, et la courbe précision–rappel est plus parlante. Mais elle change dès que la proportion change: une courbe précision–rappel mesurée sur des données à 50 % de pourriels ne dit pas ce que sera la précision sur une boîte à 2 %. La dernière section le calcule.
Déplacez le seuil: chaque courriel dont le score l'atteint est classé pourriel. La matrice de confusion, le rappel et la précision changent, et le point se déplace le long de la courbe ROC, qui, elle, ne bouge pas — pas plus que l'aire sous la courbe, qui ne dépend que de l'ordre des scores. Les 200 courriels sont simulés (graine 2026), avec 20 % de pourriels comme le filtre témoin.
L'explorateur 5.1 applique ces idées à un jeu plus grand que le jeu B, et simulé: 200 courriels, dont 40 pourriels — la même proportion de 20 % que la matrice témoin —, aux caractéristiques tirées avec le générateur random de Python et la graine 2026 (courriels légitimes: et normales de moyenne 2,5 et d'écart type 1,6; pourriels: moyennes 5,5 et 4,5, même écart type), puis notés par une régression logistique ajustée sur ces 200 points. Au seuil 0,5, la matrice de confusion est , , , : précision , rappel , exactitude . Descendez le seuil à 0,3: le rappel monte à , mais il faut accepter 16 faux positifs au lieu de 5, et la précision tombe à . Remarquez la lecture qui ne bouge pas: l'AUC reste à quel que soit le seuil, parce qu'elle ne dépend que de l'ordre des scores. Le seuil choisit un point sur la courbe; il ne change pas la courbe.
Évaluer une régression
En régression, il n'y a pas de matrice de confusion: une prédiction n'est pas juste ou fausse, elle est plus ou moins loin. Les mesures sont des moyennes de résidus, que le chapitre 1 a déjà introduites comme risques empiriques, et une mesure relative qui les compare au prédicteur constant.
La RMSE est toujours au moins égale à la MAE, parce que la moyenne quadratique domine la moyenne arithmétique (inégalité de Cauchy–Schwarz); l'écart entre les deux grandit quand quelques résidus sont beaucoup plus grands que les autres. Rapporter les deux est donc instructif: une RMSE très supérieure à la MAE signale des erreurs rares mais grandes. Le coefficient est sans unité. Il vaut 1 pour un prédicteur parfait, 0 pour le prédicteur constant , et il est négatif pour un prédicteur qui fait pire que la moyenne — ce qui n'arrive pas sur les données d'entraînement d'une régression linéaire avec constante (chapitre 2), mais arrive couramment sur des données de test.
Entraînement, validation et test
Le chapitre 1 a posé la règle: l'erreur mesurée sur les données d'entraînement est optimiste, seule une erreur mesurée sur des données mises de côté estime honnêtement l'erreur future. Mais l'apprentissage ne se limite pas à ajuster des paramètres. Il faut aussi choisir le modèle — régression logistique ou plus proches voisins? —, ses hyperparamètres — combien de voisins? quel degré de polynôme? quelle force de régularisation? —, et le seuil de décision. Chacun de ces choix est une forme d'apprentissage, et chacun rend optimiste l'erreur des données sur lesquelles il a été fait.
Le raisonnement est celui du chapitre 1, appliqué une fois de plus. Si l'on essaie vingt valeurs d'un hyperparamètre et qu'on garde celle dont l'erreur de validation est la plus basse, cette erreur la plus basse est le minimum de vingt estimations bruitées: elle est biaisée vers le bas, même si chacune des vingt était sans biais. Plus on essaie de candidats sur le même ensemble de validation, plus ce biais grandit. L'ensemble de test, qui n'a participé à aucun choix, est le seul à échapper à ce mécanisme — à condition de n'en avoir jamais tiré la moindre décision.
Les proportions usuelles sont de l'ordre de 60 % pour l'entraînement, 20 % pour la validation et 20 % pour le test, mais elles dépendent de la quantité de données. L'exercice 1.5 a montré que l'erreur de test sur 2 000 exemples ne s'écarte de l'erreur réelle de plus de 5 points qu'avec une probabilité d'au plus 5 %. Avec des millions d'exemples, quelques pour cent suffisent pour la validation et le test. Avec quelques centaines, chaque exemple mis de côté manque cruellement à l'entraînement, et l'estimation de validation sur cinquante exemples est très bruitée. C'est la situation que la validation croisée améliore.
La validation croisée à plis
L'exemple 5.4 a fait tourner l'ensemble de validation sur les huit logements. C'est une méthode générale: au lieu de sacrifier une partie fixe des données à la validation, on fait jouer ce rôle à chaque partie tour à tour.
La figure 5.3 montre la rotation. Chaque exemple de développement sert exactement une fois à la validation, et l'erreur de validation croisée est donc une moyenne sur tous les exemples, au lieu d'un cinquième d'entre eux: elle est bien moins bruitée qu'une validation simple. Le prix est le calcul: il faut entraîner modèles au lieu d'un, et refaire tout cela pour chaque valeur d'hyperparamètre essayée. Avec et cinq valeurs candidates, cela fait cinquante entraînements, plus un dernier sur toutes les données de développement avec la valeur retenue.
Le choix de est un compromis. Chaque modèle n'a vu qu'une fraction des données: avec , il a vu la moitié des exemples, et son erreur est pessimiste par rapport au modèle final, entraîné sur tout. Avec , chaque modèle a vu presque tout, et le biais disparaît, mais les modèles sont presque identiques et leurs erreurs très corrélées, ce qui rend la moyenne plus variable qu'on ne le croirait, en plus de coûter entraînements. Les valeurs et sont les choix d'usage; elles se sont imposées par l'expérience plutôt que par un théorème. Sur le jeu A, la validation croisée par exclusion donne une erreur quadratique moyenne de CHF² (RMSE CHF), proche des CHF² de l'exemple 5.4 à quatre plis.
Trois variantes corrigent des défauts du découpage au hasard. La validation croisée stratifiée (stratified) impose à chaque pli la même proportion de chaque classe que l'ensemble: avec 20 % de pourriels et des plis de cinquante exemples, un découpage au hasard peut produire un pli à 10 % et un autre à 30 %, et des rappels incomparables. La validation croisée par groupes (group k-fold) garde dans un même pli tous les exemples d'un même groupe — un patient, un expéditeur, un immeuble —, pour respecter l'unité indépendante dont parlait le chapitre 1. Et pour des données ordonnées dans le temps, on ne valide jamais sur le passé avec un modèle entraîné sur le futur: chaque pli de validation suit chronologiquement ses données d'entraînement.
On veut choisir le nombre de voisins d'un classifieur des plus proches voisins et annoncer son erreur. Remettez les étapes dans l'ordre qui garde l'évaluation honnête.
Glissez les éléments pour les mettre dans le bon ordre
- Retenir la valeur de dont l'erreur de validation croisée est la plus basse
- Pour chaque valeur candidate de , calculer l'erreur de validation croisée sur les cinq plis
- Mesurer une seule fois l'erreur sur l'ensemble de test et l'annoncer
- Découper les données restantes en cinq plis
- Réentraîner le modèle avec cette valeur sur toutes les données hors test
- Mettre de côté un ensemble de test, sans le regarder
Complétez plis(n, k), qui renvoie la liste des plis, le pli j contenant les indices i de range(n) tels que i % k == j, et validation_croisee(donnees, k, ajuster, erreur), qui, pour chaque pli, entraîne le modèle avec ajuster sur les autres exemples, mesure erreur(predire, exemples_du_pli), et renvoie la moyenne des erreurs. Le programme reproduit l'exemple 5.4 sur le jeu A.
Les fuites de données
Une évaluation honnête repose sur une seule condition: le modèle évalué ne doit rien savoir des données d'évaluation. Cette condition est facile à respecter pour les paramètres du modèle, qu'on ajuste visiblement sur l'entraînement seul. Elle l'est beaucoup moins pour tout ce qui se passe avant l'ajustement.
L'exemple le plus courant est anodin en apparence. Le chapitre 3 recommande de standardiser les caractéristiques, , avec la moyenne et l'écart type de chaque caractéristique. Mais la moyenne et l'écart type de quelles données? Si on les calcule sur le jeu entier avant de le découper, les exemples de test ont contribué à et à : ils ont participé à la construction du modèle. Sur le jeu A, avec les logements 3 et 6 mis de côté comme au problème guidé 1.1, la surface moyenne et l'écart type (de population) valent
sur les six logements d'entraînement. La différence est faible ici, et pour la régression linéaire par moindres carrés elle n'a même aucun effet sur les prédictions: une transformation affine de la caractéristique est compensée exactement par les coefficients (exercice 5.4). Mais elle change les distances d'un -PPV (chapitre 7), la pénalité d'une régression ridge (chapitre 6) et la trajectoire de toute descente de gradient, dont le conditionnement dépend de l'échelle (chapitre 3). Et surtout, c'est une habitude: celui qui standardise avant de découper calculera aussi avant de découper la liste des mots suspects, l'imputation des valeurs manquantes ou la sélection des caractéristiques — et l'une de ces étapes finira par emporter avec elle une information décisive.
La sélection de caractéristiques est le cas où la fuite devient spectaculaire. Faisons l'expérience sur des données où il n'y a rien à apprendre. On simule 40 exemples, étiquetés alternativement 0 et 1, décrits par 500 caractéristiques tirées indépendamment selon une loi normale centrée réduite: les étiquettes n'ont aucun lien avec les caractéristiques, et aucun classifieur ne peut faire mieux que 50 % en moyenne. Le protocole choisit les 10 caractéristiques les plus corrélées (en valeur absolue) avec l'étiquette, puis classe chaque point selon le plus proche des deux centres de classe dans ces 10 dimensions, et l'on mesure l'exactitude par validation croisée à 5 plis. La seule différence entre les deux versions est l'endroit où se fait la sélection.
import math, random
def correlation(xs, ys):
mx, my = sum(xs) / len(xs), sum(ys) / len(ys)
sxy = sum((a - mx) * (b - my) for a, b in zip(xs, ys))
sxx = sum((a - mx) ** 2 for a in xs)
syy
avec fuite: 0.825 sans fuite: 0.5
Avec la sélection faite sur le jeu entier, la validation croisée annonce 82,5 % d'exactitude sur des étiquettes qui sont du pur bruit; avec la sélection refaite dans chaque pli, elle annonce 50 %, la vérité. Ce n'est pas un accident de la graine: en répétant l'expérience avec les graines 0 à 19, l'exactitude annoncée vaut en moyenne % avec la fuite et % sans elle, et la version avec fuite ne descend jamais sous %. Le mécanisme est simple: parmi 500 caractéristiques aléatoires, certaines sont corrélées par hasard avec les étiquettes des 40 exemples, y compris celles des futurs plis de validation; les choisir en regardant ces étiquettes revient à apprendre le bruit du test. Cet exemple est un classique des manuels: The Elements of Statistical Learning le présente sous le titre «la mauvaise et la bonne façon de faire une validation croisée».
D'autres fuites sont plus sournoises, parce qu'elles ne passent pas par le découpage mais par les caractéristiques elles-mêmes. Une caractéristique enregistrée après l'étiquette — «le courriel a été déplacé dans la corbeille par l'utilisateur», «le patient a reçu tel traitement» — prédit l'étiquette à merveille dans les données historiques et n'existera pas au moment où le modèle devra décider. Des doublons, ou des exemples quasi identiques présents des deux côtés du découpage, transforment le test en exercice de mémoire. Et dans des données temporelles, un découpage au hasard laisse le modèle s'entraîner sur des courriels de décembre pour «prédire» ceux de novembre. Le test de bon sens est toujours le même: au moment de la prédiction réelle, cette information existera-t-elle, et le modèle l'aura-t-il vue?
Le piège du taux de base
Le filtre témoin a une précision de 0,8095 sur son ensemble de test: quatre courriels sur cinq qu'il envoie aux indésirables sont bien des pourriels. Déployons-le dans une boîte où le courrier est très différent: un service qui reçoit surtout du courrier légitime, avec seulement 2 % de pourriels. Son rappel et sa spécificité, mesurés à classe réelle fixée, n'ont pas de raison de changer — le filtre voit les mêmes sortes de pourriels et les mêmes sortes de courriels légitimes. Sa précision, elle, va s'effondrer. C'est la formule de Bayes (Probabilités et statistique, chapitre 2).
Démonstration. Par la formule de Bayes, . Le numérateur vaut . Pour le dénominateur, la formule des probabilités totales sur le système complet donne
puisque . D'où (5.10). Quand , le numérateur tend vers 0 et le dénominateur vers , donc le quotient tend vers 0.
Avec le rappel et la spécificité du filtre témoin, la formule (5.10) redonne pour la précision de la matrice témoin. Pour d'autres taux de base:
| Taux de base | ||||||
|---|---|---|---|---|---|---|
| Précision |
Dans la boîte à 2 % de pourriels, trois courriels sur quatre envoyés aux indésirables sont légitimes. Le filtre n'a pas changé; c'est la population qui a changé. Il y a désormais 49 courriels légitimes pour un pourriel, et 5 % de faux positifs sur une classe 49 fois plus nombreuse submergent 85 % de vrais positifs sur une classe rare: c'est l'illusion d'optique de la figure 5.1, poussée à l'extrême. Remarquez aussi la dernière ligne: l'exactitude augmente quand le taux de base baisse, parce que la classe facile, les courriels légitimes, prend toute la place. L'exactitude et la précision varient en sens contraire, et un rapport d'évaluation qui ne citerait que la première annoncerait une amélioration.
Le filtre témoin (rappel , spécificité ) est déployé sur une messagerie où 1 % des courriels sont des pourriels. Quelle proportion des courriels qu'il signale sont réellement des pourriels?
Synthèse
- La matrice de confusion compte séparément les deux erreurs d'un classifieur binaire (FP et FN) et ses deux réussites (VP et VN). L'exactitude les additionne et trompe sur des classes déséquilibrées: le filtre «tout légitime» obtient 80 % sur la matrice témoin sans rien filtrer. Comparez toujours au prédicteur constant.
- La précision juge les signalements, le rappel la détection, la spécificité le respect des négatifs; le score F1, leur moyenne harmonique, vaut pour le filtre témoin.
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
Un test de dépistage est évalué sur 1 000 personnes, dont 50 sont malades. Il donne , , , .
- Calculez l'exactitude, la précision, le rappel, la spécificité et le score F1 du test.
- Calculez l'exactitude du test qui déclare tout le monde sain. Lequel des deux tests a la meilleure exactitude? Lequel préférez-vous, et pourquoi?
On considère un ensemble d'évaluation de positifs et négatifs.
- Placez sur le plan ROC les classifieurs «tout négatif» et «tout positif». Quelle est leur précision, leur rappel, leur score F1?
- Un classifieur aléatoire déclare chaque exemple positif avec probabilité , indépendamment de ses caractéristiques et de sa classe. Montrez que son taux de vrais positifs et son taux de faux positifs ont la même espérance , et que sa précision attendue (au sens du quotient des espérances ) vaut la proportion de positifs.
On reprend le modèle logistique sur le jeu B et le tableau de l'exemple 5.2. Écarter un courriel légitime coûte 5, laisser passer un pourriel coûte 1, comme dans l'exercice 1.4.
- Calculez le coût total sur les seize courriels pour les seuils , et .
- Montrez, en parcourant le tableau, qu'aucun seuil ne fait mieux qu'un coût de 2 sur ces données, et donnez un seuil qui l'atteint.
- Faut-il adopter ce seuil plutôt que ? Discutez.
- Pour quelles valeurs de le seuil théorique (5.5) est-il inférieur à 0,5?
On considère la régression linéaire simple par moindres carrés sur un ensemble d'entraînement , et une transformation affine de la caractéristique , avec des constantes et quelconques.
On considère des scores distincts pour les positifs et pour les négatifs.
Références
- Hastie, T., Tibshirani, R. et Friedman, J., The Elements of Statistical Learning, Springer, 2ᵉ éd., 2009, chap. 7 (évaluation et choix de modèles, validation croisée, et la section sur la mauvaise et la bonne façon de faire une validation croisée).
- James, G., Witten, D., Hastie, T. et Tibshirani, R., An Introduction to Statistical Learning, Springer, 2ᵉ éd., 2021, chap. 4 et 5 (matrice de confusion, courbe ROC, validation croisée et ses variantes).
- Murphy, K. P., Probabilistic Machine Learning: An Introduction, MIT Press, 2022, chap. 5 (théorie de la décision, coûts asymétriques, courbes ROC et précision–rappel).
- Bishop, C. M., Pattern Recognition and Machine Learning, Springer, 2006, chap. 1 (théorie de la décision, minimisation du risque attendu et rejet).
- Azencott, C.-A., Introduction au Machine Learning, Dunod, 2ᵉ éd., 2022 (sélection et évaluation de modèles, en français).