Matriz de confusión en Python

Es una tabla que se utiliza en problemas de clasificación para evaluar dónde se cometieron errores en el modelo.

Las filas representan las clases reales que deberían haber sido los resultados. Mientras que las columnas representan las predicciones que hemos hecho. Usando esta tabla, es fácil ver qué predicciones están equivocadas.

Crear una matriz de confusión

Las matrices de confusión se pueden crear mediante predicciones hechas a partir de una regresión logística.

Por ahora, generaremos valores reales y predichos utilizando NumPy:

import numpy

A continuación, necesitaremos generar los números para los valores «reales» y «predichos».

actual = numpy.random.binomial(1, 0.9, size = 1000)
predicted = numpy.random.binomial(1, 0.9, size = 1000)

Para crear la matriz de confusión, necesitamos importar métricas del módulo sklearn.

from sklearn import metrics

Una vez que se importan las métricas, podemos usar la función de matriz de confusión en nuestros valores reales y previstos.

confusion_matrix = metrics.confusion_matrix(actual, predicted)

Para crear una pantalla visual más interpretable, necesitamos convertir la tabla en una pantalla de matriz de confusión.

cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [False, True])

Visualizar la pantalla requiere que importemos pyplot desde matplotlib.

import matplotlib.pyplot as plt

Finalmente, para mostrar el diagrama, podemos usar las funciones plot() y show() de pyplot.

cm_display.plot()
plt.show()

Vea el ejemplo completo en acción:

Ejemplo


import matplotlib.pyplot as plt
import numpy
from sklearn import metrics

actual = numpy.random.binomial(1,.9,size = 1000)
predicted = numpy.random.binomial(1,.9,size = 1000)

confusion_matrix = metrics.confusion_matrix(actual, predicted)

cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [False, True])

cm_display.plot()
plt.show()

Resultado Explicado

La Matriz de Confusión creada tiene cuatro cuadrantes diferentes:

Negativo verdadero (cuadrante superior izquierdo)
Falso positivo (cuadrante superior derecho)
Falso negativo (cuadrante inferior izquierdo)
Verdadero positivo (cuadrante inferior derecho)
Verdadero significa que los valores se predijeron con precisión, Falso significa que hubo un error o una predicción incorrecta.

Ahora que hemos creado una matriz de confusión, podemos calcular diferentes medidas para cuantificar la calidad del modelo. Primero, echemos un vistazo a la precisión.

Métricas creadas

La matriz nos proporciona muchas métricas útiles que nos ayudan a evaluar nuestro modelo de clasificación.

Las diferentes medidas incluyen: Exactitud, Precisión, Sensibilidad (Recordatorio), Especificidad y la puntuación F, que se explican a continuación.

Precisión

La precisión mide con qué frecuencia el modelo es correcto.

Como calcularlo

(Verdadero positivo + Verdadero negativo) / Predicciones totales

Ejemplo

Accuracy = metrics.accuracy_score(actual, predicted)

Precisión

De los positivos pronosticados, ¿qué porcentaje es realmente positivo?

¿Cómo calcularlo?

Verdadero Positivo / (Verdadero Positivo + Falso Positivo)

La precisión no evalúa los casos negativos predichos correctamente:

Precision = metrics.precision_score(actual, predicted)

Sen

De todos los casos positivos, ¿qué porcentaje se pronostican positivos?

La sensibilidad (a veces denominada recuperación) mide qué tan bueno es el modelo para predecir aspectos positivos.

Esto significa que analiza los verdaderos positivos y los falsos negativos (que son positivos que se han predicho incorrectamente como negativos).

Cómo calcularlo

Verdadero Positivo / (Verdadero Positivo + Falso Negativo)

La sensibilidad es buena para comprender qué tan bien el modelo predice que algo es positivo:

Sensitivity_recall = metrics.recall_score(actual, predicted)

Especificidad

¿Qué tan bien el modelo predice resultados negativos?
La especificidad es similar a la sensibilidad, pero la mira desde la perspectiva de los resultados negativos.

Cómo calcularlo

Specificity = metrics.recall_score(actual, predicted, pos_label=0)

F-Score

F-score es la «media armónica» de precisión y sensibilidad.

Considera casos falsos positivos y falsos negativos y es bueno para conjuntos de datos desequilibrados.

Cómo calcular

2 * ((Precisión * Sensibilidad) / (Precisión + Sensibilidad))

Esta puntuación no tiene en cuenta los valores True Negative:

Ejemplo

F1_score = metrics.f1_score(actual, predicted)

Todos los cálculos en uno:

#metrics
print({"Accuracy":Accuracy,"Precision":Precision,"Sensitivity_recall":Sensitivity_recall,"Specificity":Specificity,"F1_score":F1_score})