Comprender 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 Machine Learning en la industria para resolver problemas comerciales complejos. Para seleccionar qu茅 modelo de Machine Learning se debe usar en producci贸n, se elige una m茅trica de selecci贸n sobre la cual se califican los diferentes modelos de Machine Learning.

    Una de las m茅tricas m谩s utilizadas hoy en d铆a es AUC-ROC (脕rea bajo curva – Caracter铆sticas operativas del receptor). Las curvas ROC son bastante f谩ciles de entender y evaluar una vez que se comprende bien la matriz de confusi贸n y los diferentes tipos de errores.

    En este art铆culo, explicar茅 los siguientes temas:

    • Introducci贸n a la matriz de confusi贸n y diferentes estad铆sticas calculadas 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 selecci贸n de modelo y curva ROC
    • Ejemplo de curva ROC con Python

    Introducci贸n a la matriz de confusi贸n

    Para mostrar las etiquetas de clase previstas y reales de los modelos de Machine Learning, el matriz de confusi贸n se utiliza. Tomemos un ejemplo de un problema de clasificaci贸n de clases binarias.

    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 predichos se muestran como filas.

    Definiciones de TP, FP, TN y FN

    Entendamos las terminolog铆as, que tambi茅n usaremos muy a menudo para comprender las curvas ROC:

    • TP = Verdadero Positivo – El modelo predijo la clase positiva correctamente, para ser una clase positiva.
    • FP = Falso positivo: el modelo predijo incorrectamente que la clase negativa era una clase positiva.
    • FN = Falso negativo: el modelo predijo incorrectamente que la clase positiva era la clase negativa.
    • TN = True Negative: el modelo predijo correctamente la clase negativa, que ser铆a la clase negativa.

    Errores tipo 1 y tipo 2

    Hay dos tipos de errores que se pueden identificar aqu铆:

    • Error de tipo 1: el modelo predijo que la instancia ser铆a una clase positiva, pero es incorrecto. 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 hechos / estad铆sticas b谩sicos de la representaci贸n de la matriz de confusi贸n.

    Fuente: https://commons.wikimedia.org/wiki/File:Precisionrecall.svg

    Recordar: De todas las clases positivas, cu谩ntas instancias se identificaron correctamente.

    Recall = TP / (TP + FN)
    

    Precisi贸n: De todas las instancias positivas previstas, cu谩ntas se predijeron correctamente.

    Precision = TP / (TP + FP)
    

    Puntuaci贸n F: A partir de Precision and Recall, F-Measure se calcula y se usa como m茅trica a veces. F – Measure no es m谩s que la media arm贸nica de Precision y Recall.

    F-Score = (2 * Recall * Precision) / (Recall + Precision)
    

    Introducci贸n a AUC – Curva ROC

    La curva AUC-ROC es la m茅trica de selecci贸n del 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 la probabilidad predicha.

    Una curva ROC t铆pica tiene una tasa de falsos positivos (FPR) en el eje X y una tasa de verdaderos positivos (TPR) en el eje Y.

    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 Machine Learning para distinguir las clases dadas. El valor ideal para AUC es 1.

    Diferentes escenarios con selecci贸n de modelo y curva ROC

    Escenario n. 掳 1 (mejor escenario de caso)

    Para cualquier modelo de clasificaci贸n, el mejor escenario es cuando hay una clara distinci贸n entre las dos / todas las clases.

    El gr谩fico anterior muestra la probabilidad de clase predicha para las clases 0 y 1. El umbral es 0,5, lo que significa que si la probabilidad predicha de la clase para una instancia es menor que 0,5, se predice que esa instancia ser谩 una instancia de clase 0. Si la probabilidad de la clase para una instancia es igual o mayor que 0.5, la instancia se clasifica como instancia de clase 1.

    La curva AUC-ROC para este caso es la siguiente.

    Como podemos ver aqu铆, tenemos una clara distinci贸n entre las dos clases como resultado, tenemos el AUC de 1. El 谩rea m谩xima entre la curva ROC y la l铆nea base se logra aqu铆.

    Escenario n. 掳 2 (conjetura aleatoria)

    En el caso de que ambas distribuciones de clases simplemente se imiten entre s铆, el AUC es 0,5. En otras palabras, nuestro modelo tiene una precisi贸n del 50% para las instancias y su clasificaci贸n. El modelo no tiene ninguna capacidad de discriminaci贸n en este caso.

    Podemos ver que no existe una clara discriminaci贸n entre las dos clases.

    Es evidente a partir del diagrama de la curva ROC AUC, 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 n. 掳 3 (peor escenario)

    Si el modelo clasifica err贸neamente las clases por completo, es el peor de los casos.

    Completamente opuesto al mejor escenario (escenario # 1), en este caso, todas las instancias de la clase 1 est谩n mal clasificadas como clase 0 y todas las instancias de la clase 0 est谩n mal clasificadas como clase 1.

    Como resultado, obtenemos que AUC sea 0, que es el peor de los casos.

    Escenario n. 掳 4 (Escenario industrial / normativo)

    En un escenario industrial habitual, los mejores casos nunca se observan. Nunca obtenemos una distinci贸n clara entre las dos clases.

    En este caso, como se observ贸, tenemos algunos solapamientos y eso introduce errores de Tipo 1 y Tipo 2 en la predicci贸n del modelo. En este caso, obtenemos que el AUC est茅 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: Definici贸n de 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: Genere 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 subconjuntos de datos de tren y prueba.

    trainX, testX, trainy, testy = train_test_split(data_X, class_label, test_size=0.3, random_state=1)
    

    Paso 5: ajusta un modelo a los datos del tren.

    model = RandomForestClassifier()
    model.fit(trainX, trainy)
    

    Paso 6: Predecir probabilidades para los datos de prueba.

    probs = model.predict_proba(testX)
    

    Paso 7: Mantenga solo las probabilidades de la clase positiva.

    probs = probs[:, 1]
    

    Paso 8: Calcule la puntuaci贸n AUC.

    auc = roc_auc_score(testy, probs)
    print('AUC: %.2f' % auc)
    

    Salida:

    AUC: 0.95
    

    Paso 9: Obtenga la curva ROC.

    fpr, tpr, thresholds = roc_curve(testy, probs)
    

    Paso 10: Trace la curva ROC usando nuestra funci贸n definida

    plot_roc_curve(fpr, tpr)
    

    Salida:

    Conclusi贸n

    La curva AUC-ROC es una de las m茅tricas m谩s utilizadas para evaluar el rendimiento de los algoritmos de Machine Learning, especialmente en los casos en los que tenemos conjuntos de datos desequilibrados. En este art铆culo, vemos las curvas ROC y sus conceptos asociados en detalle. Finalmente, demostramos c贸mo se pueden trazar curvas ROC usando Python.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *