Aller au contenu principal

Mesurer un classifieur

Ce que ce chapitre apporte

  • Dire pourquoi l'exactitude ne mesure rien sur des classes déséquilibrées.
  • Lire une matrice de confusion et nommer ses quatre cases.
  • Distinguer précision et rappel, et dire ce que chacune ignore.
  • Expliquer pourquoi le seuil de décision n'est pas une propriété du modèle.
  • Lire une courbe ROC, son aire, et savoir ce qu'elle ne voit pas.
  • Choisir entre courbe ROC et courbe précision-rappel selon le déséquilibre.
  • Fixer un seuil à partir du coût des erreurs.
  • Vérifier qu'un score annonce la bonne fréquence.
Un modèle qui se trompe une fois sur sept peut être excellent ou complètement inutile, et le seul chiffre de son taux de réussite ne permet pas de trancher. Ce chapitre montre pourquoi, présente les quatre nombres qui remplacent ce chiffre unique, et défend une idée qui surprend : le seuil qui transforme un score en décision n'appartient pas au modèle. C'est un choix, il dépend du coût des deux erreurs, et le laisser à sa valeur par défaut coûte ici près du triple.

L'exactitude ne mesure rien

Le modèle qui ne fait rien obtient 86 %
Sur un journal d'alertes où 14 % des incidents sont graves, un modèle qui répond toujours « bénin », sans regarder quoi que ce soit, obtient 86 % d'exactitude.
Aucun modèle utile n'a le droit d'être comparé à autre chose que ce chiffre. Annoncer « 88 % de réussite » sans préciser le taux de base revient à ne rien annoncer du tout, et c'est pourtant la façon dont la plupart des résultats sont présentés.
Le problème est structurel : l'exactitude additionne les deux erreurs comme si elles étaient équivalentes, alors qu'elles ne le sont jamais. Manquer un incident grave et lever une fausse alerte n'ont ni le même coût, ni les mêmes conséquences, ni la même fréquence.
La matrice de confusion

Quatre nombres, et non un seul :

déclaré positifdéclaré négatif
vraiment positifvrais positifs (VP)manqués (FN)
vraiment négatiffausses alertes (FP)vrais négatifs (VN)

Les deux erreurs portent des noms distincts parce qu'elles sont des choses distinctes. Les confondre est l'erreur d'analyse la plus fréquente du domaine.

Le seuil, et tout ce qui en dépend

Un classifieur ne rend pas une classe : il rend un score. Le transformer en décision demande un seuil. La figure ci-dessous laisse le déplacer.

score rendu par le modèle00,250,50,751alerte gravealerte bénigneseuil 0,5déclarés positifs →ce que la décision produitdéclaréalerte gravealerte bénigne6vrais positifs6manqués4fausses alertes44vrais négatifsvraiment 12vraiment 48courbe ROC, aire 0,886fausses alertesrappel en ordonnée
précision 0,6rappel 0,5F1 0,545exactitude 0,833

6 cas manqués et 4 fausses alertes. Baisser le seuil échange des manqués contre des fausses alertes, jamais l'inverse.

Soixante alertes, dont douze réellement graves. Descendre le seuil de 0,50 à 0,10 fait passer le rappel de 0,500 à 0,833 et la précision de 0,600 à 0,526 : six manqués deviennent deux, au prix de cinq fausses alertes de plus. Le modèle n'a pas changé d'un iota ; seule la décision a changé.
Ce que le curseur démontre
Le modèle est fixe, la décision ne l'est pas. Les soixante scores ne bougent jamais. Ce qui bouge est la barre, et avec elle les quatre cases.
Les deux erreurs s'échangent. Baisser le seuil convertit des manqués en fausses alertes, jamais l'inverse. Il n'existe aucune position qui améliore les deux à la fois, et c'est pourquoi il faut savoir laquelle des deux coûte le plus cher.
Le point glisse sur une courbe fixe. Sur la courbe ROC, déplacer le seuil ne fait que se déplacer le long d'un tracé que le modèle a fixé une fois pour toutes. Changer de seuil ne rend pas le modèle meilleur ; changer de modèle déplace la courbe entière.
Précision et rappel

Précision =VPVP+FP= \dfrac{VP}{VP + FP} : parmi les cas déclarés positifs, quelle part l'est vraiment. Elle répond à « quand il sonne, a-t-il raison ».

Rappel =VPVP+FN= \dfrac{VP}{VP + FN} : parmi les positifs réels, quelle part a été retrouvée. Il répond à « en laisse-t-il passer ».

F1 est leur moyenne harmonique, 2preˊcisionrappelpreˊcision+rappel\dfrac{2 \cdot \text{précision} \cdot \text{rappel}}{\text{précision} + \text{rappel}}, basse dès que l'une des deux est basse.

Chacune ignore une case, et ce n'est pas la même
La précision ne regarde jamais les manqués. Un modèle qui ne signale qu'un seul cas, et qui a raison, affiche une précision de 1,000 tout en laissant passer tout le reste.
Le rappel ne regarde jamais les fausses alertes. Un modèle qui déclare tout positif affiche un rappel de 1,000 tout en étant parfaitement inutile.
Chacune prise seule se truque en une ligne. C'est pour cela qu'on les rapporte ensemble, avec le seuil auquel elles ont été mesurées, et qu'un F1 seul est déjà une information appauvrie.
Aucune des deux ne regarde les vrais négatifs, qui sont pourtant l'écrasante majorité des cas. C'est délibéré : sur un problème déséquilibré, cette case écrase tout et c'est elle qui rend l'exactitude trompeuse.

Un seuil par défaut peut tout annuler

score rendu par le modèle00,250,50,751alerte gravealerte bénigneseuil 0,5déclarés positifs →ce que la décision produitdéclaréalerte gravealerte bénigne0vrais positifs12manqués0fausses alertes48vrais négatifsvraiment 12vraiment 48courbe ROC, aire 0,809fausses alertesrappel en ordonnée
précision indéfinirappel 0F1 indéfiniexactitude 0,8

Aucun cas n'est déclaré alerte grave : le modèle ne sert plus à rien, et son exactitude vaut pourtant 0,8.

Les mêmes soixante alertes, notées par un modèle plus faible qui n'exploite qu'une colonne. Ses scores ne dépassent jamais 0,450 : au seuil par défaut de 0,50 il ne déclare rien du tout, sa précision n'est même pas définie, et son exactitude atteint pourtant sa valeur maximale de 0,800. Descendre le seuil à 0,15 lui rend un rappel de 0,833.
L'exactitude est maximale quand le modèle ne sert à rien
Cette figure est le cas le plus fréquent en pratique, et le plus mal diagnostiqué.
Le modèle sait classer : son aire sous la courbe ROC vaut 0,809, ce qui est loin d'être négligeable. Mais ses scores sont tassés entre 0,028 et 0,450, si bien qu'au seuil par défaut de 0,50 aucune alerte ne franchit la barre. Zéro vrai positif, zéro fausse alerte, douze manqués.
Et l'exactitude, à ce moment précis, vaut 0,800, son maximum sur toute la plage du seuil. Quiconque optimise l'exactitude choisira donc exactement le réglage qui rend le modèle inerte.
La cause est presque toujours la même : sur des classes déséquilibrées, un modèle entraîné sans précaution produit des scores écrasés vers zéro. Le remède n'est pas de réentraîner, c'est de choisir le seuil.

L'exactitude, en chiffres

main.py
Sortie
>_ Prêt à exécuter…

La courbe ROC, et ce qu'elle ne voit pas

Courbe ROC et son aire

En faisant varier le seuil de 1 à 0, porter en abscisse le taux de fausses alertes FPFP+VN\frac{FP}{FP+VN} et en ordonnée le rappel VPVP+FN\frac{VP}{VP+FN}.

L'aire sous la courbe a une interprétation exacte : c'est la probabilité qu'un positif tiré au hasard reçoive un score supérieur à celui d'un négatif tiré au hasard.

Elle vaut 0,5 pour un modèle qui classe au hasard et 1 pour un modèle qui sépare parfaitement.

main.py
Sortie
>_ Prêt à exécuter…
L'aire sous la ROC est aveugle au déséquilibre
Ce n'est pas un défaut de calcul, c'est sa définition. Le taux de fausses alertes rapporte les FP au nombre de négatifs réels, qui sont très nombreux. Cent fausses alertes sur dix mille négatifs donnent un taux de 0,01, visuellement négligeable, alors qu'elles peuvent noyer les dix vrais positifs.
La précision, elle, rapporte les VP à ce qui a été déclaré positif, et voit donc immédiatement ce naufrage. Le tableau le mesure : quand la part de graves passe de 14 % à 1,9 %, l'aire ne bouge presque pas alors que la précision est divisée par près de trois.
La règle qui en découle est nette. Sur des classes équilibrées, la ROC convient. Sur des classes fortement déséquilibrées, elle donne une impression flatteuse et il faut regarder la courbe précision-rappel, dont le plancher est le taux de base lui-même.

Le coût des erreurs décide du seuil

main.py
Sortie
>_ Prêt à exécuter…
Le seuil est une décision de gestion, pas de modélisation
Le même modèle, les mêmes scores, les mêmes données. Seul change le rapport entre le coût d'un incident manqué et celui d'une fausse alerte, et le seuil optimal passe de 0,03 à 0,67.
Le seuil théorique se calcule d'ailleurs : pour un modèle bien calibré, il vaut cFPcFP+cFN\dfrac{c_{FP}}{c_{FP} + c_{FN}}, soit 1/21=0,0481/21 = 0{,}048 ici. La valeur mesurée, 0,03, en est proche, et l'écart mesure exactement le défaut de calibration.
Le seuil par défaut de 0,50 coûte 2,7 fois le minimum. Ce n'est pas un réglage fin : c'est presque le triple, obtenu en ne se posant pas la question.
Personne dans une équipe de modélisation ne connaît le rapport de coûts. Il faut aller le demander, et c'est une conversation, pas un calcul.

La calibration

Un modèle calibré

Un score est calibré si, parmi tous les cas auxquels il attribue la valeur pp, la proportion réellement positive vaut pp.

On le vérifie en regroupant les cas par tranche de score et en comparant, pour chaque tranche, le score moyen annoncé à la fréquence observée. Un modèle calibré place ses points sur la diagonale.

main.py
Sortie
>_ Prêt à exécuter…
Quand la calibration compte, et quand elle ne compte pas
Elle ne compte pas si l'on ne veut qu'un classement : trier les alertes de la plus à la moins suspecte, traiter les vingt premières. Toute transformation croissante des scores donne le même ordre, donc la même aire sous la ROC.
Elle compte dès que le score est interprété comme une probabilité. Multiplier un score par un montant pour obtenir une perte attendue, additionner des risques, ou fixer un seuil à partir d'un rapport de coûts : ces trois usages sont faux si le score ment.
Le seuil théorique calculé plus haut, 1/211/21, ne vaut d'ailleurs que pour un modèle calibré, et l'écart avec le seuil mesuré vient précisément de là.
Une calibration se corrige après coup, sans retoucher le modèle, en ajustant une fonction croissante des scores sur un jeu réservé. Comme le classement est préservé, l'aire sous la ROC ne change pas d'un iota.

Exercices type

Un modèle annonce 96 % de réussite sur un problème où 4 % des cas sont positifs. Qu'en penser ?

Qu'on ne sait rien, et qu'il faut réclamer d'autres chiffres.

Le modèle qui répond toujours « négatif », sans rien regarder, obtient exactement 96 % sur ce problème. Le chiffre annoncé est donc compatible avec un modèle parfaitement inutile.

Il est même compatible avec un modèle nuisible, qui trouverait quelques positifs au prix d'un grand nombre de fausses alertes.

Ce qu'il faut demander : la matrice de confusion complète, la précision et le rappel au seuil employé, et le taux de base. Trois lignes qui rendent le résultat lisible, contre un pourcentage qui ne dit rien.

Un modèle affiche une précision de 1,000. Est-ce bon ?

On ne peut pas le dire sans le rappel.

La précision ne regarde jamais les cas manqués. Un modèle qui ne signale qu'un seul cas sur mille, et qui a raison sur celui-là, affiche une précision parfaite tout en laissant passer tout le reste.

Symétriquement, un rappel de 1,000 s'obtient en déclarant tout positif, ce qui est aussi inutile.

Les deux se rapportent donc ensemble, avec le seuil auquel elles ont été mesurées. Une précision seule, comme un rappel seul, se truque en déplaçant le curseur, sans toucher au modèle.

Faut-il rapporter l'aire sous la courbe ROC ou la courbe précision-rappel ?

Cela dépend entièrement du déséquilibre.

Sur des classes à peu près équilibrées, les deux racontent la même chose et la ROC est plus lisible.

Sur des classes fortement déséquilibrées, la ROC flatte. Le taux de fausses alertes rapporte les FP au nombre de négatifs, qui est immense : cent fausses alertes sur dix mille négatifs donnent 0,01, alors qu'elles noient dix vrais positifs.

Le chapitre le mesure : quand la part de positifs passe de 14 % à 1,9 %, l'aire sous la ROC descend de 0,879 à 0,862 tandis que la précision au rappel 0,80 est divisée par près de trois.

En pratique : rapporter les deux, et faire porter la conclusion par la seconde quand les positifs sont rares.

Sur quelle base fixer le seuil de décision ?

Sur le rapport entre le coût d'un cas manqué et celui d'une fausse alerte, et sur rien d'autre.

Pour un modèle calibré, le seuil optimal vaut cFPcFP+cFN\frac{c_{FP}}{c_{FP} + c_{FN}}. Si un incident manqué coûte vingt fois une fausse alerte, il vaut 1/21=0,0481/21 = 0{,}048, et non 0,5.

Le chapitre mesure ce que coûte l'inattention : au seuil par défaut de 0,50, le coût total vaut 2,7 fois le minimum. Presque le triple, pour n'avoir pas posé la question.

Et ce rapport de coûts n'est jamais connu de l'équipe de modélisation. Il faut aller le chercher auprès de ceux qui subissent les deux erreurs, et cela relève d'une conversation, pas d'un calcul.

Optimiser l'exactitude, est-ce raisonnable ?

Presque jamais, et le chapitre en donne le contre-exemple le plus net.

Sur le modèle affaibli de la seconde figure, l'exactitude atteint son maximum de 0,800 exactement au seuil où le modèle ne déclare plus rien du tout : zéro vrai positif, douze cas manqués. Optimiser l'exactitude conduit donc à choisir le réglage qui rend le modèle inerte.

La raison est que l'exactitude additionne les deux erreurs comme si elles pesaient pareil, alors que sur des classes déséquilibrées les négatifs écrasent tout.

Optimiser plutôt un coût exprimé dans l'unité du problème, ou à défaut un F1, en rapportant toujours la matrice complète à côté.

Deux modèles ont la même aire sous la ROC. Sont-ils interchangeables ?

Non. L'aire résume le classement, et deux classements identiques peuvent s'accompagner de scores très différents.

Le premier peut être bien calibré, ses scores annonçant les bonnes fréquences ; le second peut les écraser vers zéro. L'aire est la même, mais le second est inutilisable dès qu'on multiplie son score par un montant, qu'on additionne des risques, ou qu'on fixe un seuil par un rapport de coûts.

L'aire est aussi un résumé global : deux courbes de même aire peuvent se croiser, l'une étant meilleure à faible rappel et l'autre à fort rappel. Si le régime d'usage est connu, c'est la performance dans ce régime qu'il faut comparer, pas l'aire.

Enfin, l'aire ignore le coût des erreurs, le coût de calcul, la stabilité et le besoin d'expliquer.

Vérification rapideon peut se reprendre

1.Sur un problème où 4 % des cas sont positifs, un modèle affiche 96 % d'exactitude. Cela signifie…

2.Que ne regarde jamais la précision ?

3.Déplacer le seuil de décision…

4.Pourquoi préférer la courbe précision-rappel quand les positifs sont rares ?

5.Un incident manqué coûte vingt fois une fausse alerte. Quel seuil viser pour un modèle calibré ?

6.Quand la calibration d'un score est-elle indispensable ?

La méthode

  1. Commencer par le taux de base, et refuser toute exactitude annoncée sans lui.
  2. Rapporter la matrice de confusion entière, pas un chiffre unique.
  3. Donner précision et rappel ensemble, avec le seuil auquel ils ont été mesurés.
  4. Tracer les deux courbes, ROC et précision-rappel, et conclure sur la seconde quand les positifs sont rares.
  5. Aller demander le rapport de coûts entre un cas manqué et une fausse alerte.
  6. En déduire le seuil, au lieu de garder 0,5.
  7. Vérifier la calibration dès que le score sert à un calcul et non à un tri.
  8. Mesurer tout cela sur le jeu de test, une seule fois, comme au chapitre 7.

Synthèse

  • L'exactitude ne mesure rien sans le taux de base : ici un modèle inerte obtient 86 %.
  • La matrice de confusion distingue les deux erreurs, qui n'ont ni le même coût ni la même fréquence.
  • La précision ignore les manqués, le rappel ignore les fausses alertes ; chacune seule se truque.
  • Le seuil n'appartient pas au modèle : les scores sont fixes, la décision est un choix.
  • Baisser le seuil échange des manqués contre des fausses alertes, jamais l'inverse.
  • Un modèle dont les scores plafonnent à 0,45 ne déclare rien au seuil par défaut, avec une exactitude à son maximum.
  • L'aire sous la ROC est la probabilité qu'un positif soit mieux noté qu'un négatif ; elle est aveugle au déséquilibre.
  • La courbe précision-rappel a pour plancher le taux de base et voit ce que la ROC masque.
  • Le seuil optimal vaut cFP/(cFP+cFN)c_{FP}/(c_{FP}+c_{FN}) pour un modèle calibré ; garder 0,5 coûte ici 2,7 fois le minimum.
  • Un score calibré annonce la bonne fréquence ; cela ne compte pas pour trier, cela compte pour calculer.
  • Une même aire peut recouvrir des scores très différents : elle résume le classement, et rien d'autre.

Mettre en pratique