Voy a empezar este post con el típico chiste malo de “Esa matriz de confusión si es bien confusa” jajaja.

Ahora si después de la risa que debieron tener por mas de 10 minutos después de ese chiste tan bueno (sarcasmo) empecemos. 

Este post quiero que sea lo más fácil de entender, ya que es un tema un poco confuso (matriz de confusión) al principio. Así que lo vamos a aprender con gatos y perros 

Matriz de confusión en Machine Learning explicado paso a paso. tan fácil de entender que hasta tu abuelita la entendería.

Vamos a dividir este post en varios puntos para que sea más fácil de entender y encontrar la información 

  1. Que es la matriz de confusión 
  2. Entender el verdadero positivo, el verdadero negativo, el falso positivo y el falso negativo en una matriz de confusión
  3. Métricas de la matriz de confusión, para qué sirven 
  4. Ejemplo sencillo para que sea más fácil de entender
  5. ¿Por qué necesitamos una matriz de confusión?
  6. Código en python
  7. Código scikit — learn
  8. Código completito 
  9. Ejemplo multiclase

1. Que es la matriz de confusión

La matriz de confusión es un método de evaluación de rendimiento de un modelo de clasificación (a veces se usa en regresión)

La matriz compara los valores reales con los predichos por el modelo de aprendizaje. Esto nos ayuda a ver que tan bien está funcionando nuestro modelo

Así se ve de forma general

La matriz tal y como la vemos está compuesta de

  • La variable de destino tiene dos valores: positivo o negativo
  • Las columnas representan los valores reales de la variable objetivo.
  • Las filas representan los valores predichos de la variable objetivo.

Pero ¿qué es eso de TP, FP, FN y TN ? Vamos a aprenderlo. 

2. Entendiendo el verdadero positivo, el verdadero negativo, el falso positivo y el falso negativo en una matriz de confusión

Verdadero positivo (TP)

  • El valor predicho coincide con el valor real
  • El valor real fue positivo y el modelo predijo un valor positivo

Verdadero negativo (TN)

  • El valor predicho coincide con el valor real
  • El valor real fue negativo y el modelo predijo un valor negativo

Falso positivo (FP): error de tipo 1

  • El valor predicho fue predicho falsamente
  • El valor real fue negativo pero el modelo predijo un valor positivo
  • También conocido como error tipo 1

Falso negativo (FN): error de tipo 2

  • El valor predicho fue predicho falsamente
  • El valor real fue positivo pero el modelo predijo un valor negativo
  • También conocido como error tipo 2

En pocas palabras se explica e interpreta de esta manera: 

¿Qué quiere decir esto en el ejemplo?

Carita feliz, para buena predicción 😄

Carita triste, para mala predicción ☹️

  • Verdadero Positivo (VP) : El modelo dijo que era un gato y efectivamente era un gato 😄
  • Falso Positivo (FP): Predijo que era un gato cuando en realidad era un perro ☹️
  • Falso Negativo (FN) Predijo que no era un gato cuando en realidad si lo era ☹️
  • Verdadero Negativo (VN): el modelo dijo que no era un gato y efectivamente no lo era 😄

Entendido. Sigamos 

3. Métricas de la matriz de confusión ¿ Para que sirven? 

Básicamente las métricas nos sirven para evaluar mejor la matriz. Y minimizar los falsos negativos vs los falsos positivos y aplicaremos cada una dependiendo del caso 

Te resumo todas las métricas aquí

  • Recall
  • Presición 
  • Accuracy
  • Medida F

Vamos a hacer todo esto en un ejemplo sencillo para que sea más fácil de entender 

Tenemos los siguientes valores que nos dan como resultado la siguiente matriz de confusión

Ahora vamos a empezar a hallar las métricas 

Que dicen ustedes, fue un buen modelo? 

5. ¿Por qué necesitamos una matriz de confusión?

Vamos a explicar esto con el ejemplo de los gatos. 

De forma simple queremos saber si un modelo logra predecir si el animal que le estoy mostrando es un gato o un perro ( Los dos valores para nuestra variable objetivo serían: Gato y No Gato

Ahora, debe preguntarse: ¿Por qué necesitamos una matriz de confusión cuando tenemos simplemente la precisión? Bueno, veamos dónde falla la precisión.

Digamos que tenemos los siguientes datos y hallamos la presión

  • TP: 30
  • TN : 930
  • FP : 30 
  • FN: 10

Un 96% es muy muy buen resultado. 

Pero qué pasaría si esto no fueran datos de perros o gatos, si no de personas enfermas o no enfermas de coronavirus, tendríamos una idea equivocada del resultado. 

Nuestro modelo dice “Puedo predecir personas enfermas el 96% del tiempo”. Sin embargo, está haciendo lo contrario. ¡Está prediciendo las personas que no se enfermará con un 96% de precisión mientras los enfermos propagan el virus!

¿Cree que esta es una métrica correcta para nuestro modelo dada la gravedad del problema? ¿No deberíamos medir cuántos casos positivos podemos predecir correctamente para detener la propagación del virus ? O tal vez, de los casos predichos correctamente, ¿cuántos son casos positivos para verificar la confiabilidad de nuestro modelo?

Aquí es donde nos encontramos con los conceptos de:

  • Recall
  • Presición
  • Accuracy
  • Medida F

En el ejemplo:

  • Precisión: La precisión nos dice cuántos de los casos predichos correctamente resultaron realmente positivos.
  • Recall: nos dice cuántos de los casos positivos reales pudimos predecir correctamente con nuestro modelo.

El 50% de los casos predichos correctamente resultaron ser casos positivos. Mientras que nuestro modelo predijo con éxito el 75% de los positivos. Ves la diferencia?

La precisión es una métrica útil en los casos en los que los falsos positivos son una preocupación mayor que los falsos negativos.

El recall es una métrica útil en los casos en que el falso negativo triunfa sobre el falso positivo.

Pero habrá casos en los que no haya una distinción clara entre si la precisión es más importante o el recall. ¿Qué debemos hacer en esos casos? ¡Los combinamos!

Alli entra la puntación f1

6. Ahora vamos a ver todo esto en código

Código en python

Asi se veria 

7. Código scikit — learn

Asi se veria 

8. Código 

“ matriz de confusión en sklearnde sklearn . 
importación de métricas
confusion_matrix de sklearn . metrics import class_report 
# valores actuales
actual = [ 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 ]
# valores predichos
predicho = [ 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 ] 
# matriz de confusión
matrix = confusion_matrix ( real , predicho , etiquetas = [ 1 , 0 ])print ( ‘Matriz de confusión: \ n ‘ , matriz ) 
# orden de valores de resultado en sklearn
tp , fn , fp , tn = confusion_matrix ( real , predicho , etiquetas = [ 1 , 0 ]). remodelar ( — 1 )print ( ‘Valores de resultado: \ n ‘ , tp , fn , fp , tn ) 
# informe de clasificación para precisión, recuperación de puntuación f1 y exactitud
matriz = informe_clasificación ( real , previsto , etiquetas = [ 1 , 0 ])
print ( ‘Informe de clasificación: \ n ‘ , matriz )”

Ejemplo multiclase

Encontré este ejemplo de clasificación de clases múltiples. Se los comparto 

Dibujemos una matriz de confusión para un problema multiclase donde tenemos que predecir si una persona ama Facebook, Instagram o Snapchat. La matriz de confusión sería una matriz de 3 x 3 como esta:

El verdadero positivo, verdadero negativo, falso positivo y falso negativo de cada clase se calcularía sumando los valores de celda de la siguiente manera:

Y listo!!! Hasta aqui llego este post. Matriz de confusión en Machine Learning explicado paso a paso. tan fácil de entender que hasta tu abuelita la entendería. Al principio me costaba mucho interpretar las matrices, pero ahora recuerdo los perros y los gatos y todo me es mucho más fácil. Mi mejor consejo, practiquen, anoten en hojas, hagan primero las cosas a manito y después a código, así será todo mucho más fácil 

Nos leemossss 💜