Disposición de la matriz de confusión

Hay que tener en cuenta que el orden en el que se encuentran los datos en la matriz de confusión devuelta por la función confusion_matrix no es el que utiliza normalmente. El esquema seguido en Scikit-Learn es el siguiente, ordenando las etiquetas de filas y columnas (False y True) por orden alfabético:

Matriz de confusión

Podemos extraer los valores de la siguiente forma:

tn, fp, fn, tp = confusion_matrix(y_real, y_pred).ravel()
tn, fp, fn, tp

(3, 2, 1, 4)

Donde tn = True Negatives, etc.

Otra opción para visualizar la matriz según el esquema más común es girar la transpuesta de la matriz:

c = confusion_matrix(y_real, y_pred)
np.flip(c.T)

Matriz de confusión

La función confusion_matrix acepta el argumento labels que permite especificar el orden en el que se mostrarán los valores involucrados en la predicción. En el ejemplo anterior, estos valores son 0 y 1. De esta forma, podríamos forzar que el valor 1 se mostrase antes que el valor 0 en el resultado devuelto por la función:

confusion_matrix(y_real, y_pred, labels = [1, 0])

array([[4, 1],
       [2, 3]], dtype=int64)

Otra opción interesante es convertir el array devuelto en DataFrame y añadir las etiquetas de filas y columnas:

labels = [0, 1]
c = confusion_matrix(y_real, y_pred, labels = labels)
pd.DataFrame(c, index = labels, columns = labels)

Matriz de confusión con formato de DataFrame