Confusion Matrix
Une matrice de confusion dénombre les prédictions d’un modèle par rapport aux étiquettes réelles, classe par classe. Découvre comment la lire, les métriques qu’elle fournit et sa forme pour la détection.
Une matrice de confusion est un tableau qui compte la correspondance entre les prédictions d'un modèle de classification et les vraies étiquettes. Un axe énumère les classes réelles et l'autre les classes prédites ; chaque cellule compte les exemples correspondant à cette paire. Les prédictions correctes se trouvent sur la diagonale et chaque erreur en dehors de celle-ci, dans la cellule qui indique précisément quelle classe a été confondue avec quelle autre. La matrice de confusion constitue donc la première vue standard des erreurs d'un modèle et la source de l'exactitude, de la précision, du rappel et du score F1.
Lire une matrice de confusion binaire#
Avec deux classes, la matrice comporte quatre cellules :
- Vrais positifs (TP) : exemples positifs prédits comme positifs, par exemple une pièce défectueuse signalée comme défectueuse.
- Faux positifs (FP) : exemples négatifs prédits comme positifs, également appelés erreurs de type I ou fausses alertes.
- Faux négatifs (FN) : exemples positifs prédits comme négatifs, également appelés erreurs de type II ou omissions.
- Vrais négatifs (TN) : exemples négatifs prédits comme négatifs.
La plupart des métriques binaires sont des rapports calculés à partir de ces quatre valeurs. La précision est égale à TP / (TP + FP), le rappel à TP / (TP + FN) et l'exactitude à (TP + TN) divisés par la somme des quatre valeurs. La cellule hors diagonale la plus importante dépend de l'application : le réglage d'un dépistage du cancer vise à réduire les faux négatifs, tandis qu'un filtre anti-spam vise à réduire les faux positifs.
Matrices de confusion multiclasse#
Avec N classes, la matrice est de taille N × N. Dans l'orientation utilisée par la confusion_matrix de scikit-learn, chaque ligne correspond à une classe réelle et chaque colonne à une classe prédite. Parcourir une ligne montre la répartition des exemples de cette classe ; la cellule diagonale divisée par le total de la ligne donne donc le rappel de la classe. Parcourir une colonne montre quelles étaient réellement les prédictions du modèle pour cette classe ; la cellule diagonale divisée par le total de la colonne donne donc sa précision. Certains outils affichent la matrice transposée : les étiquettes des axes déterminent alors comment lire le graphique.
from sklearn.metrics import confusion_matrix
# Étiquettes vraies et prédites pour 10 images
y_true = ["cat", "cat", "cat", "dog", "dog", "dog", "dog", "fox", "fox", "fox"]
y_pred = ["cat", "cat", "dog", "dog", "dog", "dog", "cat", "fox", "dog", "fox"]
# Les lignes correspondent aux classes vraies et les colonnes aux classes prédites, dans cet ordre d'étiquettes
labels = ["cat", "dog", "fox"]
matrix = confusion_matrix(y_true, y_pred, labels=labels)
print(matrix)Les lignes affichées pour cat, dog et fox sont [2 1 0], [1 3 0] et [0 1 2]. La diagonale contient 7 des 10 images, donc l'exactitude est de 0.7. La colonne dog comprend un cat et un fox, ce qui donne une précision de 3 / 5 = 0.6 pour dog. La ligne dog perd une image au profit de cat, ce qui donne un rappel de 3 / 4 = 0.75 pour dog. Une matrice normalisée divise chaque cellule par le total de sa classe réelle : la diagonale indique alors le rappel par classe et les classes de tailles très différentes deviennent comparables.
Matrices de confusion pour la détection d'objets#
La détection ajoute une classe d'arrière-plan, car un détecteur peut produire une boîte là où il n'y a rien ou manquer complètement un objet. Les prédictions sont d'abord associées aux étiquettes selon l'intersection sur union (IoU), puis comptabilisées : les paires associées sont placées dans les cellules des classes, les prédictions non associées comptent comme faux positifs par rapport à l'arrière-plan et les étiquettes non associées comme faux négatifs prédits comme arrière-plan. La cellule arrière-plan-arrière-plan reste vide, car les régions vides de l'image ne peuvent pas être comptabilisées ; une matrice de détection ne comporte donc pas de vrais négatifs. La validation de YOLO26 construit cette matrice avec une ligne et une colonne supplémentaires pour l'arrière-plan, associe les prédictions aux étiquettes avec un IoU supérieur à 0.45 et l'enregistre sous confusion_matrix.png, avec les classes prédites sur l'axe vertical et les classes réelles sur l'axe horizontal.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validation builds the confusion matrix and saves it as confusion_matrix.png
metrics = model.val(data="coco8.yaml")
matrix = metrics.confusion_matrix.matrix # rows: predicted class, columns: true class
# 80 COCO classes plus one background row and column
print(matrix.shape)
# Class 0 is "person": correct detections and people the model missed
print(f"Person TP: {matrix[0, 0]:.0f}, missed: {matrix[-1, 0]:.0f}")La forme est (81, 81), et la dernière ligne compte les personnes annotées auxquelles aucune prédiction n'a été associée.
Matrices de confusion et outils connexes#
- Courbe ROC : un point par seuil de décision ; chaque point résume la matrice de confusion de ce seuil sous forme de taux de vrais positifs et de taux de faux positifs.
- Précision moyenne (mAP) : principal score de détection, calculé à partir des mêmes décisions TP et FP à tous les niveaux de confiance, sans indiquer quelles classes sont confondues.
- Exactitude : la matrice réduite à un seul nombre, soit la diagonale divisée par le total. Sur un jeu de données composé à 95 % d'exemples négatifs, un modèle qui prédit toujours « négatif » obtient une exactitude de 95 %, alors que sa matrice affiche zéro vrai positif.










