Aller au contenu
English

Les métriques de classification

  • Leçon 9
  • 60 min
  • Module 3 : Évaluer les modèles supervisés
Leçon 9 sur 27 · Apprentissage automatique : du problème à un modèle fiableLes métriques de classification

Ce que vous saurez faire

Mesurez un modèle qui répond oui ou non en comptant ce qui est réellement arrivé après ses réponses. Un seul nombre, comme l’exactitude, peut sembler excellent alors que le modèle détecte presque aucun des cas importants.

Carnet JupyterFaites cette leçon dans un carnet JupyterColab · Kaggle · GitHub · en anglais

Le carnet (notebook) Jupyter contient toutes les cellules de code, les tâches et les vérifications de cette leçon, avec les consignes. Ses cellules de configuration installent pandas et scikit-learn et téléchargent les données d’exercice. Il fonctionne donc sans le projet local. Lisez les explications ici et exécutez le code là-bas.

Le carnet est en anglais. Colab et Kaggle ouvrent votre propre copie. Il faut un compte Google ou Kaggle gratuit. Vous êtes bloqué ? Consultez le carnet de solution.

Avant de commencerCe qu’il faut savoir et avoir sous la mainEnviron 60 minutes

Ce que vous devez savoir

Ce qu’il vous faut sur votre ordinateur (seulement pour le parcours local; le carnet n’en a pas besoin)

  • Le dossier de projet ~/projects/ticket-model avec son .venv (pandas 3.0.6, scikit-learn 1.9.1, matplotlib 3.11.2) et les données dans data/, dont extra_features.csv. Vous les avez créés dans Définir une référence de base : préparer votre projet. Si un fichier de données manque ou a changé, exécutez python get_data.py --reset. La dernière ligne doit être Ready: train 16939 rows (1983 escalated), valid 1179 (183), test 1002 (157). (prêt : 16 939 lignes d’entraînement, dont 1 983 transférées; 1 179 de validation, dont 183 transférées; 1 002 de test, dont 157 transférées).
  • Pour exécuter le carnet localement, ouvrez-le dans VS Code avec l’extension Jupyter et le noyau .venv, comme dans Définir une référence de base : ouvrir un carnet dans VS Code.

Testé sur macOS avec Python 3.14.6, pandas 3.0.6, scikit-learn 1.9.1 et matplotlib 3.11.2. Les commandes Windows ne sont pas testées. Le carnet a été testé dans Jupyter.

Dans Les métriques de régression, chaque prédiction était un nombre. L’erreur était donc réel − prédit : 40 − 30 = 10 billets de soutien. La question principale de Larkfield est différente. Pour chaque nouveau billet, Grace, la responsable du soutien, veut un oui ou non. Ce billet sera-t-il transféré à un agent expérimenté dans les 72 heures? La réponse est une classe, pas un nombre.

Que donne « transféré » moins « non transféré »? Cette question n’a aucun sens. Vous pourriez représenter les classes par 1 et 0 et soustraire. Mais la différence ne peut être que 0 (correct), 1 ou −1 (incorrect). Elle n’a pas de grandeur : un « non » incorrect n’est pas « un peu » incorrect. Avec une réponse oui ou non, vous pouvez seulement demander si elle était correcte. Comme il y a deux réponses possibles et deux réalités possibles, il y a exactement quatre résultats possibles. En classification, nous ne mesurons donc pas de distances. Nous comptons les quatre résultats et calculons chaque métrique à partir de ces nombres.

Une alarme de fumée est un classificateur. Chaque minute, elle répond à une question : y a-t-il un incendie? Elle répond en sonnant ou en restant silencieuse. Comparez sa réponse à ce qui s’est réellement passé. Vous obtenez l’un de ces quatre résultats :

  1. Il y a un incendie et l’alarme sonne. Elle a détecté l’incendie.
  2. Il y a un incendie et l’alarme reste silencieuse. Elle a manqué l’incendie. C’est le pire résultat.
  3. Il n’y a pas d’incendie, seulement de la fumée du grille-pain, et l’alarme sonne. Une fausse alerte : c’est dérangeant, mais personne n’est blessé.
  4. Il n’y a pas d’incendie et l’alarme reste silencieuse. Elle a correctement ignoré la pièce, comme presque chaque minute de l’année.
L’alarme sonneL’alarme se taitVrai feudétectéTPmanquéFNPas de feufausse alarmeFPbien ignoréTN
L’alarme sonneL’alarme se taitFeudétectéTPmanquéFNPas de feufausse alarmeFPbien ignoréTN
Deux réalités (incendie ou aucun incendie) et deux réponses (l'alarme sonne ou reste silencieuse) donnent quatre résultats. Les cellules vertes sont des réponses correctes, les cellules orange sont des erreurs. Les deux types d'erreurs ont des coûts très différents.
Description textuelle du graphique

Une grille de deux cases sur deux. Les colonnes représentent la réponse de l’alarme : elle sonne ou reste silencieuse. Les lignes représentent la réalité : un véritable incendie ou aucun incendie. En haut à gauche, une flamme et une cloche qui sonne : détecté, un vrai positif (TP). En haut à droite, une flamme et une cloche silencieuse : manqué, un faux négatif (FN). En bas à gauche, une rôtie qui fume et une cloche qui sonne : une fausse alerte, un faux positif (FP). En bas à droite, une rôtie sans fumée et une cloche silencieuse : correctement ignoré, un vrai négatif (TN). Les deux réponses correctes, TP et TN, ont un fond vert. Les deux erreurs, FN et FP, ont un fond orange.

Vous avez déjà utilisé ces quatre expressions pour les signalements de Larkfield dans Définir une référence de base : détectés, fausses alertes, manqués et correctement ignorés. Les spécialistes utilisent des noms techniques fixes. Vous retrouverez ces noms dans chaque bibliothèque et article scientifique. La classe que nous cherchons, l’incendie ou le transfert, est la classe positive. « Positive » ne veut pas dire « bonne » : un incendie n’est pas une bonne nouvelle. L’autre classe est la classe négative. Dans les quatre noms, positif ou négatif désigne la réponse du classificateur. Vrai ou faux indique si cette réponse était correcte :

Expression simple Chez Larkfield Nom technique Abréviation
détecté signalé et transféré vrai positif TP
manqué non signalé, mais transféré faux négatif FN
fausse alerte signalé, mais non transféré : un examen inutile faux positif FP
correctement ignoré non signalé et non transféré vrai négatif TN

Un faux négatif est donc un « non » incorrect : un transfert manqué.

Chez Larkfield, les deux erreurs ont des coûts différents. Un transfert manqué laisse un client avec un problème sérieux dans la file normale, souvent une journée de plus. Certains clients partent. Un examen inutile prend environ 10 minutes à un agent expérimenté. Gardez ces deux coûts en tête : chaque métrique ci-dessous les considère différemment.

Un premier signalement oui ou non : le score à points

Section intitulée « Un premier signalement oui ou non : le score à points »

Pour compter les résultats, il nous faut un classificateur. Nous n’avons pas encore de modèle d’apprentissage automatique dans ce cours, et nous n’en avons pas besoin. Les hôpitaux utilisent un outil simple depuis des décennies : un score d’alerte précoce. Au chevet du patient, une infirmière vérifie quelques signes, comme la fréquence cardiaque et la fréquence respiratoire. Chaque signe hors de la plage normale ajoute des points. Un patient qui a beaucoup de points reçoit immédiatement l’attention d’un médecin. Les banques utilisent des grilles de notation semblables pour les prêts. Un tel score à points est une liste de vérification. Chaque fait qui rend le résultat indésirable plus probable ajoute des points. Tout le monde peut le calculer à la main et le vérifier.

Priya, la scientifique des données, en crée un pour Larkfield. Elle utilise seulement les données d’entraînement, les billets d’avant mai, et les faits connus à la création du billet. Dans les données d’entraînement, 11,7 % des billets sont transférés. Elle cherche des faits de type oui ou non qui rendent un transfert nettement plus probable :

Fait concernant le billet (données d’entraînement) Billets avec ce fait Transférés, avec ce fait Transférés, sans ce fait Points
Priorité 1 (la plus urgente) 2 385 (14,1 %) 29,1 % 8,9 % 2
Équipe payment ou warranty 5 000 (29,5 %) 18,5 % 8,9 % 1
Au moins un transfert du client dans les 90 derniers jours 7 809 (46,1 %) 14,8 % 9,1 % 1

La priorité 1 est le fait le plus déterminant. Avec cette priorité, un billet est transféré environ trois fois plus souvent que sans elle. Elle vaut donc 2 points. Chacun des deux autres faits rend un transfert environ 1,6 à 2 fois plus probable et vaut donc 1 point. Priya garde volontairement la liste courte : trois questions auxquelles un agent peut répondre en quelques secondes. Il consulte le billet et l’historique du client. D’autres faits aident aussi. Par exemple, un long message : 18,8 % avec 150 mots ou plus, contre 10,0 %. Ou le canal téléphonique : 16,5 % contre 10,9 %. Une liste plus longue pourrait les inclure. Mais chaque question ralentit l’utilisation et complique la vérification. Le dernier fait, prior_escalations_90d, se trouve dans extra_features.csv. Le module 6 le teste à nouveau comme caractéristique d’un modèle.

Le score d’un billet est la somme de ses points, de 0 à 4. Dans Les opérations sur les vecteurs du cours de mathématiques, vous avez vu cette notion : une somme pondérée. Le score classe-t-il bien les billets d’entraînement? Oui : plus il y a de points, plus le taux de transfert est élevé.

Points 0 1 2 3 4
Billets d’entraînement 5 643 7 037 2 645 1 204 410
Transférés 4,7 % 10,0 % 17,4 % 29,7 % 46,8 %

Un score n’est pas encore une réponse oui ou non. Pour en obtenir une, choisissez un seuil : signalez chaque billet qui atteint au moins ce nombre de points. Priya commence avec 3 points ou plus : un billet doit avoir la priorité 1 et un autre fait. Dans les données d’entraînement, cela signale 9,5 % des billets, un peu moins que la règle de priorité 1 (14,1 %). La prochaine leçon déplace le seuil et montre ce qui change.

Voici dix billets fictifs avec leurs points. Quatre d’entre eux ont été transférés.

Billet Priorité Équipe Transferts antérieurs Points Signalé (3 ou plus)? Transféré? Résultat
T-1 1 payment 1 4 oui oui détecté (TP)
T-2 1 delivery 0 2 non non correctement ignoré (TN)
T-3 1 warranty 0 3 oui oui détecté (TP)
T-4 1 returns 1 3 oui non fausse alerte (FP)
T-5 3 payment 0 1 non oui manqué (FN)
T-6 2 account 0 0 non non correctement ignoré (TN)
T-7 3 delivery 2 1 non non correctement ignoré (TN)
T-8 2 warranty 1 2 non oui manqué (FN)
T-9 3 returns 0 0 non non correctement ignoré (TN)
T-10 3 account 1 1 non non correctement ignoré (TN)

Vérifiez une ligne vous-même. T-3 a la priorité 1 (2 points), l’équipe warranty (1 point) et aucun transfert antérieur (0 point). Cela donne 3 points, donc il est signalé. Il a été transféré, donc il a été détecté : un vrai positif.

Comptez maintenant chaque résultat. Placez les nombres dans un tableau à deux lignes (ce qui s’est réellement passé) et deux colonnes (le signalement). Ce tableau est la matrice de confusion. Il montre où le classificateur répond correctement et où il confond une classe avec l’autre.

Signalé Non signalé Total
Transféré TP = 2 (T-1, T-3) FN = 2 (T-5, T-8) 4
Non transféré FP = 1 (T-4) TN = 5 6
Total 3 7 10

Vérifiez toujours les totaux : les lignes donnent les classes réelles (4 transférés, 6 non transférés). Les quatre nombres donnent ensemble les 10 billets. Chaque métrique de cette leçon est une façon de combiner ces quatre nombres.

La première idée est la proportion de réponses correctes. Ce sont les billets détectés (TP) et les billets correctement ignorés (TN) : (2 + 5) ÷ 10 = 0,7. C’est l’exactitude.

Maintenant, un test. Prenez une alarme de fumée qui ne sonne jamais, même pendant un incendie. Un jour normal, il n’y a pas d’incendie. L’alarme répond donc correctement presque chaque minute de l’année. Son exactitude approche 100 %, et elle est inutile : elle échoue au seul moment important.

La même chose arrive avec les dix billets. Une règle qui ne signale jamais répond correctement pour les 6 billets non transférés : une exactitude de 0,6. Elle ne détecte aucun des 4 transferts. Son exactitude est seulement un peu inférieure au 0,7 du score à points.

Pour les vrais billets de mai, l’effet est beaucoup plus fort. Dans Définir une référence de base, « ne jamais transférer » avait une exactitude de 84,5 %, sans rien détecter. Pourquoi un nombre aussi élevé? Parce que 84,5 % des billets de mai n’ont pas été transférés. Quand une classe est rare, l’exactitude mesure surtout comment un classificateur traite la classe courante. Une classe positive rare est courante en pratique. La fraude, les maladies, les défauts, les pourriels sur certains sites et les transferts sont tous rares.

L’exactitude seule ne suffit donc jamais quand les classes sont déséquilibrées. Lisez-la toujours avec le taux de base, la proportion de la classe rare. Lisez-la aussi avec les deux métriques ci-dessous, qui examinent seulement la classe importante.

Revenons à l’alarme de fumée. Deux personnes posent deux questions différentes à son sujet.

La personne qui doit quitter le bâtiment à chaque alarme demande : « Quand l’alarme sonne, à quelle fréquence y a-t-il un véritable incendie? » Si la réponse est « 1 fois sur 50 », les gens cessent de quitter le bâtiment. C’est la précision : parmi les signalements, la proportion qui était correcte. Chez Larkfield, c’est la question de Grace : parmi les billets envoyés à son équipe expérimentée, combien sont réellement transférés?

Le responsable de la sécurité incendie demande : « Parmi les véritables incendies, pour combien l’alarme a-t-elle sonné? » Si la réponse est « la moitié », l’alarme n’est pas sûre. C’est le rappel : parmi les vrais cas positifs, la proportion que le classificateur a détectée. Chez Larkfield, c’est la question pour les clients. Parmi les billets transférés, combien avons-nous envoyés immédiatement à un agent expérimenté?

Les deux questions divisent le même nombre, les vrais positifs, par des totaux différents. La précision examine la colonne Signalé; le rappel examine la ligne Transféré. Pour les dix billets :

  • Précision = détectés ÷ signalés = TP ÷ (TP + FP) = 2 ÷ 3 = 0,667. Deux des trois signalements étaient corrects.
  • Rappel = détectés ÷ transférés = TP ÷ (TP + FN) = 2 ÷ 4 = 0,5. Le signalement a détecté deux des quatre transferts.
precision=TPTP+FPrecall=TPTP+FNaccuracy=TP+TNTP+FP+FN+TN\text{precision} = \frac{TP}{TP + FP} \qquad \text{recall} = \frac{TP}{TP + FN} \qquad \text{accuracy} = \frac{TP + TN}{TP + FP + FN + TN}

Chaque métrique baisse à cause d’un type d’erreur. Les fausses alertes (FP) réduisent la précision : chaque examen inutile est un signalement incorrect. Les cas manqués (FN) réduisent le rappel : chaque transfert manqué est un cas positif non détecté. Si quelqu’un demande « quel nombre dois-je surveiller? », la réponse est : celui que réduit l’erreur la plus coûteuse. Remarquez aussi ce qu’aucune des deux métriques n’utilise : les vrais négatifs. Voilà pourquoi la précision et le rappel n’augmentent pas quand la classe courante grandit, contrairement à l’exactitude.

Vous ne pouvez pas lire l’une sans l’autre. Une alarme de fumée qui sonne tout le temps a un rappel de 100 % : elle sonne pour chaque incendie. Sa précision est très mauvaise. Une alarme qui sonne seulement quand la pièce est pleine de flammes a une précision proche de 100 %. Son rappel est faible. Un classificateur utile doit avoir une précision et un rappel suffisants pour sa tâche. En médecine, le rappel s’appelle aussi la sensibilité ou le taux de vrais positifs.

Qu’obtient la règle « ne jamais transférer »? Son rappel est de 0 : elle ne détecte rien. Sa précision n’a pas de valeur, car elle ne signale rien et 0 ÷ 0 n’est pas un nombre. Les deux métriques montrent immédiatement ce que l’exactitude cachait.

Vous avez parfois besoin d’un seul nombre, par exemple pour classer de nombreuses expériences. La moyenne ordinaire de la précision et du rappel est un mauvais choix. Un classificateur avec une précision de 0,9 et un rappel de 0,1 a une moyenne de 0,5. Un autre avec 0,5 et 0,5 a la même moyenne. Mais le premier manque 9 cas positifs sur 10.

Le score F1 combine les deux pour être élevé seulement quand les deux sont élevés. C’est la moyenne harmonique : 2 × précision × rappel ÷ (précision + rappel). Pour une précision de 0,9 et un rappel de 0,1 : 2 × 0,9 × 0,1 ÷ 1,0 = 0,18. C’est beaucoup moins que 0,5. Le plus faible des deux nombres fait baisser F1. Pour les dix billets : 2 × 0,667 × 0,5 ÷ 1,167 = 0,571.

F1=2×precision×recallprecision+recallF_1 = \frac{2 \times \text{precision} \times \text{recall}}{\text{precision} + \text{recall}}

F1 est utile quand une fausse alerte et un cas manqué coûtent à peu près la même chose. Il faut aussi que rien d’autre ne limite le nombre de signalements. Il est moins utile quand une erreur coûte beaucoup plus que l’autre, car F1 les traite de la même façon. Et il ne tient pas compte de la capacité. L’équipe expérimentée de Larkfield peut examiner au plus 20 % des billets, et F1 ne voit pas cette limite.

Exemple détaillé : les références de base et le score par points en mai

Section intitulée « Exemple détaillé : les références de base et le score par points en mai »

Priya compare trois classificateurs sur les données de validation, les 1 179 billets de mai 2026. Ce sont « ne jamais escalader », la règle de priorité 1 et le score d’au moins 3 points. Chaque bloc de code est une cellule du carnet (notebook) Jupyter de la leçon. Les cellules de préparation ont déjà chargé pandas sous pd et numpy sous np. D’abord, elle charge les données avec la colonne supplémentaire et écrit le score par points sous forme de fonction :

TARGET = "escalated_72h"
def load(part):
"""One part of the split, with prior_escalations_90d from extra_features.csv."""
tickets = pd.read_csv(f"data/{part}.csv", keep_default_na=False, na_values=[""])
extra = pd.read_csv("data/extra_features.csv", usecols=["ticket_id", "prior_escalations_90d"])
return tickets.merge(extra, on="ticket_id", how="left")
def points_score(tickets):
"""Larkfield's points score: 0 to 4 points per ticket."""
points = 2 * (tickets["priority"] == 1)
points += tickets["team"].isin(["payment", "warranty"])
points += tickets["prior_escalations_90d"] >= 1
return points.astype(int).rename("points")
train, valid = load("train"), load("valid")
print(valid.groupby(points_score(valid))[TARGET].agg(tickets="size", rate="mean").round(3))

Le résultat :

Sortie
tickets rate
points
0 320 0.053
1 532 0.118
2 211 0.237
3 84 0.417
4 32 0.562

En mai, le score trie les billets comme dans les données d’entraînement. Parmi les billets avec 0 point, 5,3 % sont escaladés, contre 56,2 % de ceux avec 4 points. Ensuite vient une fonction qui compte les quatre résultats et calcule les métriques. C’est la fonction flag_report() de Définir une référence de base. Elle utilise les mêmes mots simples pour les quatre comptes, avec F1 en plus :

def flag_report(y, flags):
"""Compare 0/1 flags with the real 0/1 answers: four counts and five measures."""
y, flags = np.asarray(y, dtype=bool), np.asarray(flags, dtype=bool)
caught, false_alarms = int((flags & y).sum()), int((flags & ~y).sum())
missed, correctly_left = int((~flags & y).sum()), int((~flags & ~y).sum())
precision = caught / (caught + false_alarms) if caught + false_alarms else None
recall = caught / (caught + missed)
f1 = 2 * precision * recall / (precision + recall) if caught else 0.0
return {"flagged": caught + false_alarms, "share flagged": round((caught + false_alarms) / len(y), 3),
"caught": caught, "false alarms": false_alarms, "missed": missed, "correctly left": correctly_left,
"precision": round(precision, 3) if precision is not None else None, "recall": round(recall, 3),
"F1": round(f1, 3), "accuracy": round((caught + correctly_left) / len(y), 3)}

Avant d’exécuter la cellule suivante, faites une prédiction : lequel des trois a la meilleure exactitude?

y = valid[TARGET]
points = points_score(valid)
reports = pd.DataFrame([flag_report(y, np.zeros(len(valid))),
flag_report(y, valid["priority"] == 1),
flag_report(y, points >= 3)],
index=["never escalate", "rule: priority 1", "points: 3 or more"])
print(reports.to_string())
Sortie
flagged share flagged caught false alarms missed correctly left precision recall F1 accuracy
never escalate 0 0.000 0 0 183 996 NaN 0.000 0.000 0.845
rule: priority 1 163 0.138 61 102 122 894 0.374 0.333 0.353 0.810
points: 3 or more 116 0.098 53 63 130 933 0.457 0.290 0.355 0.836

Lisez le tableau ligne par ligne, comme Grace le ferait :

  • Ne jamais escalader a la meilleure exactitude, 0,845, et ne détecte aucune des 183 escalades. C’est le plus « exact » et le plus inutile.
  • La règle signale 163 billets. Parmi eux, 61 sont escaladés (précision de 0,374). Elle détecte 61 des 183 escalades (rappel de 0,333).
  • Le score par points signale 116 billets, moins que la règle. Parmi eux, 53 sont escaladés : précision de 0,457. Presque la moitié des examens trouvent une vraie escalade. Il détecte 53 des 183 escalades : rappel de 0,290.
Escalades détectées parmi les 1 179 billets de mai. Selon l'exactitude, « ne jamais escalader » arrive premier; selon les escalades détectées, il arrive dernier.
Description textuelle du graphique

Un graphique à colonnes des escalades que chaque classificateur signale, sur les 183 de mai. Ne jamais escalader : 0. Signaler la priorité 1 : 61. Score d’au moins 3 points : 53. Les exactitudes sont de 84,5 %, 81,0 % et 83,6 %. « Ne jamais escalader » a la meilleure exactitude et ne détecte rien.

Alors, lequel est meilleur : la règle ou le score par points? Le score par points a la meilleure précision, et la règle a le meilleur rappel. Mais ils signalent des nombres différents de billets : 163 contre 116. Un classificateur qui signale moins de billets a généralement une précision plus élevée et un rappel plus faible. Cette comparaison n’est donc juste pour aucun des deux. La prochaine leçon montre comment les comparer à charge de travail égale et ce qui arrive quand vous déplacez le seuil.

Aucune métrique ne convient à tous les classificateurs. Le choix dépend de la décision que les signalements entraînent et du coût de chaque erreur dans ce contexte. Trois questions vous aident.

Première question : quelle erreur est la plus grave? Si une fausse alerte coûte cher, surveillez la précision. Si une omission coûte cher, surveillez le rappel. Deuxième question : le nombre de signalements est-il limité? Une équipe qui peut vérifier un nombre limité de cas a besoin de mesurer la précision et le rappel à ce nombre. Troisième question : que se passe-t-il après un signalement? Si chaque signalement entraîne une deuxième vérification, les fausses alertes coûtent peu, et le rappel compte davantage.

Un filtre antipourriel est un cas classique où la précision compte. Un faux positif cache un vrai courriel, comme une facture ou une offre d’emploi, dans le dossier des pourriels. Vous pourriez ne jamais le voir. Un pourriel manqué vous coûte une seconde pour le supprimer. On règle donc les filtres antipourriel pour une précision très élevée, en acceptant que certains pourriels atteignent la boîte de réception.

Le dépistage du cancer est le cas opposé. Un cancer manqué peut coûter une vie, donc on règle le premier test pour un rappel élevé. Ses fausses alertes sont nombreuses. Mais chaque résultat positif mène à un deuxième test, plus exact, qui élimine la plupart d’entre elles. C’est ce deuxième test qui rend une faible précision acceptable.

Les alertes de fraude par carte se situent entre les deux. Une fraude manquée coûte de l’argent; une fausse alerte bloque la carte d’un client honnête à la caisse. Les banques surveillent le rappel, mais seulement à une précision que leurs clients acceptent. Un appel téléphonique ou un texto permet de vérifier chaque alerte.

Larkfield a une limite stricte. L’équipe senior peut examiner au plus 20 % des nouveaux billets. La capacité fixe donc le nombre de signalements, pas la métrique. La question devient : avec au plus 20 % des billets signalés, combien d’escalades détectons-nous (rappel)? Et combien d’examens sont utiles (précision)? C’est pourquoi la cible d’amélioration est formulée comme un rappel à un taux de signalement donné.

Cas L’erreur la plus grave Ce qui limite les signalements Métrique à surveiller
Filtre antipourriel Faux positif : un vrai courriel est caché Rien; l’utilisateur vérifie rarement le dossier Précision, maintenue très élevée
Dépistage du cancer, premier test Faux négatif : un cancer manqué Un deuxième test vérifie chaque résultat positif Rappel, maintenu très élevé
Alertes de fraude par carte Les deux : argent perdu, clients bloqués Les clients n’acceptent que peu de blocages Rappel à une précision acceptable
Signalements d’escalade de Larkfield Une omission (une journée d’attente), mais un examen coûte 10 minutes La capacité de l’équipe senior : au plus 20 % Précision et rappel à un taux de signalement d’au plus 20 %
Les « 10 meilleurs produits pour vous » d’une boutique Montrer un article que le client ne veut pas Seulement 10 places sur la page Précision des 10 premiers (prochaine leçon)
Exactitude d’une tâche équilibrée, comme des photos de chats ou de chiens Les deux, à peu près autant Rien Exactitude, ou F1

L’erreur courante consiste à choisir la métrique la plus facile à calculer ou celle qui donne le plus beau nombre. L’exactitude réunit les deux, mais elle est souvent sans rapport avec la décision. Optimiser une métrique sans rapport avec la décision mène à un échec discret. Le nombre dans le rapport augmente, et la décision empire. Le cas d’échec ci-dessous le montre.

Certains classificateurs choisissent entre plus de deux classes. Par exemple, un modèle pourrait envoyer chaque nouveau billet à l’une des cinq équipes de Larkfield. Il n’y a alors pas une seule classe « positive » et une seule classe « négative ». Calculez plutôt la précision et le rappel pour chaque classe, à tour de rôle. Pour la classe « garantie », les billets de garantie sont les positifs, et tous les autres billets sont les négatifs. Pour obtenir un seul nombre, prenez la moyenne simple des classes : la moyenne macro. La moyenne macro donne à une classe rare le même poids qu’à une classe fréquente. Supposons que le modèle achemine correctement 95 % des billets, mais envoie presque tous les billets de garantie à la mauvaise équipe. Le rappel de la classe garantie est alors faible, et la moyenne macro le montre. L’exactitude ne le montre pas.

Utilisez les sections 3 et 4 du carnet. Vous vérifiez les comptes du score par points avec scikit-learn et calculez vous-même les métriques.

  1. Ouvrez le carnet à partir de l’encadré en haut de cette page, dans Colab, Kaggle ou VS Code.
  2. Exécutez les cellules de préparation. Vous devriez voir pandas 3.0.6, scikit-learn 1.9.1 et la ligne Ready: (prêt).
  3. Exécutez les sections 1 et 2. Dans la section 2, vous devriez voir les dix billets avec leurs points et caught 2, false alarms 1, missed 2, correctly left 5 (2 détectés, 1 fausse alerte, 2 manqués, 5 correctement laissés sans signalement).
  4. Dans la section 3, exécutez l’exemple détaillé. Vous devriez voir les trois lignes du tableau ci-dessus.
  5. Dans la section 4, exécutez confusion_matrix(y, points >= 3). Vous devriez voir [[933 63] et [130 53]].
  6. Lisez la matrice. scikit-learn place la classe réelle dans les lignes et la réponse dans les colonnes, avec la classe 0 d’abord : [[TN, FP], [FN, TP]].
  7. Calculez precision_3 et recall_3 à partir des quatre nombres, chacun arrondi à 3 décimales.
  8. Exécutez la cellule de vérification. Elle affiche Check passed: (precision_3, recall_3) is right. (vérification réussie : les deux valeurs sont correctes) quand les deux sont corrects.
Afficher la réponse
from sklearn.metrics import confusion_matrix
tn, fp, fn, tp = confusion_matrix(y, points >= 3).ravel()
precision_3 = round(tp / (tp + fp), 3)
recall_3 = round(tp / (tp + fn), 3)
print(precision_3, recall_3)
Sortie
0.457 0.29

La précision est de 53 ÷ (53 + 63) = 0,457, et le rappel est de 53 ÷ (53 + 130) = 0,290. Les fonctions precision_score(y, points >= 3) et recall_score(y, points >= 3) de sklearn.metrics donnent les mêmes nombres. Notez l’ordre : la matrice de scikit-learn commence par la classe 0 (non escaladé). Les vrais négatifs sont donc en haut à gauche. Les tableaux de cette leçon commencent par la ligne des billets escaladés. Lisez toujours les étiquettes avant de lire une matrice de confusion.

Changez une condition : le seuil. Signalez les billets avec 2 points ou plus. Avant d’exécuter la section 5 du carnet, faites une prédiction : la précision va-t-elle augmenter ou diminuer? Et le rappel? Et F1? Les signalements respecteront-ils la capacité de 20 %? Calculez ensuite flag_report() pour les nouveaux signalements.

Afficher la réponse
print(flag_report(y, points >= 2))
Sortie
{'flagged': 327, 'share flagged': 0.277, 'caught': 103, 'false alarms': 224, 'missed': 80, 'correctly left': 772, 'precision': 0.315, 'recall': 0.563, 'F1': 0.404, 'accuracy': 0.742}

Maintenant, 327 billets sont signalés. Le rappel augmente, de 0,290 à 0,563 : 103 escalades sont détectées au lieu de 53. La précision diminue, de 0,457 à 0,315 : la plupart des signalements supplémentaires sont des fausses alertes. F1 augmente, de 0,355 à 0,404, parce que le rappel a augmenté plus que la précision a diminué. Mais les signalements représentent 27,7 % des billets, plus que ce que l’équipe senior peut examiner. F1 ne tient pas compte de la capacité et préfère donc un seuil que Grace ne peut pas utiliser. Un seuil moins strict sacrifie la précision pour améliorer le rappel. La prochaine leçon porte sur ce compromis.

Erreur courante

Le seuil avec la meilleure exactitude

Symptôme : Tomás, l’ingénieur en IA, veut « la liste de vérification la plus exacte ». Il essaie chaque seuil de 0 à 5 points sur les billets de mai. Il garde celui qui donne la meilleure exactitude :

for cut_off in range(6):
report = flag_report(y, points >= cut_off)
print(cut_off, "| flagged", report["flagged"], "| recall", report["recall"], "| accuracy", report["accuracy"])
Sortie
0 | flagged 1179 | recall 1.0 | accuracy 0.155
1 | flagged 859 | recall 0.907 | accuracy 0.398
2 | flagged 327 | recall 0.563 | accuracy 0.742
3 | flagged 116 | recall 0.29 | accuracy 0.836
4 | flagged 32 | recall 0.098 | accuracy 0.848
5 | flagged 0 | recall 0.0 | accuracy 0.845

Il annonce : « 4 points ou plus donne une exactitude de 84,8 %, notre meilleur résultat. » L’équipe senior reçoit 32 billets dans le mois. Et 165 des 183 escalades attendent dans la file normale.

Cause : l’exactitude récompense chaque « non » correct. Comme 84,5 % des billets ne sont pas escaladés, moins il y a de signalements, plus l’exactitude augmente. Cela reste vrai presque jusqu’à zéro signalement. La métrique ne correspond pas à la décision. La décision de Grace consiste à détecter les escalades en signalant au plus 20 % des billets. L’exactitude compte autre chose.

Correction : écrivez d’abord la décision et ses limites, puis choisissez la métrique en fonction de celles-ci. Ici : « signaler au plus 20 % des billets et détecter autant d’escalades que possible ». Mesurez le rappel et la précision à ce taux de signalement. Si vous présentez l’exactitude, présentez-la seulement avec le taux de base.

Conséquence dans le travail en IA : une métrique qui ne correspond pas à la décision optimise la mauvaise chose, sans avertissement. Le rapport montre un nombre plus élevé. Omar, le gestionnaire de produit, voit « 84,8 % d’exactitude ». Et les clients qui ont des problèmes graves attendent plus longtemps qu’avant.

Vérifiez votre compréhension

Un modèle de fraude signale 80 paiements par carte en une journée. Parmi eux, 20 sont des fraudes. La journée comptait 50 fraudes au total. Calculez la précision et le rappel. Expliquez en une phrase chacun ce qu'ils signifient pour la banque.

Afficher la réponse

TP = 20, FP = 80 − 20 = 60, FN = 50 − 20 = 30. Précision = 20 ÷ 80 = 0,25 : un paiement bloqué sur quatre est vraiment une fraude. Trois blocages sur quatre dérangent donc un client honnête. Rappel = 20 ÷ 50 = 0,4 : le modèle arrête 2 fraudes sur 5, et 30 fraudes passent. Les deux nombres divisent par des totaux différents : les signalements pour la précision, les vraies fraudes pour le rappel.

Vérifiez votre compréhension

Pour chaque cas, quelle métrique compte le plus, et pourquoi? (a) Un filtre qui déplace les courriels vers un dossier de pourriels. (b) Un premier test de dépistage d'une maladie grave, où chaque résultat positif entraîne un deuxième test. (c) Les signalements de Larkfield pour une équipe senior qui peut examiner au plus 20 % des billets.

Afficher la réponse

(a) La précision : un faux positif cache un vrai courriel, tandis qu’un pourriel manqué coûte une seconde. (b) Le rappel : une omission peut coûter une vie, et le deuxième test élimine la plupart des fausses alertes. Une faible précision est donc acceptable. (c) La précision et le rappel à un taux de signalement d’au plus 20 %. La capacité fixe le nombre de billets qu’on peut signaler. La question est donc combien d’escalades ces signalements détectent (rappel) et combien d’examens sont utiles (précision). L’exactitude n’est la réponse dans aucun des trois cas.

Vérifiez votre compréhension

Omar voit que « ne jamais escalader » a une meilleure exactitude que le score d'au moins 3 points. En mai, c'est 84,5 % contre 83,6 %. Il demande pourquoi nous ne l'utilisons pas. Expliquez pourquoi l'exactitude est le mauvais nombre ici et donnez les nombres que vous lui montrez plutôt.

Afficher la réponse

L’exactitude dit que « ne jamais escalader » est meilleur (84,5 % contre 83,6 %). C’est parce que 84,5 % des billets de mai ne sont pas escaladés, et que l’exactitude compte chaque « non » correct. Elle ne voit pas que « ne jamais escalader » ne détecte rien. Montrez le rappel et la précision : le score par points détecte 53 des 183 escalades (rappel de 0,290). Parmi ses 116 signalements, 53 sont escaladés (précision de 0,457). « Ne jamais escalader » a un rappel de 0 et aucun signalement. Montrez aussi la proportion signalée, 9,8 %, par rapport à la capacité de 20 %.

Récapitulatif

  • Une classe n’a pas de grandeur, donc les métriques de classification comptent les résultats. Deux réponses et deux réalités donnent quatre comptes : détectés (TP), fausses alertes (FP), manqués (FN) et correctement laissés sans signalement (TN). Ensemble, ils forment la matrice de confusion.
  • L’exactitude est la proportion de bonnes réponses. Avec une classe positive rare, elle récompense les « non ». « Ne jamais escalader » atteint 84,5 % en mai et ne détecte rien.
  • La précision demande « quand il signale, à quelle fréquence a-t-il raison? » et les fausses alertes la réduisent. Le rappel demande « parmi les vrais positifs, combien en a-t-il détecté? » et les omissions le réduisent. F1 est élevé seulement quand les deux sont élevés et ne tient compte ni des coûts ni de la capacité.
  • Choisissez la métrique selon la décision : quelle erreur coûte le plus, et qu’est-ce qui limite le nombre de signalements? Pour Larkfield : la précision et le rappel à un taux de signalement d’au plus 20 %.
  • Le score d’au moins 3 points, en mai : 116 billets signalés (9,8 %), précision de 0,457, rappel de 0,290. La règle de priorité 1 signale plus de billets (163). Elle a un meilleur rappel (0,333) et une moins bonne précision (0,374). Comparer deux classificateurs à des charges de travail différentes n’est juste pour aucun des deux.

Ensuite, vous déplacez le seuil et voyez le compromis entre précision et rappel. Vous apprenez aussi des métriques qui résument tous les seuils à la fois.

Leçon suivante : Le compromis entre précision et rappel