Confusion Matrix
Una matriz de confusión cuenta las predicciones de un modelo frente a las etiquetas verdaderas, clase por clase. Descubre cómo interpretarla, qué métricas proporciona y cómo se adapta a la detección.
Una matriz de confusión es una tabla que cuenta cómo coinciden las predicciones de un modelo de clasificación con las etiquetas verdaderas. Un eje enumera las clases reales y el otro las clases predichas; cada celda cuenta los ejemplos que corresponden a ese par. Las predicciones correctas quedan en la diagonal y todos los errores quedan fuera de ella, en la celda que indica exactamente qué clase se confundió con cuál. Por eso, la matriz de confusión es la primera forma estándar de examinar los errores de un modelo y la fuente de la exactitud, la precisión, la exhaustividad y la puntuación F1.
Cómo leer una matriz de confusión binaria#
Con dos clases, la matriz tiene cuatro celdas:
- Verdaderos positivos (TP): ejemplos positivos predichos como positivos, como una pieza defectuosa marcada como defectuosa.
- Falsos positivos (FP): ejemplos negativos predichos como positivos, también llamados errores de tipo I o falsas alarmas.
- Falsos negativos (FN): ejemplos positivos predichos como negativos, también llamados errores de tipo II u omisiones.
- Verdaderos negativos (TN): ejemplos negativos predichos como negativos.
La mayoría de las métricas binarias son proporciones calculadas a partir de estos cuatro recuentos. La precisión es TP / (TP + FP), la exhaustividad es TP / (TP + FN) y la exactitud es (TP + TN) dividido por la suma de los cuatro recuentos. Qué celda fuera de la diagonal importa más depende de la aplicación: una prueba de detección del cáncer se ajusta para mantener bajos los falsos negativos, y un filtro de spam, para mantener bajos los falsos positivos.
Matrices de confusión multiclase#
Con N clases, la matriz es de N × N. En la orientación que usa el confusion_matrix de scikit-learn, cada fila corresponde a una clase verdadera y cada columna, a una clase predicha. Leer una fila permite ver a qué clases fueron a parar los ejemplos de esa clase; por tanto, la celda diagonal dividida por el total de la fila es la exhaustividad de la clase. Leer una columna permite ver cuáles eran realmente las predicciones del modelo para esa clase; por tanto, la celda diagonal dividida por el total de la columna es la precisión de la clase. Algunas herramientas muestran la matriz transpuesta, así que las etiquetas de los ejes determinan cómo leer el gráfico.
from sklearn.metrics import confusion_matrix
# Etiquetas verdaderas y predichas para 10 imágenes
y_true = ["cat", "cat", "cat", "dog", "dog", "dog", "dog", "fox", "fox", "fox"]
y_pred = ["cat", "cat", "dog", "dog", "dog", "dog", "cat", "fox", "dog", "fox"]
# Las filas son las clases verdaderas y las columnas, las clases predichas, en este orden de etiquetas
labels = ["cat", "dog", "fox"]
matrix = confusion_matrix(y_true, y_pred, labels=labels)
print(matrix)Las filas impresas para cat, dog y fox son [2 1 0], [1 3 0] y [0 1 2]. La diagonal contiene 7 de las 10 imágenes, así que la exactitud es 0.7. La columna dog reúne un cat y un fox, por lo que la precisión de dog es 3 / 5 = 0.6; la fila dog pierde una imagen en cat, por lo que la exhaustividad de dog es 3 / 4 = 0.75. Una matriz normalizada divide cada celda por el total de su clase verdadera, de modo que la diagonal muestra la exhaustividad por clase y las clases de tamaños muy distintos se pueden comparar.
Matrices de confusión para detección de objetos#
La detección añade una clase de fondo, porque un detector puede indicar una caja donde no hay nada o no detectar un objeto en absoluto. Primero se emparejan las predicciones con las etiquetas mediante la intersección sobre unión (IoU) y luego se cuentan: los pares emparejados se sitúan en las celdas de clase, las predicciones sin emparejar cuentan como falsos positivos frente al fondo y las etiquetas sin emparejar cuentan como falsos negativos predichos como fondo. La celda de fondo con fondo queda vacía porque no se pueden contar las regiones vacías de una imagen, así que una matriz de detección no tiene verdaderos negativos. La validación de YOLO26 construye esta matriz con una fila y una columna adicionales para el fondo; empareja las predicciones con las etiquetas con una IoU superior a 0.45 y la guarda como confusion_matrix.png, con las clases predichas en el eje vertical y las clases verdaderas en el 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 forma es (81, 81), y la última fila cuenta las personas etiquetadas que no coinciden con ninguna predicción.
Matriz de confusión y herramientas relacionadas#
- Curva ROC: un punto por cada umbral de decisión; cada punto resume la matriz de confusión de ese umbral como una tasa de verdaderos positivos y una tasa de falsos positivos.
- Precisión media (mAP): principal puntuación de detección, calculada a partir de las mismas decisiones de TP y FP en todos los niveles de confianza, sin mostrar qué clases se confunden.
- Exactitud: la matriz reducida a un solo número, la suma de la diagonal dividida por el total. En un conjunto de datos con un 95 % de negativos, un modelo que siempre predice «negativo» alcanza una exactitud del 95 %, aunque su matriz muestre cero verdaderos positivos.










