Aller au contenu
English

Le compromis entre précision et rappel

  • Leçon 10
  • 70 min
  • Module 3 : Évaluer les modèles supervisés
Leçon 10 sur 27 · Apprentissage automatique : du problème à un modèle fiableLe compromis entre précision et rappel

Ce que vous saurez faire

Choisissez où couper une liste de cas classés et comparez deux classements sans choisir de coupure. Chaque règle de signalement fait un compromis entre les cas détectés et les fausses alertes. La décision, et non les données, détermine où se placer.

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. Il contient aussi les exercices et la vérification du module. 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. Utilisez l’explorateur et les graphiques ici, puis exécutez le code dans le carnet.

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 70 minutes

Ce que vous devez savoir

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

  • Le dossier du 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 au niveau supérieur; 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 n’ont pas été testées. Le carnet a été testé dans Jupyter.

La plupart des classificateurs ne répondent pas directement « oui » ou « non ». Ils donnent à chaque cas un score : un nombre plus élevé quand la classe positive est plus probable. Le score à points de Larkfield attribue de 0 à 4 points. Les modèles d’apprentissage automatique du module 4 donnent un score de 0 à 1. Un filtre antipourriel donne à chaque courriel un score de pourriel. Un moteur de recherche donne à chaque page un score de pertinence.

Un score devient une décision seulement quand vous choisissez un seuil. Vous signalez alors chaque cas dont le score atteint ou dépasse ce seuil. Pour le score à points, le seuil est un nombre entier de points. La leçon précédente l’appelait la limite de signalement : « 3 points ou plus ». Les deux expressions désignent la même chose ici.

Le score classe les cas. Le seuil indique jusqu’où vous intervenez dans la liste classée. Dans la leçon précédente, une limite plus large (2 points plutôt que 3) augmentait le rappel et diminuait la précision. Cette leçon montre que cela arrive toujours, explique pourquoi et présente comment choisir.

Imaginez que vous pêchez dans un étang avec un filet. L’étang contient les poissons que vous voulez, mais aussi des choses indésirables : vieilles bottes, boîtes de conserve, plantes aquatiques. Un petit filet au meilleur endroit attrape quelques poissons et presque aucun déchet. Un grand filet attrape tous les poissons, mais aussi beaucoup de déchets.

Petit filet : 3 poissons, 1 déchetGrand filet : 6 poissons, 6 déchets
Petit filet : 3 poissons, 1 déchetGrand filet : 6 poissons, 6 déchets
Le même étang, deux filets. Le petit filet attrape 3 des 6 poissons et 1 déchet. Parmi ses 4 prises, 3 sont des poissons (précision de 75 %). Il attrape seulement la moitié des poissons (rappel de 50 %). Le grand filet attrape les 6 poissons et 6 déchets : rappel de 100 %, précision de 50 %.
Description textuelle du graphique

Deux panneaux montrent le même étang avec 6 poissons (bleus) et 9 déchets, comme de vieilles bottes (gris). Dans le panneau gauche, un petit cercle en pointillé à gauche de l’étang contient 3 poissons et 1 botte. Dans le panneau droit, un grand ovale en pointillé couvre presque tout l’étang et contient les 6 poissons et 6 bottes. Trois bottes près des bords restent hors du grand filet.

Reprenons les termes de la leçon précédente. Les poissons sont les positifs, et les déchets sont les négatifs. Le rappel est la proportion de tous les poissons que le filet a attrapés. La précision est la proportion des prises qui sont des poissons. Le petit filet a une précision élevée et un faible rappel. Le grand filet a un rappel élevé et une faible précision.

Élargir le filet revient à abaisser le seuil. Vous attrapez davantage de choses voulues, mais aussi davantage de choses indésirables. Le même filet ne peut pas attraper plus de poissons et moins de déchets en même temps. C’est le compromis entre précision et rappel. Seul un meilleur filet, qui attrape les poissons et laisse passer les déchets, améliore les deux. Pour un classificateur, cela veut dire un meilleur score : un score qui place les positifs plus haut dans la liste.

Un moteur de recherche fait face au même choix. Vous cherchez « réparer un tuyau d’arrosage », et le moteur classe les pages de la plus pertinente à la moins pertinente. Combien de résultats la première page devrait-elle afficher?

S’il affiche 3 résultats, la plupart sont probablement utiles, mais vous pourriez manquer une bonne page plus bas. S’il en affiche 100, les bonnes pages s’y trouvent, mais vous devez parcourir beaucoup de contenu inutile. Afficher plus de résultats revient à utiliser le grand filet.

Pour une liste classée, la coupure est un nombre de résultats, k. Deux métriques mesurent les k premiers résultats :

  • Précision@k (« précision à k ») : parmi les k premiers résultats, la proportion de résultats pertinents.
  • Rappel@k : parmi tous les résultats pertinents qui existent, la proportion présente dans les k premiers.

Voici une recherche avec 10 résultats. Les résultats 1, 2, 4 et 7 sont pertinents. Une autre page pertinente existe, mais le moteur l’a classée après le rang 10.

12345678910k = 32 pertinentsk = 104 pertinents…page pertinente, hors du top 10
12345678910k = 32 pertinentsk = 104 pertinents…non affiché : pertinent
Dix résultats de recherche dans l'ordre de classement. Les résultats bleus avec une coche sont pertinents (rangs 1, 2, 4 et 7). Une cinquième page pertinente existe, mais ne figure pas parmi les 10 premiers résultats. Les accolades indiquent les 3 premiers et les 10 premiers.
Description textuelle du graphique

Une liste verticale de dix résultats, numérotés de 1 à 10 depuis le haut. Les résultats 1, 2, 4 et 7 sont bleus avec une coche : ils sont pertinents. Les autres sont gris pâle. Une accolade à côté des résultats 1 à 3 indique k = 3, avec 2 résultats pertinents. Une accolade à côté des résultats 4 à 10 indique k = 10, avec 4 résultats pertinents au total. Sous la liste, une case vide en pointillé représente la cinquième page pertinente, absente des 10 premiers résultats.

k Résultats pertinents parmi les k premiers Précision@k Rappel@k
1 1 1 ÷ 1 = 1,00 1 ÷ 5 = 0,20
3 2 2 ÷ 3 = 0,67 2 ÷ 5 = 0,40
5 3 3 ÷ 5 = 0,60 3 ÷ 5 = 0,60
10 4 4 ÷ 10 = 0,40 4 ÷ 5 = 0,80

Quand k augmente, le rappel@k peut seulement augmenter ou rester le même : une liste plus longue ne perd aucune page pertinente. La précision@k diminue généralement, car les meilleurs résultats sont en haut. C’est le même compromis, avec k à la place d’un seuil.

Vous retrouverez ces deux métriques dans RAG : créer une IA qui utilise vos données. RAG signifie génération augmentée par récupération. Dans ce cours, un programme cherche les passages qui répondent à une question dans une collection de documents. Il donne les k premiers passages à un modèle de langage. Le rappel@k demande : le passage contenant la réponse figure-t-il parmi les k premiers? Sinon, le modèle ne peut pas bien répondre. La précision@k demande : combien des k passages sont utiles, et combien ajoutent seulement du contenu inutile? On règle chaque système de récupération selon ce compromis.

Un seuil et un k sont deux façons de choisir où couper la même liste classée. Chez Larkfield, « signaler les billets de 3 points ou plus » et « examiner les 116 premiers billets de mai » désignent les mêmes 116 billets.

Reprenez les dix billets de la leçon précédente. Les voici, classés par points : T-1 (4 points, transféré au niveau supérieur), T-3 et T-4 (3 points; T-3 transféré), T-2 et T-8 (2 points; T-8 transféré), T-5, T-7 et T-10 (1 point; T-5 transféré), puis T-6 et T-9 (0 point). Quatre ont été transférés. Abaissez le seuil, un point à la fois :

Signaler à partir de Signalés VP FP FN Précision Rappel
4 points ou plus 1 1 0 3 1 ÷ 1 = 1,00 1 ÷ 4 = 0,25
3 ou plus 3 2 1 2 2 ÷ 3 = 0,67 2 ÷ 4 = 0,50
2 ou plus 5 3 2 1 3 ÷ 5 = 0,60 3 ÷ 4 = 0,75
1 ou plus 8 4 4 0 4 ÷ 8 = 0,50 4 ÷ 4 = 1,00
0 ou plus (tous) 10 4 6 0 4 ÷ 10 = 0,40 1,00

Lisez les deux colonnes de droite de haut en bas. Le rappel passe de 0,25 à 1,00, car chaque seuil plus bas détecte davantage de transferts au niveau supérieur. La précision passe de 1,00 à 0,40, car chaque seuil plus bas inclut aussi davantage de billets non transférés. En bas, tout est signalé : le rappel est de 1,00. La précision égale la proportion de billets transférés, soit 4 sur 10. En haut, les quelques signalements sont les cas les plus évidents.

Remarquez aussi que T-2 et T-8 ont tous deux 2 points. Aucun seuil ne peut signaler l’un sans l’autre. Un score à points a peu de valeurs possibles. Beaucoup de billets sont donc à égalité, et le seuil ne peut avancer que par étapes. Gardez cela en tête pour les données réelles.

Passons aux 1 179 billets de mai des données de validation. Utilisez l’explorateur avant de lire le tableau. Le panneau supérieur montre les billets non transférés au niveau supérieur, et le panneau inférieur, les billets transférés, selon leurs points. Déplacez la limite de signalement et observez la matrice de confusion, les deux métriques et le point sur la courbe.

Explorer

Déplacez la limite de signalement du score à points

02004006000 point : 303 billets, non signalés3031 point : 469 billets, non signalés4692 points : 161 billets, non signalés1613 points : 49 billets, non signalés494 points : 14 billets, signalés1402550750 point : 17 billets, non signalés171 point : 63 billets, non signalés632 points : 50 billets, non signalés503 points : 35 billets, non signalés354 points : 18 billets, signalés1801234Points du billetsignaler 4 points ou plusNon escaladés : 996Escaladés : 183
02004006000 point : 303 billets, non signalés3031 point : 469 billets, non signalés4692 points : 161 billets, non signalés1613 points : 49 billets, non signalés494 points : 14 billets, signalés1402550750 point : 17 billets, non signalés171 point : 63 billets, non signalés632 points : 50 billets, non signalés503 points : 35 billets, non signalés354 points : 18 billets, signalés1801234Points du billetsignaler 4 points ou plusNon escaladés : 996Escaladés : 183

Les barres pleines sont signalées (au seuil ou au-dessus). Les barres pâles ne sont pas signalées. Chaque panneau a sa propre échelle, car les billets escaladés sont beaucoup moins nombreux.

À 4 points ou plus, 32 billets sont signalés : 18 escaladés et 14 fausses alertes. 165 des 183 escalades sont manquées. L’équipe senior peut examiner ce nombre.

Matrice de confusion à 4 points ou plus
Classe réelleSignalésNon signalésTotal
Escaladés18vrai positif165faux négatif (manqué)183
Non escaladés14faux positif (fausse alerte)982vrai négatif996
Total321 1471 179
Signalés
32
2,7 % de 1 179 billets
Précision
56,3 %
18 sur 32 signalements
Rappel
9,8 %
18 sur 183 escalades
Capacité
Dans la capacité
au plus 20,0 % (235 billets)
0 %25 %50 %75 %100 %Précision (signalements escaladés)0 %25 %50 %75 %100 %Rappel (escalades détectées)signalement au hasard : 16 %0 point ou plus : rappel 100 %, précision 16 %1 point ou plus : rappel 91 %, précision 19 %2 points ou plus : rappel 56 %, précision 31 %3 points ou plus : rappel 29 %, précision 46 %4 points ou plus : rappel 10 %, précision 56 %4 points et +
0 %25 %50 %75 %100 %Précision (signalements escaladés)0 %25 %50 %75 %100 %Rappel (escalades détectées)signalement au hasard : 16 %0 point ou plus : rappel 100 %, précision 16 %1 point ou plus : rappel 91 %, précision 19 %2 points ou plus : rappel 56 %, précision 31 %3 points ou plus : rappel 29 %, précision 46 %4 points ou plus : rappel 10 %, précision 56 %4 points et +

Chaque point de la courbe est un seuil. Le gros point est le seuil choisi. La ligne pointillée est la précision de signalements au hasard : la part des billets qui sont escaladés.

Les 1 179 billets de mai des données de validation, selon leurs points (996 non transférés, 183 transférés au niveau supérieur). L'explorateur montre la limite de signalement, la matrice de confusion, la précision, le rappel, la capacité de 20 % de l'équipe principale et la courbe précision-rappel.
Description textuelle de l’explorateur

Le panneau supérieur est un diagramme à colonnes des 996 billets de mai non transférés au niveau supérieur, selon leurs points. Il y en a 303 avec 0 point, 469 avec 1, 161 avec 2, 49 avec 3 et 14 avec 4. Le panneau inférieur montre les 183 billets transférés : 17 avec 0 point, 63 avec 1, 50 avec 2, 35 avec 3 et 18 avec 4. Les billets transférés ont plus de points en moyenne, mais les deux groupes se chevauchent à chaque valeur. Une ligne verticale marque la limite de signalement; les colonnes à sa droite sont signalées.

À la limite initiale de 4 points (le maximum), 32 billets sont signalés : 18 transférés et 14 non transférés. La précision est de 56,2 % et le rappel de 9,8 %. À 3 ou plus : 116 signalés (9,8 %), précision de 45,7 %, rappel de 29,0 %, dans la capacité de 235 billets. À 2 ou plus : 327 signalés (27,7 %), précision de 31,5 %, rappel de 56,3 %, au-delà de la capacité. À 1 ou plus : 859 signalés, précision de 19,3 %, rappel de 90,7 %. À 0 ou plus, chaque billet est signalé : précision de 15,5 % (la proportion de billets transférés) et rappel de 100 %. À 5 ou plus, rien n’est signalé et la précision n’est pas définie. La courbe précision-rappel en dessous relie ces points. La précision passe de 56,2 % à 15,5 % tandis que le rappel passe de 9,8 % à 100 %.

Voici les mêmes nombres dans un tableau, de la limite de signalement la plus stricte à la plus large :

Signaler à partir de Signalés Proportion signalée VP FP FN Précision Rappel
4 points 32 2,7 % 18 14 165 0,562 0,098
3 ou plus 116 9,8 % 53 63 130 0,457 0,290
2 ou plus 327 27,7 % 103 224 80 0,315 0,563
1 ou plus 859 72,9 % 166 693 17 0,193 0,907
0 ou plus (tous) 1 179 100 % 183 996 0 0,155 1,000
  • Précision
  • Rappel
  • Proportion de billets signalés
  • Capacité : 20 % signalés (pointillé)
Précision, rappel et proportion de billets signalés à chaque limite du score à points, sur les 1 179 billets de mai. Une limite plus élevée augmente la précision et diminue le rappel.
Description textuelle du graphique

Un graphique à courbes avec la limite de signalement de 0+ à 5+ points sur l’axe horizontal. L’axe vertical indique une valeur de 0 % à 100 %. Une ligne horizontale en pointillé marque la capacité : 20 % de billets signalés. La précision passe de 15,5 % à 0+ à 19,3 %, 31,5 %, 45,7 % et 56,2 % à 4+. Elle n’a aucune valeur à 5+, où rien n’est signalé. Le rappel passe de 100 % à 0+ à 90,7 %, 56,3 %, 29,0 %, 9,8 % et 0 % à 5+. La proportion signalée passe de 100 % à 72,9 %, 27,7 %, 9,8 %, 2,7 % et 0 %. Elle croise la ligne de capacité entre 2+ et 3+.

Trois choses à remarquer :

  1. La précision et le rappel évoluent en sens opposés. Chaque étape vers la droite augmente la précision et diminue le rappel. Aucune limite de signalement n’est la meilleure pour les deux.
  2. La décision choisit la limite de signalement, pas les données. L’équipe de Grace peut examiner au plus 20 % des billets, soit 235 de ces 1 179 billets. Une limite plus basse détecte davantage de transferts au niveau supérieur. La meilleure limite est donc la plus basse qui respecte la capacité. C’est 3 points ou plus : 116 billets signalés, une précision de 0,457 et un rappel de 0,290.
  3. La limite de signalement seule ne peut pas utiliser toute la capacité. L’étape suivante, 2 points ou plus, signale 27,7 % des billets, au-delà de la capacité. Ainsi, 119 des 235 examens possibles restent inutilisés. La raison : 211 billets sont à égalité avec 2 points, et le score ne peut pas les distinguer. Le rappel reste à 0,290, sous la cible de 0,40.

Grace ne veut pas perdre 119 examens possibles. La solution est une règle de départage : une façon équitable de choisir parmi les billets ayant le même score. La règle de Larkfield est simple. Signalez chaque billet ayant 3 points ou plus. Ensuite, signalez les billets ayant 2 points par ordre d’arrivée, premier arrivé, premier signalé, jusqu’à atteindre la capacité. Priya l’applique à mai : les 116 billets ayant 3 points ou plus, puis les 119 premiers billets ayant 2 points.

Mai, 1 179 billets Signalés Proportion signalée Détectés Précision Rappel
3 points ou plus 116 9,8 % 53 0,457 0,290
3 ou plus, puis 2 points par ordre d’arrivée 235 19,9 % 84 0,357 0,459
Règle de priorité 1 (pour comparer) 163 13,8 % 61 0,374 0,333

Avec toute la capacité, le score à points détecte 84 des 183 transferts au niveau supérieur, soit un rappel de 0,459. Il atteint la cible d’amélioration sur les données de mai. La précision tombe à 0,357, car les billets de 2 points sont moins souvent transférés (23,7 %) que ceux de 3 points. C’est encore le compromis : plus d’examens, plus de transferts détectés, une proportion plus faible d’examens utiles. L’ordre d’arrivée n’ajoute aucune information sur le risque. Il répartit seulement les examens de façon équitable entre des billets qui semblent identiques. Un score avec beaucoup de valeurs différentes, comme ceux des modèles du module 4, n’a pas besoin de règle de départage.

Le compromis n’est pas un défaut du score à points. Tout score qui n’est pas parfait présente ce compromis. Si Grace avait deux fois la capacité, la limite pourrait passer à 2 points, avec un rappel de 0,563 et une précision de 0,315. Le même score, une décision différente, un seuil différent.

Le tableau a cinq lignes, et un modèle a des centaines de seuils possibles. Pour les voir tous ensemble, représentez chaque seuil par un point, avec le rappel à l’horizontale et la précision à la verticale. La ligne qui relie les points est la courbe précision–rappel (courbe PR). Le gros point de l’explorateur se déplace sur cette courbe.

  • Score à points (un point par seuil)
  • Signalements aléatoires (ligne pointillée)
La courbe précision–rappel du score à points sur les 1 179 billets de mai, avec les deux règles de Définir une référence de base représentées par des points isolés. Les deux règles se trouvent sous la courbe.
Description textuelle du graphique

Un graphique avec le rappel de 0 % à 100 % à l’horizontale et la précision de 0 % à 100 % à la verticale. La courbe du score à points comporte cinq points : une précision de 56,2 % avec un rappel de 9,8 % (4 points), 45,7 % avec 29,0 % (3+), 31,5 % avec 56,3 % (2+), 19,3 % avec 90,7 % (1+) et 15,5 % avec 100 % (tous les billets). Elle descend du coin supérieur gauche au coin inférieur droit. Une ligne horizontale pointillée à 15,5 % représente les signalements aléatoires : quel que soit le rappel, leur précision égale la proportion de billets transférés. Deux points isolés représentent les règles. La règle de priorité 1 se situe à 33,3 % de rappel et 37,4 % de précision, sous la courbe. La règle de Grace (priorité 1 ou garantie) se situe à 53,6 % de rappel et 31,4 % de précision, également sous la courbe.

Une courbe plus haute est meilleure : à rappel égal, une plus grande proportion des signalements est correcte. La règle de priorité 1 et celle de Grace, dans Définir une référence de base, sont des points isolés. Une règle n’a pas de score auquel appliquer un seuil. Les deux se trouvent sous la courbe du score à points : à rappel égal, ce score offre une meilleure précision. La ligne pointillée est le plancher : si vous signalez des billets au hasard, environ 15,5 % sont transférés, quel que soit le rappel.

Une courbe est difficile à mettre dans un tableau. Pour comparer deux scores avec un seul nombre, résumez toute la courbe : prenez l’aire sous celle-ci. La méthode habituelle de calcul est la précision moyenne (AP).

Voici l’idée, sur les dix billets : descendez la liste classée, seuil par seuil. Chaque fois que vous détectez un transfert de plus, notez la précision à cet endroit. Puis calculez la moyenne de ces précisions.

  • À 4 points, vous détectez le premier transfert (T-1). Précision : 1 ÷ 1 = 1,00.
  • À 3 ou plus, vous détectez le deuxième (T-3). Précision : 2 ÷ 3 = 0,67.
  • À 2 ou plus, le troisième (T-8). Précision : 3 ÷ 5 = 0,60.
  • À 1 ou plus, le quatrième (T-5). Précision : 4 ÷ 8 = 0,50.

AP = (1,00 + 0,67 + 0,60 + 0,50) ÷ 4 = 0,692. En général, chaque précision est pondérée par l’augmentation du rappel à cette étape. Ici, chaque étape détecte exactement un des quatre transferts. Les poids sont donc égaux, et l’AP est une simple moyenne.

AP=∑n(Rn−Rn−1) Pn\text{AP} = \sum_{n} (R_n - R_{n-1}) \, P_n

Lisez ainsi : pour chaque seuil n, multipliez l’augmentation du rappel par la précision à cet endroit, puis additionnez les résultats. L’AP est élevée quand les transferts se trouvent près du début de la liste, là où la précision est élevée. Un score parfait, qui place chaque transfert avant tous les autres billets, donne AP = 1.

Quel est le plancher? Un score incapable de classer, comme un score identique pour chaque billet, signale tout à la fois. Sa précision est la proportion de positifs. Son AP égale donc la proportion de positifs : 0,155 en mai. Lisez toujours l’AP avec ce plancher. En mai, le score à points a une AP de 0,310, environ le double du plancher.

L’AP convient à Larkfield parce que les transferts sont rares (15,5 %). La décision concerne le début de la liste, où travaille l’équipe expérimentée. L’AP repose sur les précisions, et la précision varie beaucoup au début. On appelle aussi l’AP l’aire sous la courbe PR, ou PR AUC.

Il existe une deuxième courbe classique. Elle représente aussi un point par seuil, mais utilise deux taux différents :

  • à l’horizontale, le taux de faux positifs : parmi les billets non transférés, la proportion signalée. Vous l’avez vu dans Les compromis en classification, dans le cours Mathématiques et statistiques essentielles pour l’IA. Il correspond à FP ÷ (FP + TN).
  • à la verticale, le taux de vrais positifs, un autre nom du rappel : TP ÷ (TP + FN).

Cette courbe est la courbe ROC. Son nom vient des ingénieurs radar de la Seconde Guerre mondiale : « receiver operating characteristic », ou caractéristique de fonctionnement du récepteur. Elle montre combien de vrais positifs vous détectez pour chaque proportion de négatifs signalés par erreur.

  • Score à points (un point par seuil)
  • Choix au hasard (ligne pointillée)
La courbe ROC du score à points sur les 1 179 billets de mai. La diagonale pointillée représente le choix au hasard. L'aire sous la courbe est la ROC AUC, soit 0,715.
Description textuelle du graphique

Un graphique avec le taux de faux positifs de 0 % à 100 % à l’horizontale et le taux de vrais positifs (rappel) de 0 % à 100 % à la verticale. La courbe du score à points commence en bas à gauche (aucun signalement). Elle passe par 1,4 % et 9,8 % (4 points), 6,3 % et 29,0 % (3+), 22,5 % et 56,3 % (2+), 69,6 % et 90,7 % (1+), puis atteint 100 % et 100 % (tous les billets). Elle reste au-dessus de la diagonale pointillée, qui représente le choix au hasard. La règle de priorité 1 est un point isolé à 10,2 % et 33,3 %, juste sous la courbe.

La diagonale pointillée représente le choix au hasard : vous signalez alors la même proportion de billets transférés et d’autres billets. Un score utile courbe la ligne vers le coin supérieur gauche : il détecte beaucoup de transferts et signale peu d’autres billets.

L’aire sous la courbe ROC est la ROC AUC (aire sous la courbe). Son sens est simple et plus facile à retenir que la courbe : la ROC AUC est la probabilité qu’un billet transféré choisi au hasard obtienne un score supérieur à un autre billet choisi au hasard. Une égalité compte pour une moitié.

Vérifiez avec les dix billets. Il y a 4 billets transférés et 6 autres billets, donc 4 × 6 = 24 paires.

  • T-1 (4 points) dépasse les 6 autres : 6 paires.
  • T-3 (3 points) dépasse 5 d’entre eux et égale T-4 : 5 + 0,5 = 5,5.
  • T-8 (2 points) en dépasse 4 et égale T-2 : 4,5.
  • T-5 (1 point) dépasse les 2 billets à 0 point et égale T-7 et T-10 : 2 + 1 = 3.

ROC AUC = (6 + 5,5 + 4,5 + 3) ÷ 24 = 19 ÷ 24 = 0,792. Un classement parfait donne 1,0, et le choix au hasard donne 0,5 : une chance sur deux pour chaque paire. En mai, le score à points a une ROC AUC de 0,715.

La ROC AUC est courante dans les rapports. Son sens ne dépend pas de la rareté des positifs. C’est une force et une faiblesse. Avec des positifs rares, la plupart des paires sont faciles : un billet sans problème à 0 point, classé sous un transfert. Ces paires augmentent la ROC AUC, mais ne disent rien du début de la liste, où se prend la décision. De plus, le taux de faux positifs divise par tous les négatifs, qui sont nombreux. Signaler 63 billets par erreur ne représente que 6,3 % des 996 autres billets, un petit déplacement horizontal sur le graphique. Mais ces 63 billets représentent plus de la moitié des 116 signalements. Donc, avec des positifs rares, la ROC AUC peut sembler bonne malgré une faible précision au début de la liste. Utilisez plutôt l’AP, ou la précision et le rappel au seuil choisi.

Vous avez maintenant trois façons de mesurer un score : à un seuil, sur les k premiers éléments et sur tous les seuils. Choisissez selon les besoins de la décision.

Si le seuil est déjà fixé, mesurez la précision et le rappel à ce seuil, ainsi que la proportion signalée. Si une capacité limite le nombre de cas à traiter, mesurez le rappel à ce taux de signalement. La cible de Larkfield est de ce type. Pour une liste de k éléments, mesurez précision@k et rappel@k. Si vous comparez deux scores avant le choix d’un seuil, résumez tous les seuils. Utilisez la précision moyenne quand les positifs sont rares et que le début de la liste compte. Utilisez la ROC AUC quand les classes sont plus équilibrées, ou quand un rapport exige un nombre indépendant du taux de base.

Ce que vous devez décider Métrique Exemple de Larkfield
Ce seuil est-il suffisant? Précision et rappel au seuil, et proportion signalée 3+ points : précision de 0,457, rappel de 0,290, 9,8 % signalés
Que détectons-nous avec notre capacité? Rappel à un taux de signalement fixe, ou rappel@k La cible : rappel d’au moins 0,40 avec au plus 20 % signalés; avec la règle d’égalité, 0,459
Quelle est la qualité des k premiers éléments d’une liste? Précision@k (et rappel@k) Les 32 billets à 4 points : précision@32 = 0,562
Lequel des deux scores classe mieux des positifs rares? Précision moyenne, avec son plancher (la proportion de positifs) Score à points : AP de 0,310; plancher de 0,155
Lequel des deux scores classe mieux, dans un rapport courant? ROC AUC, avec son plancher (0,5) Score à points : ROC AUC de 0,715
Récupération pour la RAG Rappel@k, puis précision@k Le passage contenant la réponse est-il parmi les k premiers?

Exemple détaillé : Priya résume le score à points

Section intitulée « Exemple détaillé : Priya résume le score à points »

Priya calcule les deux résumés et les mesures du début de la liste pour les billets de mai. Les cellules de préparation, load(), points_score() et flag_report() sont les mêmes que dans Les métriques de classification. valid contient les billets de mai. D’abord, les résumés avec leurs planchers :

from sklearn.metrics import average_precision_score, roc_auc_score
y = valid[TARGET]
points = points_score(valid)
print("average precision:", round(average_precision_score(y, points), 3), "| floor:", round(y.mean(), 3))
print("ROC AUC:", round(roc_auc_score(y, points), 3), "| floor: 0.5")

La sortie :

Sortie
average precision: 0.31 | floor: 0.155
ROC AUC: 0.715 | floor: 0.5

scikit-learn gère les égalités pour vous : tous les billets ayant le même nombre de points entrent ensemble, à une seule étape du seuil. Ensuite, Priya calcule précision@k et rappel@k pour le début de la liste classée. Elle trie par points et conserve l’ordre d’arrivée des billets ayant le même nombre de points : c’est la règle d’égalité. Ainsi, k = 32 et k = 116 correspondent aux seuils 4 et 3. k = 235 correspond à toute la capacité avec la règle d’égalité :

def at_k(y, scores, k):
"""Precision and recall of the k highest scores."""
top = np.argsort(-np.asarray(scores), kind="stable")[:k]
caught = int(np.asarray(y)[top].sum())
return round(caught / k, 3), round(caught / int(np.sum(y)), 3)
for k in (32, 116, 235):
print(f"k = {k}: precision@k, recall@k =", at_k(y, points, k))
Sortie
k = 32: precision@k, recall@k = (0.562, 0.098)
k = 116: precision@k, recall@k = (0.457, 0.29)
k = 235: precision@k, recall@k = (0.357, 0.459)

Les deux premières lignes correspondent aux seuils 4 et 3 du tableau ci-dessus, et la dernière à la règle d’égalité. Un k et un seuil sont deux façons de couper la même liste. Voici le résumé de Priya pour Grace : « Le score à points classe les transferts environ deux fois mieux que le hasard (AP de 0,310 contre 0,155). Pour votre capacité, signalez les billets à 3 points ou plus. Puis ajoutez ceux à 2 points par ordre d’arrivée, jusqu’à 235 par mois. Environ 1 examen sur 3 trouve un vrai transfert. Nous détectons 46 % des transferts, plus que la cible de 40 %. Le mois de test le confirmera plus tard. »

Utilisez les sections 1 à 4 du carnet (notebook) Jupyter.

  1. Ouvrez le carnet depuis l’encadré au début 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. Dans la section 1, exécutez les dix billets. Vous devriez voir AP 0.692 et ROC AUC 0.792.
  4. Dans la section 2, calculez précision@3 et rappel@3 pour l’exemple de recherche. La cellule de vérification affiche Check passed: (precision_at_3, recall_at_3) is right. (vérification réussie : les deux valeurs sont correctes).
  5. Dans la section 3, exécutez le tableau des seuils pour mai. Vous devriez voir les cinq lignes du tableau ci-dessus.
  6. Dans la section 4, appelez precision_recall_curve(y, points) de sklearn.metrics. Cette fonction renvoie la précision et le rappel à chaque seuil, ainsi que les seuils.
  7. Tracez le rappel à l’horizontale et la précision à la verticale. Vous devriez voir la courbe du graphique ci-dessus.
  8. Exécutez les résumés. Vous devriez voir average precision: 0.31 (précision moyenne : 0,31) et ROC AUC: 0.715.
Afficher la réponse
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y, points)
for p, r, t in zip(precision, recall, thresholds):
print(f"{t} points or more: precision {p:.3f}, recall {r:.3f}")
Sortie
0 points or more: precision 0.155, recall 1.000
1 points or more: precision 0.193, recall 0.907
2 points or more: precision 0.315, recall 0.563
3 points or more: precision 0.457, recall 0.290
4 points or more: precision 0.562, recall 0.098

precision_recall_curve renvoie une paire précision–rappel de plus que le nombre de seuils. La dernière paire est (1,0, 0,0), le point sans signalement, que zip omet. Les seuils vont du plus bas au plus haut. Le tableau va donc de la sélection la plus large à la plus petite.

Changez une condition : la rareté de la classe positive. Gardez les 996 billets de mai non transférés, mais seulement 61 des 183 transferts, choisis au hasard. Les points de chaque billet ne changent pas. Avant d’exécuter la section 5 du carnet, prédisez : la ROC AUC augmente-t-elle, diminue-t-elle ou reste-t-elle à peu près identique? Et l’AP?

Afficher la réponse
rng = np.random.default_rng(0)
escalated = np.where(y == 1)[0]
others = np.where(y == 0)[0]
keep = np.concatenate([rng.choice(escalated, 61, replace=False), others])
y_rare, points_rare = y.to_numpy()[keep], points.to_numpy()[keep]
print(f"escalated: {y_rare.mean():.1%}")
print("ROC AUC:", round(roc_auc_score(y_rare, points_rare), 3))
print("average precision:", round(average_precision_score(y_rare, points_rare), 3))
Sortie
escalated: 5.8%
ROC AUC: 0.704
average precision: 0.135

La ROC AUC reste à peu près identique (0,704 contre 0,715). Elle compare des paires. Un billet transféré dépasse encore un autre billet choisi au hasard aussi souvent qu’avant. L’AP passe de 0,310 à 0,135. Avec moins de transferts, chaque signalement trouve moins souvent un transfert, donc la précision baisse à chaque seuil. Son plancher a aussi baissé, de 0,155 à 0,058. Les deux métriques sont correctes; elles répondent à des questions différentes. Comparez donc l’AP seulement entre des scores sur les mêmes billets, toujours avec son plancher. Et quand les positifs sont rares, ne laissez pas une bonne ROC AUC masquer une faible précision.

Erreur courante

Précision comparée à des charges de travail différentes

Symptôme : Tomás compare le score à points à la règle de priorité 1. Il rapporte : « À 3 points ou plus, le score à points a une précision de 0,457. La règle donne 0,374. Le score à points est 22 % plus précis. » Omar est satisfait et demande à Grace de changer de méthode.

for name, flags in [("rule: priority 1", valid["priority"] == 1), ("points: 3 or more", points >= 3)]:
report = flag_report(y, flags)
print(f"{name:18s} flagged {report['flagged']:3d} | precision {report['precision']} | recall {report['recall']}")
Sortie
rule: priority 1 flagged 163 | precision 0.374 | recall 0.333
points: 3 or more flagged 116 | precision 0.457 | recall 0.29

Cause : les deux ensembles de signalements ont des tailles différentes. À 3 points ou plus, le score ne signale que 116 billets, ses cas les plus clairs, et détecte 53 transferts. La règle en signale 163 et détecte 61 transferts. Un seuil plus strict augmente presque toujours la précision. Comparer la précision à différentes charges de travail compare donc deux décisions différentes, pas deux classificateurs. Avec le seul argument de Tomás, Grace adopterait un signalement qui détecte 8 transferts de moins par mois.

Correction : comparez les classificateurs à charge de travail égale, ou sur tous les seuils. Accordez au score à points les 163 examens de la règle, avec la règle d’égalité. at_k(y, points, 163) donne une précision de 0,405 et un rappel de 0,361. À charge de travail égale, le score à points dépasse la règle sur les deux mesures. Sur la courbe précision–rappel, la règle est un point sous la courbe du score à points. Vous pouvez aussi comparer l’AP des deux scores.

Conséquence en IA : une précision ou un rappel seul, sans le seuil et la proportion signalée, ne dit presque rien. Les équipes qui annoncent « 95 % de précision » pour un système de récupération ou un filtre antifraude utilisent souvent un seuil qui signale très peu de cas. Demandez chaque fois l’autre mesure et la charge de travail.

Vérifiez votre compréhension

Une recherche d'article de soutien renvoie 5 résultats. Les résultats 1, 3 et 4 sont utiles. La base de connaissances contient 6 articles utiles pour cette question. Quelles sont précision@5 et rappel@5? Si la recherche renvoyait 20 résultats, laquelle des deux pourrait diminuer?

Afficher la réponse

Précision@5 = 3 ÷ 5 = 0,6 : trois des cinq résultats sont utiles. Rappel@5 = 3 ÷ 6 = 0,5 : la moitié des articles utiles sont parmi les 5 premiers. Avec 20 résultats, rappel@20 ne peut pas être inférieur à 0,5, car les 20 premiers comprennent les 5 premiers. Précision@20 peut diminuer, et diminue généralement. Les 15 résultats supplémentaires sont moins bien classés, donc une plus petite proportion est utile.

Vérifiez votre compréhension

Prédisez : la capacité de Grace passe de 20 % à 40 % des billets. Quel seuil du score à points choisissez-vous maintenant, et que deviennent la précision et le rappel?

Afficher la réponse

Choisissez le seuil le plus bas qui signale au plus 40 % des billets. À 2 points ou plus, on signale 27,7 % des billets de mai. À 1 ou plus, on en signale 72,9 %, soit trop. À 2 ou plus, le rappel passe de 0,290 à 0,563 : on détecte 103 des 183 transferts. La précision passe de 0,457 à 0,315 : environ 1 examen sur 3 trouve un transfert. Avec la règle d’égalité, Grace pourrait aussi ajouter des billets à 1 point par ordre d’arrivée, jusqu’à 40 %. Le score reste le même; la décision a déplacé le seuil.

Ce module vous a appris à évaluer un modèle supervisé avant d’en créer un. Utilisez des données distinctes, choisissez la métrique adaptée à la décision et gardez le compromis en vue. Les exercices du module réunissent ces éléments pour les signalements de transfert au niveau supérieur chez Larkfield.

Exercice guidé : évaluer deux règles de signalement selon la capacité

Section intitulée « Exercice guidé : évaluer deux règles de signalement selon la capacité »

Utilisez le carnet (notebook) Jupyter, section 7.

  1. Calculez flag_report() sur les données de validation pour la règle de priorité 1.
  2. Trouvez le seuil le plus bas du score par points qui signale au plus 20 % des billets de mai. Placez-le dans cut_20.
  3. Exécutez la cellule de vérification pour cut_20.
  4. Calculez flag_report() pour le score par points au seuil cut_20.
  5. Utilisez la capacité restante avec la règle de départage : at_k(y, points, 235).
  6. Rédigez une courte note d’évaluation pour Grace. Pour chaque méthode de signalement, indiquez la proportion signalée, la précision et le rappel. Indiquez aussi si elle respecte la cible (au plus 20 % signalés, rappel d’au moins 0,40).
Afficher une réponse modèle
cut_20 = min(c for c in range(6) if (points >= c).mean() <= 0.20)
print("cut-off:", cut_20)
for name, flags in [("rule: priority 1", valid["priority"] == 1), (f"points: {cut_20} or more", points >= cut_20)]:
report = flag_report(y, flags)
print(f"{name:18s} {report['share flagged']:.1%} flagged | precision {report['precision']} | recall {report['recall']}")
print("tie rule, 235 flags: precision, recall =", at_k(y, points, 235))
Sortie
cut-off: 3
rule: priority 1 13.8% flagged | precision 0.374 | recall 0.333
points: 3 or more 9.8% flagged | precision 0.457 | recall 0.29
tie rule, 235 flags: precision, recall = (0.357, 0.459)

Note pour Grace (données de validation, mai 2026, 1 179 billets, 183 transférés au niveau supérieur) : « La règle de priorité 1 signale 13,8 % des billets. Parmi ses signalements, 37 % sont transférés au niveau supérieur. Elle repère 33 % des transferts : c’est sous la cible. Le score par points au seuil de 3 points ou plus signale seulement 9,8 % des billets. Parmi ses signalements, 46 % sont transférés, mais il ne repère que 29 % des transferts. Il laisse 119 examens inutilisés, car le seuil suivant, 2 points, signale 28 % des billets. Avec la règle de départage, il signale 19,9 % des billets. On ajoute alors les billets de 2 points dans l’ordre d’arrivée, jusqu’à 235 par mois. Parmi ses signalements, 36 % sont transférés, et il repère 46 % des transferts. Cela respecte la cible pour mai. Nous le confirmerons sur le mois de test seulement à la fin. Le module 4 crée des modèles aux scores plus fins, qui n’ont pas besoin de règle de départage. »

L’équipe de l’entrepôt de Larkfield demande un nouveau signalement : « Quelles commandes seront retournées? » Le traitement d’une commande retournée coûte environ 15 dollars. Avant l’expédition, l’équipe peut appeler au plus 50 clients par jour, sur environ 400 commandes. Un appel prend quelques minutes. Appeler un client qui ne retournerait pas sa commande ne coûte rien de plus. Choisissez la métrique principale pour cette décision. Indiquez quel nombre limite les signalements et comment vous compareriez deux scores. Écrivez quatre ou cinq phrases.

Afficher une réponse modèle

L’équipe peut faire 50 appels par jour. La décision repose donc sur une liste classée avec un k fixe de 50, sur environ 400 commandes (12,5 %). La métrique principale est le rappel@50 : parmi toutes les commandes retournées, combien figurent dans les 50 appels. La précision@50 l’accompagne, car elle indique combien d’appels sont utiles. Mais un appel inutile coûte peu, donc le rappel compte davantage. L’exactitude n’est pas utile : les clients ne retournent que quelques commandes. Une règle qui prédit « aucun retour » est donc très exacte, mais inutile. Pour comparer deux scores, calculez leur rappel@50 et leur précision@50 sur les mêmes journées de validation. Ajoutez l’AP comme résumé du classement complet, à côté de son plancher, la proportion de commandes retournées.

Vérifiez votre compréhension

Rappel des connaissances : en une phrase chacun, que mesurent la précision et le rappel, et quel type d'erreur réduit chacun?

Afficher la réponse

La précision est la proportion de signalements (ou des k premiers résultats) réellement positifs; les faux positifs, les fausses alertes, la réduisent. Le rappel est la proportion de tous les vrais positifs signalés (ou parmi les k premiers); les faux négatifs, les cas manqués, le réduisent. Aucun des deux n’utilise les vrais négatifs. C’est pourquoi ils restent fiables quand la classe positive est rare.

Vérifiez votre compréhension

Explication : Tomás veut choisir le seuil du score par points sur les données de test (juin), car elles sont les plus récentes. Pourquoi faut-il choisir le seuil sur les données de validation, et à quoi servent les données de test?

Afficher la réponse

Un seuil est un choix, comme un réglage de modèle. Si vous le choisissez en regardant les données de test, le score de test n’est plus une estimation fiable. Vous avez choisi l’option qui fonctionnait le mieux sur ces billets précis. Le score est donc trop bon, et il ne reste aucune nouvelle donnée pour le vérifier. Choisissez le seuil sur les données de validation (mai), qui servent à choisir et à comparer. Utilisez les données de test (juin) une seule fois, à la fin. Elles montrent comment le choix final fonctionne sur de nouveaux billets. Après les avoir consultées, ne changez rien. C’est l’examen final scellé de la leçon Données d’entraînement, de validation et de test.

Vérifiez votre compréhension

Mise en pratique : un hôpital utilise un modèle pour choisir les radiographies thoraciques qu'un radiologiste lit en premier. Toutes les radiographies sont lues le jour même; les 30 premières sont lues en moins d'une heure. Un cas urgent manqué et lu tard peut nuire au patient. Choisissez la métrique pour cette décision et justifiez-la.

Afficher la réponse

Le modèle classe les radiographies, et la décision porte sur les 30 premières chaque jour. Il faut donc une métrique des k premiers résultats : le rappel@30. C’est la proportion des cas urgents du jour qui figurent parmi les 30 premiers. Manquer un cas urgent est l’erreur coûteuse, donc le rappel compte le plus. La précision@30 l’accompagne : elle montre quelle part de la première heure du radiologiste sert aux cas urgents. L’exactitude ne convient pas ici, car les cas urgents sont rares. Pour comparer deux modèles avant de faire un choix, utilisez l’AP à côté de la proportion de cas urgents.

Vous pouvez maintenant évaluer un modèle supervisé avant d’en créer un. Le module 3 vous a donné quatre outils : trois ensembles de données avec trois rôles, des métriques de régression pour les nombres, des métriques de classification pour les classes, et le compromis entre un score et son seuil. Le module 4 crée les premiers modèles, et vous les mesurez avec exactement ces outils.

Le module 3 n’ajoute pas de fichiers à votre projet. Si votre dossier de projet ne fonctionne plus, ou si un fichier de données manque ou a changé :

  1. Ouvrez un terminal dans ~/projects/ticket-model et activez l’environnement .venv.
  2. Exécutez python get_data.py --reset.
  3. Vérifiez la dernière ligne : Ready: train 16939 rows (1983 escalated), valid 1179 (183), test 1002 (157). (Prêt : entraînement, 16 939 lignes dont 1 983 transférées; validation, 1 179 dont 183; test, 1 002 dont 157.)

Les carnets Jupyter de ce module n’ont besoin d’aucune de ces étapes : chacun télécharge sa propre copie des données.

Récapitulatif

  • Un score classe les cas, et un seuil (ou un k) coupe la liste. Un seuil plus bas repère davantage de positifs (rappel accru) et de fausses alertes (précision réduite). Seul un meilleur score améliore les deux.
  • La décision détermine le seuil. Pour Larkfield, c’est le seuil le plus bas qui respecte la capacité de 20 % : 3 points ou plus. La précision est de 0,457 et le rappel de 0,290. Une règle de départage (billets de 2 points dans l’ordre d’arrivée) remplit la capacité : précision de 0,357, rappel de 0,459.
  • La précision@k et le rappel@k mesurent les k premiers résultats d’une liste classée. Le cours RAG : créer une IA qui utilise vos données les utilise pour évaluer la récupération.
  • La courbe PR et la précision moyenne résument tous les seuils. Le plancher de l’AP est la proportion de positifs (score par points : AP de 0,310, plancher de 0,155). La courbe ROC et l’aire sous la courbe ROC utilisent le taux de faux positifs, avec un plancher de 0,5 (score par points : 0,715). Quand les positifs sont rares, préférez l’AP.
  • Le module 3 en bref : séparez les données pour que le juge n’ait jamais vu les réponses. Choisissez la métrique selon la décision. Lisez chaque nombre avec sa référence de base, son plancher et son seuil.

Ensuite, le module 4 crée les premiers modèles : une régression pour les billets quotidiens et un classificateur pour les transferts au niveau supérieur. Vous les mesurez avec ces métriques.

Leçon suivante : Comprendre la régression