Le machine learning en partant de zéro · Leçon 2.2 · 9 sur 33 leçons prêtes · 10 min
Évaluer un classifieur : au-delà de l’exactitude
En bref
L’exactitude cache le type d’erreurs d’un modèle. Matrice de confusion, précision et rappel révèlent le compromis créé par un seuil sur des données de tumeurs.
Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
Un détecteur de fumée qui ne sonne jamais ne se trompe jamais sur un faux incendie. Un détecteur qui hurle chaque fois que vous faites griller du pain ne rate jamais un vrai feu. Lequel est le meilleur ? Aucun des deux – et un seul chiffre d’exactitude ne vous dirait même pas lequel vous avez. Cette leçon apprend à compter les erreurs de façon à montrer leur nature, pas seulement leur nombre.
Choisissez une réponse et votre degré de certitude.
Répondez pour débloquer le labo.
Labo interactif
Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.
Voir la réponse
Bonne réponse : 0,1
Au seuil 0,1 le rappel est de 96,9 % (62 des 64 tumeurs malignes détectées), à 0,2 seulement 92,2 % et à 0,5 82,8 %. Vous le payez en fausses alertes : 20 biopsies saines signalées comme malignes à 0,1 contre 3 à 0,5.
À vous de jouer
- Déplacez le curseur du seuil vers la gauche. Regardez les faux négatifs de la matrice de confusion diminuer et les faux positifs augmenter, et le rappel et la précision partir dans des directions opposées.
- Déplacez le curseur du seuil vers la droite et observez l’inverse. Gardez un œil sur l’exactitude : vous dit-elle quel type d’erreur vous commettez ?
- Trouvez le seuil le plus élevé auquel aucune tumeur maligne n’est manquée. Lisez combien de tumeurs bénignes sont alors signalées à tort.
- Choisissez le seuil que vous prendriez pour un test de dépistage, et dites en une phrase pourquoi.
L’idée en quelques mots
Voyons maintenant ce que vous venez de manipuler, en termes simples.
Revenons aux 569 tumeurs du sein de la leçon 1. Un modèle attribue un score à chaque tumeur : plus le score est élevé, plus la tumeur a de chances d’être maligne. Un seuil transforme le score en décision. Chaque décision tombe alors dans l’une de quatre cases :
| prédite maligne | prédite bénigne | |
|---|---|---|
| réellement maligne | vrai positif (VP) | faux négatif (FN) |
| réellement bénigne | faux positif (FP) | vrai négatif (VN) |
Ce tableau est la matrice de confusion. La diagonale contient les décisions correctes. Les deux autres cases contiennent deux sortes d’erreurs très différentes : un faux positif est une fausse alerte (une patiente en bonne santé envoyée faire d’autres examens), un faux négatif est un oubli (un cancer renvoyé à la maison).
Le détecteur de fumée résume tout. Le détecteur muet n’a aucun faux positif et une foule de faux négatifs. Le détecteur à tartines, c’est l’inverse. Un bon détecteur équilibre les deux selon ce que coûte chaque erreur.
Pourquoi ça marche
Deux nombres résument la matrice bien mieux que l’exactitude :
précision = VP / (VP + FP) rappel = VP / (VP + FN)
Le rappel (sensibilité) répond à la question : parmi toutes les tumeurs malignes, quelle part avons-nous détectée ? La précision répond : parmi toutes les tumeurs que nous avons déclarées malignes, quelle part l’était vraiment ? Le rappel, c’est ne rien manquer ; la précision, c’est ne pas crier au loup.
Le seuil règle le compromis entre les deux. Baissez-le et davantage de tumeurs sont signalées comme malignes : vous détectez plus de cancers (le rappel monte), mais vous signalez aussi plus de tumeurs bénignes (la précision baisse en général). Montez-le et c’est l’inverse. Aucun seuil ne peut maximiser les deux, à moins que le modèle ne sépare parfaitement les classes. Choisir un seuil n’est donc pas un détail technique, mais une décision de valeurs : combien de fausses alertes êtes-vous prêt à accepter pour éviter un cancer manqué ?
L’exactitude mélange les quatre cases en un seul nombre et masque ce choix. Elle masque aussi le déséquilibre des classes. Comme 357 des 569 tumeurs sont bénignes, un modèle qui déclare tout bénin a raison dans près des deux tiers des cas tout en ne détectant aucun cancer – un rappel de zéro. C’est le paradoxe de l’exactitude : un modèle peut paraître correct selon l’exactitude et être inutile pour ce à quoi il était destiné.
Erreur fréquente
L’erreur la plus courante est de ne rapporter que l’exactitude, surtout sur des données déséquilibrées où une classe est bien plus rare que l’autre. La deuxième est de garder le seuil par défaut de 0,5 sans se demander ce que coûtent les erreurs. Un test de dépistage, où un oubli peut être fatal et une fausse alerte signifie un examen de plus, devrait généralement avoir un seuil plus bas qu’un test qui déclenche une opération. Un troisième piège est de confondre précision et rappel ; retenir les questions auxquelles ils répondent – « parmi ceux que j’ai signalés » contre « parmi ceux qui existent » – aide davantage que d’apprendre les formules par cœur.
Jusqu’ici, nous avons noté les modèles sur un jeu de test fixe. Mais un modèle peut briller sur les données dont il a appris et échouer sur tout le reste. Dans la prochaine leçon, nous provoquons cela exprès : le surapprentissage.
Trouvez l’erreur de l’IA
Voici la réponse d’un chatbot. Une phrase est fausse. Laquelle ?
Question : Au seuil 0,1, mon classifieur de tumeurs détecte 62 des 64 tumeurs malignes, mais il en signale aussi 20 bénignes. Comment dois-je interpréter cela ?
Montrer la phrase fausse
La phrase fausse : Et comme la précision est la part de toutes les tumeurs malignes que le modèle détecte, elle est tout aussi élevée ici.
C’est la définition du rappel. La précision répond à l’autre question – parmi les tumeurs signalées, combien sont réellement malignes – et au seuil 0,1 les 20 fausses alertes la tirent vers le bas, alors qu’à 0,5 il n’y en a que 3.
Quiz
Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.
À retenir
- La matrice de confusion répartit les décisions en vrais et faux positifs et négatifs.
- Le rappel est la part des vrais positifs détectés ; la précision est la part des cas signalés qui sont réels.
- Le seuil échange du rappel contre de la précision, et le bon équilibre dépend du coût de chaque erreur.
- L’exactitude masque le type d’erreurs et peut paraître bonne sur des données déséquilibrées tout en manquant chaque positif.
Pour aller plus loin : formule, code, pratique
Les maths
Un seuil t transforme un score en décision : prédire maligne quand score ≥ t. Compter les quatre cases donne les mesures :
accuracy = (TP + TN) / n, la part de toutes les décisions qui sont justes ;precision = TP / (TP + FP), la part des alertes qui sont réelles ;recall = TP / (TP + FN), la part des vrais cas qui ont été détectés ;F1 = 2 · precision · recall / (precision + recall), la moyenne harmonique des deux, qui reste basse si l’une des deux est basse.
Abaisser t ne peut qu’ajouter des alertes, donc TP et FP ne baissent jamais et FN ne monte jamais. C’est pourquoi le rappel ne baisse jamais quand t descend, alors que la précision baisse en général. Un modèle qui répond toujours « bénigne » a TP = 0, donc un rappel de 0, et son exactitude est simplement la part de la classe majoritaire : 357 / 569.
En code (Python)
Les 569 tumeurs de la leçon, avec les 10 variables « mean » du lab, une régression logistique avec mise à l’échelle et un découpage de test stratifié à 30 % (171 biopsies, random_state=1). Les comptes propres au lab (TP / FN / FP) sont 53 / 11 / 3 au seuil 0,5 et 62 / 2 / 20 à 0,1. Ce découpage n’est pas celui du lab, donc les comptes diffèrent un peu :
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, b = load_breast_cancer(return_X_y=True, as_frame=True)
X = X.filter(like="mean ") # les 10 variables « mean », comme dans le lab
y = 1 - b # dans sklearn 0 = maligne ; on inverse pour que 1 = maligne
print(f"tumours {len(y)}, benign {(y == 0).sum()}, always-benign accuracy {(y == 0).mean():.3f}")
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)
score = make_pipeline(StandardScaler(), LogisticRegression()).fit(Xtr, ytr).predict_proba(Xte)[:, 1]
for t in (0.5, 0.1):
flag = score >= t
tp, fp, fn = (flag & (yte == 1)).sum(), (flag & (yte == 0)).sum(), (~flag & (yte == 1)).sum()
print(f"t={t}: TP {tp} FN {fn} FP {fp} precision {tp / (tp + fp):.3f} recall {tp / (tp + fn):.3f}")
Sortie
tumours 569, benign 357, always-benign accuracy 0.627
t=0.5: TP 53 FN 11 FP 2 precision 0.964 recall 0.828
t=0.1: TP 61 FN 3 FP 13 precision 0.824 recall 0.953
À 0,5, le rappel est ici de 0,828, comme dans le lab, mais à 0,1 il est de 0,953 contre 96,9 % dans le lab, et les fausses alertes sont 13 au lieu de 20. Le rappel varie d’un découpage à l’autre, ce qui est tout l’objet de la leçon 2. Abaisser le seuil de 0,5 à 0,1 augmente quand même le rappel et diminue la précision, comme le dit la leçon. La référence « toujours bénigne » a l’air correcte du point de vue de l’exactitude et ne détecte aucun cancer.
Télécharger le notebook (.ipynb). Ouvrez-le dans Jupyter ou importez-le dans Google Colab ; il télécharge lui-même les données manquantes.
Pour les praticiens
- Donnez la précision et le rappel (ou toute la matrice de confusion) à côté de l’exactitude, et dites toujours quelle classe est « positive ».
- Choisissez le seuil sur des données de validation, d’après le coût de chaque erreur, pas par habitude. Le 0,5 par défaut n’est qu’une convention.
- Calculez toujours la référence qui prédit la classe majoritaire. Si votre exactitude en est proche, le modèle a peu appris.
- Le rappel et la précision à un seuil ne sont qu’un point d’une courbe. Pour comparer deux modèles équitablement, comparez-les au même rappel ou regardez toute la courbe précision-rappel.
- Un score n’est qu’un classement tant qu’il n’est pas calibré. Ne lisez pas 0,3 comme « 30 % de chances » sans vérifier la calibration.
Cela vous a-t-il aidé ?
Merci ! Cela nous aide à nous améliorer.
Aller plus loin dans l’Atlas
Articles de l’encyclopédie sur les notions de cette leçon :