Cours
Les algorithmes d’apprentissage automatique (ML) sont de plus en plus utilisés pour automatiser des tâches répétitives et déceler des motifs cachés dans les données. Mais ils sont par nature probabilistes, ce qui signifie que leurs prédictions ne sont pas toujours exactes. Vous devez donc pouvoir estimer la fiabilité de votre modèle ML afin d’instaurer la confiance dans ces systèmes.
Des métriques d’évaluation telles que l’exactitude (accuracy), la précision, le rappel, l’erreur quadratique moyenne (MSE), l’erreur absolue moyenne en pourcentage (MAPE), etc., sont couramment utilisées pour mesurer la performance d’un modèle. Chaque métrique éclaire la performance selon des critères et des angles différents.
Ces métriques permettent aussi de vérifier que le modèle progresse continuellement dans l’apprentissage de sa tâche. Après tout, si vous ne mesurez pas, vous ne pouvez pas améliorer la performance du système ML.
L’exactitude est une métrique simple à comprendre et efficace avec un jeu de données équilibré, c’est‑à‑dire lorsque toutes les classes sont représentées de manière similaire. Or, les phénomènes réels ne sont pas répartis équitablement ; de tels jeux de données équilibrés sont donc rares. L’exactitude s’attache surtout à déterminer si la majorité des occurrences sont correctement identifiées, sans tenir compte de leur classe. Pour des événements rares mais cruciaux, comme une transaction frauduleuse ou un clic sur une impression publicitaire, l’exactitude donne une vision trompeuse d’un modèle qui prédirait tout en classe négative (pas de fraude, pas de clics). En raison de ces limites, l’exactitude n’est pas la métrique la plus appropriée. Quelle métrique utiliser à la place pour évaluer nos modèles ?
La précision et le rappel sont des métriques largement utilisées pour évaluer la performance d’un modèle de classification déséquilibré, comme la prédiction de l’attrition clients.
Précision et rappel, explications
La précision mesure la fiabilité avec laquelle une instance prédite comme positive est réellement positive, tandis que le rappel mesure la capacité du modèle à retrouver les instances positives présentes dans le jeu de données. La classe positive est la classe d’intérêt.
Concrètement, précision et rappel se comprennent le mieux à l’aide d’une matrice de confusion qui contient quatre notions clés :
- Vrai positif (TP) : nombre d’instances de la classe positive correctement identifiées
- Faux positif (FP) : nombre d’instances négatives incorrectement identifiées comme positives
- Vrai négatif (TN) : nombre d’instances de la classe négative correctement identifiées
- Faux négatif (FN) : nombre d’instances positives incorrectement identifiées comme négatives

Représentation réalisée par l’auteur
La précision et le rappel s’expriment mathématiquement à partir de ces quatre termes :
La précision est la proportion de TP parmi toutes les prédictions positives (TP+FP). Le rappel est la proportion de TP parmi toutes les instances positives réelles (TP+FN).
On peut encore simplifier la notation pour souligner leur différence. Les deux métriques partagent le même numérateur : l’intersection des instances positives réelles et des instances prédites positives, c’est‑à‑dire TP.

Image par Shruti Saxena
La différence se situe au dénominateur : la précision considère toutes les prédictions positives (TP+FP), alors que le rappel considère toutes les instances positives réelles (TP+FN).
Intuition derrière la précision et le rappel
La matrice de confusion porte bien son nom : elle peut semer la confusion lorsqu’on découvre ces notions pour la première fois.
Approprions‑nous ces concepts avec un exemple. Supposons que vous dirigiez une aciérie où l’on extrait le fer du minerai et où on le mélange à d’autres minéraux et éléments (parfois involontairement). En se concentrant sur l’extraction, vous avez plusieurs options quant à la pureté du métal extrait et aux déchets produits, comme ci‑dessous :
Scénario 1 : vous privilégiez uniquement la pureté du fer extrait, indépendamment de la quantité de métal gaspillée.
Scénario 2 : vous cherchez à maximiser l’efficacité, c’est‑à‑dire la quantité de fer extraite par unité de minerai, sans vous soucier de la pureté.
Scénario 3 : vous voulez le meilleur des deux mondes : une pureté aussi élevée que possible tout en réduisant les pertes (maximiser le fer extrait par unité de minerai).
Considérez le haut‑fourneau ou le four à arc électrique comme des options de modélisation fournissant des résultats différents (pureté et déperdition). Supposons qu’une méthode donne un fer à 97,5 % de pureté et perde 4 % du fer dans les boues. On peut alors définir la précision comme la fraction de fer pur dans le métal extrait, soit 97,5 %, tandis que le rappel correspond à la part de fer récupérée par rapport à tout le fer contenu dans le minerai, soit 96 % (4 % de fer total perdu).

Illustration réalisée par l’auteur
Disons que vous choisissez la seconde méthode pour obtenir un fer plus pur en sortie du four, ce qui implique davantage de pertes. Si vous augmentez la pureté de 0,5 % pour atteindre 98 %, la perte de métal grimpe de 11 %. Le rappel correspondant à une précision de 98 % devient alors 85 %. Cet échange du rappel contre plus de précision (et inversement) illustre la relation inverse entre précision et rappel.
Ne serait‑il pas idéal de connaître toutes les valeurs de précision et leurs rappels associés afin de choisir ce qui sert le mieux votre objectif ?
La courbe précision‑rappel permet précisément de faire ce choix. Vous allez l’explorer en détail dans les sections suivantes. Mais avant cela, comprenons une notion clé au cœur de la courbe PR : le seuil.
La notion de seuil
Prenons l’exemple de l’identification de transactions frauduleuses pour comprendre le fonctionnement d’un seuil (ou cutoff). Le tableau ci‑dessous présente quatre transactions, avec des identifiants de 1 à 4 ; une transaction peut être frauduleuse ou régulière. Le modèle de détection de fraude renvoie la probabilité qu’une transaction soit frauduleuse (colonne surlignée en jaune), ce qui donne implicitement la probabilité qu’elle soit régulière.
Une transaction est prédite frauduleuse si la probabilité affichée est supérieure au seuil choisi dans la colonne Probabilité de transaction frauduleuse, sinon elle est déclarée régulière.
|
ID de transaction |
Probabilité de transaction frauduleuse |
Probabilité de transaction régulière |
Frauduleuse ? (Seuil = 0,9) |
Frauduleuse ? (Seuil = 0,5) |
Frauduleuse ? (Seuil = 0,4) |
|
1 |
0,3 |
0,7 |
Non |
Non |
Non |
|
2 |
0,4 |
0,6 |
Non |
Non |
Oui |
|
3 |
0,6 |
0,4 |
Non |
Oui |
Oui |
|
4 |
0,95 |
0,05 |
Oui |
Oui |
Oui |
Avec un seuil aussi strict que 0,9, les trois premières transactions sont marquées comme régulières, tandis que la dernière est identifiée comme frauduleuse. Un seuil élevé renforce la confiance dans les prédictions et conduit à une précision élevée. En contrepartie, vous sacrifiez le rappel du modèle en manquant certaines fraudes.
Un tel scénario n’est pas souhaitable malgré une précision élevée. Pourquoi, selon vous ?
Parce que l’entreprise supporte un coût plus élevé lorsqu’elle manque la détection d’une fraude, ce qui est précisément l’objectif du modèle. Notez que le coût d’une transaction frauduleuse est bien supérieur au coût induit par des transactions régulières bloquées, c’est‑à‑dire les FP.
À l’autre extrémité, un seuil bas de 0,4 marque les trois dernières transactions comme frauduleuses. Un seuil aussi permissif bloquera la majorité des transactions, au risque d’irriter de nombreux clients. Sans compter la charge supplémentaire pour les équipes qui devront analyser les transactions signalées et identifier les fraudes réelles.
L’entreprise doit donc définir des métriques cibles et leurs valeurs souhaitées pour trouver le bon équilibre, en tenant compte des coûts suivants :
- Le coût d’identifier une transaction frauduleuse comme régulière (faux négatifs)
- Le coût d’identifier une transaction régulière comme frauduleuse (faux positifs)
En revenant à la définition de la précision, vous constaterez que les faux positifs figurent au dénominateur de l’expression mathématique : minimiser les faux positifs maximise la précision. De même, minimiser les faux négatifs maximise le rappel du modèle.
Ainsi, la prédiction d’une transaction comme frauduleuse ou régulière dépend largement de la valeur du seuil.
Qu’est‑ce qu’une courbe précision‑rappel ?
Une courbe précision‑rappel vous aide à choisir un seuil en fonction des valeurs souhaitées de précision et de rappel. Elle est aussi utile pour comparer différents modèles en calculant l’« aire sous la courbe précision‑rappel », abrégée en AUC.
Comme expliqué via la matrice de confusion, un modèle de classification binaire produit des TP, FP, TN et FN pour divers seuils, chaque valeur de seuil s’accompagnant d’un couple précision/rappel.
En plaçant le rappel sur l’axe des x et la précision correspondante sur l’axe des y, on obtient une courbe PR à pente négative. Elle illustre le compromis entre précision (réduction des FP) et rappel (réduction des FN) pour un modèle donné. Étant donné la relation inverse entre précision et rappel, la courbe est généralement non linéaire : augmenter l’une fait baisser l’autre, mais pas forcément de manière proportionnelle.

Image provenant de StackExchange
Supposons qu’une organisation fixe un rappel minimal acceptable de 98 %. La précision est de 30 % au point d’intersection marqué par l’étoile « Seuil bas, faible précision, rappel élevé ».
Les deux autres points extrêmes représentent les cas où le seuil est :
- Trop bas → rappel élevé : coût en capital humain et clients mécontents
- Trop haut → précision élevée : coût des fraudes non détectées et perte de réputation
Utiliser une courbe PR
Au‑delà du choix du bon seuil aligné sur les objectifs métier, l’aire sous la courbe de plusieurs courbes précision‑rappel, issues de modèles ou d’algorithmes différents, permet de comparer leurs performances. C’est particulièrement pertinent de comparer des modèles via les courbes PR plutôt qu’avec des métriques isolées comme la précision, le rappel, ou même le score F1 (moyenne harmonique de la précision et du rappel).

Image provenant de Stackoverflow
Ces métriques dépendent du seuil : toute modification du seuil change la répartition des TP, FP et FN. Deux modèles peuvent se comporter différemment pour un même seuil, ce qui fait de la courbe PR un outil robuste pour la comparaison de modèles. Le graphique ci‑dessus illustre deux courbes PR issues de deux algorithmes différents sur un même jeu de données : l’AUC de l’algorithme 2 est supérieure à celle de l’algorithme 1, ce qui en fait un meilleur choix pour ce problème.
Implémenter une courbe précision‑rappel en Python
Maintenant que vous savez ce que sont les courbes précision‑rappel et à quoi elles servent, voyons comment en créer une en Python.
Étape 1 : importer les packages Python nécessaires
Examinons le jeu de données de détection du cancer du sein où « classe 1 » correspond à un diagnostic de cancer et « classe 0 » à l’absence de cancer.
Le premier import charge le jeu de données depuis « sklearn.datasets », qui contient les variables indépendantes et la cible. Comme il s’agit d’un jeu de données standard, facilement apprenable par la plupart des algorithmes, nous avons choisi l’algorithme Naive Bayes importé sous « GaussianNB » depuis sklearn.
L’import suivant, « precision_recall_curve », renvoie différents seuils et leurs valeurs de précision et de rappel correspondantes.
from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import precision_recall_curve
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
Étape 2 : préparer les données d’entraînement et de test
Les variables indépendantes se trouvent sous la clé « data » et la variable cible sous la clé « target » dans le dictionnaire « data ». Les données sont ensuite séparées en ensembles d’entraînement et de test en passant l’argument test_size avec la valeur 0,3.
# Charger le jeu de données (cancer du sein)
data = load_breast_cancer()
X = data['data']
y = data['target']
Observons la répartition entre classes positive et négative, c’est‑à‑dire cas de cancer vs pas de cancer.
import numpy as np
unique, counts = np.unique(y, return_counts=True)
plt.pie(counts, labels=unique, autopct='%.0f%%');

Scindez les données en ensembles d’entraînement et de test avec train_test_split du module model_selection de sklearn.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
Étape 3 : entraînement du modèle
Les données d’entraînement sont passées à GaussianNB() pour lancer l’entraînement. Le modèle ajusté sert ensuite à obtenir des prédictions sous forme de probabilités sur les jeux d’entraînement et de test.
# Ajuster un modèle Naive Bayes
clf = GaussianNB().fit(X_train, y_train)
Étape 4 : générer les prédictions
Générez les probabilités de prédiction sur les jeux d’entraînement et de test ; elles serviront à calculer la précision et le rappel pour différents seuils.
# Prédire les probabilités
y_prob_train = clf.predict_proba(X_train)[:,1]
y_prob_test = clf.predict_proba(X_test)[:,1]
Étape 5 : tracer la courbe PR
La fonction precision_recall_curve() prend deux entrées : les probabilités issues du jeu d’entraînement (y_prob_train) et les valeurs réelles, et renvoie trois vecteurs : précision, rappel et seuils.
precision, recall, thresholds = precision_recall_curve(y_train, y_prob_train)
plt.fill_between(recall, precision)
plt.ylabel("Precision")
plt.xlabel("Recall")
plt.title("Train Precision-Recall curve");
Les vecteurs de précision et de rappel sont utilisés pour tracer la courbe PR à seuils variables comme ci‑dessous :

Courbe PR générée par l’auteur
La courbe précision‑rappel est‑elle meilleure que la courbe ROC ?
Une courbe ROC est similaire à la courbe PR, mais elle trace le taux de vrais positifs (TPR) en fonction du taux de faux positifs (FPR) pour différents seuils. Nous connaissons déjà le TPR : c’est un autre nom pour le rappel. Concentrons‑nous donc sur le FPR, qui représente la part d’erreurs parmi la classe négative. Dans l’exemple de fraude, c’est le pourcentage de transactions régulières marquées à tort comme frauduleuses.

Image par Albert Um
Nous comprenons désormais que le rappel (TPR) est commun aux courbes PR et ROC ; la différence majeure tient à la précision d’un côté et au FPR de l’autre. Voyons pourquoi la courbe PR est généralement plus informative.
La courbe P‑R met davantage l’accent sur la classe d’intérêt que la courbe ROC. Reprenons la détection de fraude. Dans les jeux de données déséquilibrés, les vrais négatifs (TN) sont souvent très nombreux, rendant le FPR minuscule. Mais cela renseigne‑t‑il vraiment sur la capacité du modèle à prédire une transaction frauduleuse ?
Non ! À l’inverse, utiliser la précision comme métrique décrit la performance du modèle sur la classe positive (transactions frauduleuses). Cela indique si le modèle est conservateur ou permissif lorsqu’il signale des fraudes.
Le deuxième inconvénient majeur de la courbe ROC est son insensibilité aux données déséquilibrées. D’après la figure ci‑dessus, le FPR est une métrique ne portant que sur la classe négative : l’évolution de FP est rapportée à FP+TN (toutes les instances négatives). Ainsi, si la distribution des classes change, la ROC varie peu. Cette insensibilité à la distribution de classes fait de la courbe PR un meilleur choix que la ROC.
Pour conclure
La précision et le rappel sont des métriques clés pour évaluer la performance des modèles de classification en apprentissage automatique. Le compromis entre les deux dépend des priorités métier et se traite au mieux via la courbe PR. Cet article a expliqué comment interpréter la courbe PR et choisir le seuil adéquat pour atteindre l’objectif métier. Nous avons également présenté, étape par étape, comment la tracer en Python, et pourquoi la courbe PR est souvent plus informative que la courbe ROC.