Entendiendo las curvas ROC con Python

En la era actual en la que la Ciencia de datos / IA está en auge, es importante comprender cómo se utiliza el Aprendizaje automático en la industria para resolver problemas de negocios complejos. Para seleccionar qué modelo de aprendizaje automático se debe utilizar en la producción, se elige una métrica de selección según la cual se califican los diferentes modelos de aprendizaje automático.
Una de las métricas más utilizadas en la actualidad es la curva AUC-ROC (Área bajo la curva - Características de operación del receptor). Las curvas ROC son bastante fáciles de entender y evaluar una vez que hay una buena comprensión de la matriz de confusión y diferentes tipos de errores.
En este artículo, explicaré los siguientes temas:
  • Introducción a la matriz de confusión y estadística diferente calculada en ella.
    • Definiciones de TP, FN, TN, FP
    • Errores tipo 1 y tipo 2
    • Estadísticas calculadas a partir de Recall, Precision, F-Score
  • Introducción a la curva AUC ROC
  • Diferentes escenarios con curva ROC y selección de modelo.
  • Ejemplo de Curva ROC con Python

Introducción a la matriz de confusión

Para mostrar las etiquetas de clase pronosticadas y reales de los modelos de Machine Learning, se utiliza la matriz de confusión . Tomemos un ejemplo de un problema de clasificación de clase binaria.
Matriz de confusión
La clase etiquetada como 1 es la clase positiva en nuestro ejemplo. La clase etiquetada como 0 es la clase negativa aquí. Como podemos ver, los valores reales positivos y negativos se representan como columnas, mientras que los valores pronosticados se muestran como las filas.

Definiciones de TP, FP, TN y FN

Entendamos las terminologías, que vamos a utilizar muy a menudo en la comprensión de las curvas ROC también:
  • TP = Verdadero positivo: el modelo predijo la clase positiva correctamente, para ser una clase positiva.
  • FP = Falso positivo: el modelo predijo incorrectamente la clase negativa, para ser una clase positiva.
  • FN = Falso Negativo: el modelo predijo la clase positiva incorrectamente, como la clase negativa.
  • TN = Verdadero negativo: el modelo predijo la clase negativa correctamente, como la clase negativa.

Errores tipo 1 y tipo 2

Hay dos tipos de errores que pueden ser identificados aquí:
  • Error de tipo 1: el modelo predijo que la instancia sería una clase positiva, pero es incorrecta. Esto es Falso Positivo (FP).
  • Error de tipo 2: el modelo predijo que la instancia sería la clase Negativa, pero es incorrecta. Esto es Falso Negativo (FN).

Estadísticas calculadas a partir de la matriz de confusión

Para evaluar el modelo, se calculan algunos datos / estadísticas básicos de la representación de la matriz de confusión.
Recuerde : De todas las clases positivas, cuántas instancias se identificaron correctamente.
Recall = TP / (TP + FN)  
Precisión : De todos los casos positivos predichos, cuántos se predijeron correctamente.
Precision = TP / (TP + FP)  
Puntaje F : De Precisión y Recuperación, la Medida F se calcula y se usa como métrica a veces. F - La medida no es más que la media armónica de Precisión y Recuperación.
F-Score = (2 * Recall * Precision) / (Recall + Precision)  

Introducción a la curva AUC - ROC

La curva AUC-ROC es la métrica de selección de modelo para el problema de clasificación de dos clases múltiples. ROC es una curva de probabilidad para diferentes clases. ROC nos dice qué tan bueno es el modelo para distinguir las clases dadas, en términos de probabilidad predicha.
Una curva ROC típica tiene una tasa positiva falsa (FPR) en el eje X y una tasa positiva verdadera (TPR) en el eje Y.
ROC
El área cubierta por la curva es el área entre la línea naranja (ROC) y el eje. Esta área cubierta es AUC. Cuanto mayor sea el área cubierta, mejores serán los modelos de aprendizaje automático para distinguir las clases dadas. El valor ideal para AUC es 1.

Diferentes escenarios con curva ROC y selección de modelo

Escenario # 1 (Escenario de mejor caso)
Para cualquier modelo de clasificación, el mejor escenario es cuando hay una clara distinción entre las dos / todas las clases.
S1
El gráfico anterior muestra la probabilidad de clase pronosticada para ambas clases 0 y 1. El umbral es 0.5, lo que significa que, si la probabilidad pronosticada de la clase para una instancia es menor que 0.5, se predice que esa instancia será una instancia de la clase 0. Si la probabilidad de la clase para una instancia es igual o mayor que 0.5, la instancia se clasifica como la instancia de la clase 1.
La curva AUC-ROC para este caso es la siguiente.
S1 ROC
Como podemos ver aquí, como resultado tenemos una clara distinción entre las dos clases, tenemos el AUC de 1. El área máxima entre la curva ROC y la línea de base se logra aquí.
Escenario # 2 (Adivinación aleatoria)
En el caso de que ambas distribuciones de clase simplemente se imiten, AUC es 0.5. En otras palabras, nuestro modelo es 50% exacto para las instancias y su clasificación. El modelo no tiene ninguna capacidad de discriminación en este caso.
S2 ROC
Podemos ver que no hay una clara discriminación entre las dos clases.
S2
Es evidente a partir del diagrama de la curva AUC ROC, que el área entre ROC y el eje es 0.5. Este todavía no es el peor modelo, pero hace una suposición aleatoria, como lo haría un humano.
Escenario # 3 (peor escenario)
Si el modelo clasifica erróneamente las clases, es el peor de los casos.
S3
Completamente opuesto al mejor escenario de caso (escenario # 1), en este caso, todas las instancias de la clase 1 se clasifican erróneamente como clase 0 y todas las instancias de la clase 0 se clasifican erróneamente como clase 1.
S3 ROC
Como resultado, conseguimos que las AUC sean 0, lo que es el peor escenario.
Escenario # 4 (Escenario de industria / norma)
En un escenario industrial habitual, nunca se observan los mejores casos. Nunca obtenemos una distinción clara entre las dos clases.
S4
En este caso, como se observó, tenemos algunas coincidencias y eso introduce errores de Tipo 1 y Tipo 2 en la predicción del modelo. En este caso, conseguimos que las AUC estén en algún lugar entre 0.5 y 1.

Ejemplo con Python

¡Veamos un ejemplo de curvas ROC con algunos datos y un clasificador en acción!
Paso 1: Importar bibliotecas
import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt  
import seaborn as sns  
# roc curve and auc score
from sklearn.datasets import make_classification  
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.ensemble import RandomForestClassifier  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import roc_curve  
from sklearn.metrics import roc_auc_score  
Paso 2: Definir una función de python para trazar las curvas ROC.
def plot_roc_curve(fpr, tpr):  
    plt.plot(fpr, tpr, color='orange', label='ROC')
    plt.plot([0, 1], [0, 1], color='darkblue', linestyle='--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver Operating Characteristic (ROC) Curve')
    plt.legend()
    plt.show()
Paso 3: Generar datos de muestra.
data_X, class_label = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1)  
Paso 4: Divida los datos en subgrupos de datos de prueba y tren.
trainX, testX, trainy, testy = train_test_split(data_X, class_label, test_size=0.3, random_state=1)  
Paso 5: Ajustar un modelo en los datos del tren.
model = RandomForestClassifier()  
model.fit(trainX, trainy)  
Paso 6: Predecir las probabilidades para los datos de prueba.
probs = model.predict_proba(testX)  
Paso 7: Mantenga las probabilidades de la clase positiva solamente.
probs = probs[:, 1]  
Paso 8: Calcular la puntuación AUC.
auc = roc_auc_score(testy, probs)  
print('AUC: %.2f' % auc)  
Salida:
AUC: 0.95  
Paso 9: Obtener la curva ROC.
fpr, tpr, thresholds = roc_curve(testy, probs)  
Paso 10: Dibuje la curva ROC utilizando nuestra función definida
plot_roc_curve(fpr, tpr)  
Salida:
Salida

Conclusión

La curva AUC-ROC es una de las métricas más utilizadas para evaluar el rendimiento de los algoritmos de aprendizaje automático, especialmente en los casos en que tenemos conjuntos de datos desequilibrados. En este artículo vemos en detalle las curvas ROC y sus conceptos asociados. Finalmente, demostramos cómo se pueden trazar las curvas ROC utilizando Python.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.