La matriz de confusión es una herramienta comúnmente utilizada en el aprendizaje automático para evaluar los modelos de clasificación. Se trata de una tabla que muestra la cantidad de veces que el modelo clasificó correcta o incorrectamente una muestra en relación con su clase real. La tabla está compuesta por cuatro elementos principales: verdaderos positivos (VP), falsos positivos (FP), verdaderos negativos (VN) y falsos negativos (FN).
Los verdaderos positivos (VP) son aquellas muestras que el modelo clasificó correctamente como pertenecientes a la clase positiva.
Los falsos positivos (FP) son aquellas muestras que el modelo clasificó incorrectamente como pertenecientes a la clase positiva.
Los verdaderos negativos (VN) son aquellas muestras que el modelo clasificó correctamente como pertenecientes a la clase negativa.
Los falsos negativos (FN) son aquellas muestras que el modelo clasificó incorrectamente como pertenecientes a la clase negativa.
La matriz de confusión se utiliza para calcular otras métricas de precisión como la precisión, el recall, el puntaje F1. Por ejemplo, la precisión se calcula como VP/(VP+FP) y el recall como VP/(VP+FN).
La matriz de confusión es una herramienta útil para entender las debilidades y fortalezas de un modelo de clasificación, permitiendo al equipo de ciencia de datos identificar problemas específicos y tomar medidas para mejorar el rendimiento del modelo.
Aplicando una matriz de confusión con Python
Para crear una matriz de confusión, primero debes tener un conjunto de datos de prueba y las predicciones del modelo para ese conjunto de datos. Luego, puedes utilizar el método sklearn.metrics.confusion_matrix para crear la matriz. Aquí te muestro un ejemplo:
from sklearn.metrics import confusion_matrix
# Ejemplo de datos de prueba y predicciones
y_true = [1, 0, 0, 1, 1, 0, 1, 0, 0, 0]
y_pred = [1, 1, 0, 1, 0, 0, 1, 1, 1, 0]
# Crear la matriz de confusión
cm = confusion_matrix(y_true, y_pred)
print(cm)
En este ejemplo, la variable y_true contiene las etiquetas verdaderas de las muestras del conjunto de prueba, mientras que la variable y_pred contiene las predicciones del modelo. El método confusion_matrix() toma estas dos variables como entrada y devuelve una matriz 2x2 que contiene los valores de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos. El resultado impreso en pantalla es:
Esta matriz de confusión indica que hay 4 verdaderos positivos, 3 falsos positivos, 1 verdadero negativo y 2 falsos negativos. A partir de estos valores, puedes calcular otras métricas de precisión como la precisión, el recall, el puntaje F1.
Entendiendo la matriz de confusión a través de un ejemplo práctico:
Diagnóstico médico de una enfermedad
Para ilustrarlo con un ejemplo práctico, supongamos que estamos desarrollando un modelo de diagnóstico médico para detectar una enfermedad. Los casos positivos son aquellos en los que la enfermedad está presente y los casos negativos son aquellos en los que la enfermedad no está presente.
En este caso, los verdaderos positivos (VP) serían los pacientes en los que el modelo detecta correctamente la enfermedad y los verdaderos negativos (VN) serían los pacientes en los que el modelo detecta correctamente la ausencia de la enfermedad.
Los falsos positivos (FP) serían los pacientes en los que el modelo detecta la enfermedad pero en realidad no está presente y los falsos negativos (FN) serían los pacientes en los que el modelo no detecta la enfermedad pero en realidad está presente.
En este caso, si tenemos 4 verdaderos positivos, significa que el modelo detecto correctamente 4 casos de enfermedad, si tenemos 3 falsos positivos, significa que el modelo detecto 3 casos de enfermedad que en realidad no eran, si tenemos 1 verdadero negativo, significa que el modelo detecto correctamente 1 caso sin enfermedad, y si tenemos 2 falsos negativos, significa que el modelo no detecto 2 casos de enfermedad que en realidad si eran.
Es importante mencionar que la interpretación de los resultados debe ser en conjunto con las necesidades y objetivos del problema, pues dependiendo del caso algunas métricas son más importantes que otras. Por ejemplo, si se busca un modelo que detecte todos los casos de enfermedad sin importar los falsos positivos, entonces el recall será más importante.
Por otro lado, si se busca un modelo que no detecte casos de enfermedad que en realidad no son, entonces la precisión será más importante.
Espero que esta explicación con un ejemplo práctico te ayude a entender mejor los resultados de la matriz de confusión.
Visualización de la matriz de confusión con Python.
También es importante mencionar que también existen otras librerías como seaborn o matplotlib que te permiten visualizar la matriz de confusión en forma de tabla o gráfico.
import seaborn as sns
import matplotlib.pyplot as plt
# Crear la matriz de confusión
cm = confusion_matrix(y_true, y_pred)
# Crear el gráfico
sns.heatmap(cm, annot=True, fmt='d')
# Agregar títulos
plt.title('Matriz de confusión')
plt.xlabel('Predicción')
plt.ylabel('Verdad')
# Mostrar el gráfico
plt.show()