Comprensión de la Matriz de Confusión y Cómo Implementarla en Python

Admond Lee
May 20, 2020

Contents Outline

Comprensión de la Matriz de Confusión y Cómo Implementarla en Python

May 20, 2020 6 minutes read

Un concepto fundamental para evaluar sus modelos

Tabla de contenido
1. Introducción
2. ¿Qué es una Matriz de Confusión?
3. Matriz de Confusión Métrica
4. Ejemplo de una matriz de 2x2
5. Código Python

Puedes leer más artículos de Data Science en español aquí

Introducción
Cualquiera puede construir un modelo de aprendizaje automático (ML) con unas pocas líneas de código, pero construir un buen modelo de aprendizaje automático es otra historia.

¿Qué quiero decir con un BUEN modelo de aprendizaje automático?

Depende, pero generalmente, evaluarás tu modelo de aprendizaje automático basado en algunas métricas predeterminadas que decidas usar. Cuando se trata de construir modelos de clasificación, lo más probable es que utilices una matriz de confusión y métricas relacionadas para evaluar tu modelo. Las matrices de confusión no sólo son útiles en la evaluación de modelos, sino también en la supervisión y gestión de los mismos.

No te preocupes, ¡no estamos hablando de matrices de álgebra lineal!

En este artículo, cubriremos lo que es una matriz de confusión, algunos términos clave y métricas, un ejemplo de una matriz de 2x2, y todo el código python relacionado!

Dicho esto, ¡vamos a sumergirnos en ello!

¿Qué es una matriz de confusión?

Una matriz de confusión, también conocida como matriz de error, es una tabla resumida que se utiliza para evaluar el rendimiento de un modelo de clasificación. El número de predicciones correctas e incorrectas se resumen con los valores de conteo y se desglosan por cada clase.

A continuación se muestra una imagen de la estructura de una matriz de confusión de 2x2. Para dar un ejemplo, digamos que hubo diez casos en los que un modelo de clasificación predijo "Sí" en los que el valor real fue "Sí". Entonces el número diez iría en la esquina superior izquierda en el cuadrante Verdadero Positivo. Esto nos lleva a algunos términos clave:

Estructura de una Matriz de Confusión 2x2

Positivo (P): La observación es positiva (por ejemplo, es un perro).
Negativo (N): La observación no es positiva (por ejemplo, no es un perro).
Verdadero Positivo (TP): Resultado en el que el modelo predice correctamente la clase positiva.
Verdadero Negativo (TN): Resultado donde el modelo predice correctamente la clase negativa.
Falso Positivo (FP): También llamado error de tipo 1, resultado donde el modelo predice incorrectamente la clase positiva cuando en realidad es negativa.
Falso Negativo (FN): También llamado error de tipo 2, un resultado en el que el modelo predice incorrectamente la clase negativa cuando en realidad es positiva.

Matriz de Confusión Métrica
Ahora que entiendes la estructura general de una matriz de confusión, así como los términos clave asociados, podemos sumergirnos en algunas de las principales métricas que puedes calcular a partir de una matriz de confusión.

Nota: esta lista no es exhaustiva. Si quieres ver todas las métricas que puedes calcular, mira la página de Wikipedia aquí.

Puedes leer más artículos de Data Science en español aquí 

Exactitud
Esto es simplemente igual a la proporción de predicciones que el modelo clasificó correctamente.


Precisión
La precisión también se conoce como valor predictivo positivo y es la proporción de instancias relevantes entre las instancias recuperadas. En otras palabras, responde a la pregunta "¿Qué proporción de identificaciones positivas fue realmente correcta?"


Sensibilidad
La sensibilidad, tasa de aciertos o tasa positiva real (TPR), es la proporción de la cantidad total de instancias pertinentes que se recuperaron realmente. Responde a la pregunta "¿Qué proporción de positivos reales se identificó correctamente?"


Para que realmente se sienta bien, el siguiente diagrama es una gran manera de recordar la diferencia entre la precisión y la sensibilidad (ciertamente me ayudó)!

Especificidad
La especificidad, también conocida como tasa negativa real (TNR), mide la proporción de negativos reales que se identifican correctamente como tales. Es lo opuesto a la sensibilidad.


Puntuación F1
El puntaje F1 es una medida de la precisión de una prueba, es la media armónica de precisión y recuperación. Puede tener una puntuación máxima de 1 (precisión y recuerdo perfectos) y una mínima de 0. En general, es una medida de la precisión y robustez de su modelo.


Ejemplo de Matriz de Confusión 2x2

Si esto todavía no tiene sentido para ti, lo tendrá después de que echemos un vistazo al ejemplo de abajo.

Imagina que creamos un modelo de aprendizaje de máquinas que predice si un paciente tiene cáncer o no. La tabla de la izquierda muestra doce predicciones que el modelo hizo, así como el resultado real de cada paciente. Con nuestros datos emparejados, puedes entonces llenar la matriz de confusión usando la estructura que mostré arriba.

Una vez rellenada, podemos aprender varias cosas sobre nuestro modelo:

  •  Nuestro modelo predijo que 4/12 (rojo + amarillo) pacientes tenían cáncer cuando en realidad había 3/12 (rojo + azul) pacientes con cáncer
  •  Nuestro modelo tiene una precisión de 9/12 o 75% ((rojo + verde)/(total))
  • La sensibilidad de nuestro modelo es igual a 2/(2+1) = 66%


En realidad, usted querría que la sensibilidad de un modelo de detección de cáncer fuera lo más cercano posible al 100%. Es mucho peor si un paciente con cáncer es diagnosticado como libre de cáncer, a diferencia de un paciente libre de cáncer que es diagnosticado con cáncer sólo para darse cuenta más tarde con más pruebas que no lo tiene.

Código Python

A continuación se muestra un resumen del código que se necesita para calcular las métricas de arriba:

# Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
# Accuracy
from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred)
# Recall
from sklearn.metrics import recall_score
recall_score(y_true, y_pred, average=None)
# Precision
from sklearn.metrics import precision_score
precision_score(y_true, y_pred, average=None)
Hay tres formas de calcular la puntuación F1 en Python:

# Method 1: sklearn
from sklearn.metrics import f1_score
f1_score(y_true, y_pred, average=None)
# Method 2: Manual Calculation
F1 = 2 * (precision * recall) / (precision + recall)
# Method 3: Classification report [BONUS]
from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred, target_names=target_names))

Puedes leer más artículos de Data Science en español aquí 

Conclusión

Ahora que sabes lo que es una matriz de confusión así como sus métricas asociadas, puedes evaluar eficazmente tus modelos de clasificación ML. Esto también es esencial para entenderlo incluso después de que termine de desarrollar su modelo ML, ya que estará aprovechando estas métricas en las etapas de supervisión y gestión del modelo del ciclo de vida de aprendizaje de la máquina.
Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!