guía de la curva roc auc

La guía definitiva de curvas ROC y AUC

Las curvas ROC son una de las métricas de evaluación más comunes para comprobar el rendimiento de un modelo de clasificación. Esta guía lo ayudará a comprender verdaderamente cómo funcionan juntas las curvas ROC y AUC.

Las curvas ROC, o curvas características operativas del receptor, son una de las métricas de evaluación más comunes para comprobar el rendimiento de un modelo de clasificación. Desafortunadamente, muchos científicos de datos a menudo terminan viendo las curvas ROC y luego citan un valor AUC (abreviatura de área bajo la curva ROC) sin comprender realmente qué significa el valor AUC y cómo pueden usarlo de manera más efectiva.

Otras veces, no entienden los diversos problemas que resuelven las curvas ROC y las múltiples propiedades de AUC como la invariancia de umbral y la invariancia de escala, lo que necesariamente significa que la métrica de AUC no depende del umbral elegido o de la escala de probabilidades. Estas propiedades hacen que AUC sea bastante valioso para evaluar clasificadores binarios, ya que nos proporciona una forma de compararlos sin preocuparnos por el umbral de clasificación. Por eso es importante que los científicos de datos tengan una comprensión más completa de las curvas ROC y AUC.


Curvas ROC y AUC

Una curva ROC (abreviatura de característica operativa del receptor) mide el rendimiento de un modelo de clasificación trazando la tasa de verdaderos positivos frente a los falsos positivos. AUC (abreviatura de área bajo la curva ROC) es la probabilidad de que un clasificador clasifique una instancia positiva elegida al azar más alta que una negativa elegida al azar.

¿Qué necesidades satisfacen las curvas ROC/AUC?

Entonces, la primera pregunta que nos viene a la mente antes de que comencemos a aprender sobre las curvas ROC y AUC es ¿por qué no usar una métrica bastante simple como la precisión para una tarea de clasificación binaria? Después de todo, la precisión es bastante fácil de entender, ya que solo calcula el porcentaje de predicciones correctas de un modelo.

La respuesta es que la precisión no captura toda la esencia de un clasificador probabilístico, es decir, no es ni una métrica invariante de umbral ni una métrica invariante de escala . ¿Qué quiero decir con eso? Mejor explicar usando algunos ejemplos.

1. ¿Por qué la precisión no es invariante al umbral?

Suponiendo un umbral de 0,5 para un clasificador de regresión logística, ¿cuál cree que es la precisión de este clasificador?

roc-curva-guia

Si dijiste 50 por ciento, felicidades. Clasificaríamos erróneamente los dos ceros como unos. Este resultado no es tan bueno. Pero, ¿nuestro clasificador es realmente tan malo? Basado en la precisión como métrica de evaluación, parece que lo es. Pero, ¿y si cambiamos el umbral del mismo ejemplo a 0,75? Ahora, nuestro clasificador se vuelve 100 por ciento exacto. Esto debería llevarnos a preguntarnos cómo podemos llegar a una métrica de evaluación que no dependa del umbral. Es decir, queremos una métrica invariable al umbral.

2. ¿Por qué la precisión no es invariante en la escala?

Ahora, hagamos el mismo ejercicio nuevamente, pero esta vez nuestro clasificador predice diferentes probabilidades pero en el mismo orden de clasificación . Esto significa que los valores de probabilidad cambian, pero el orden sigue siendo el mismo. Entonces, en el Clasificador B, el rango de predicciones sigue siendo el mismo, mientras que el Clasificador C predice en una escala completamente diferente. Entonces, ¿cuál de los siguientes es el mejor?

roc-curva-guia

En todos estos casos, podemos ver que cada clasificador es básicamente el mismo. Es decir, si tenemos un umbral de 0,75 para el Clasificador A, 0,7 para el Clasificador B y 68,5 para el Clasificador C, tenemos un 100 por ciento de precisión en todos ellos.

La propiedad de tener el mismo valor para una métrica de evaluación cuando el orden de clasificación sigue siendo el mismo se denomina propiedad de escala invariable . Esta propiedad realmente puede ayudarnos en los casos en que un clasificador predice un puntaje en lugar de una probabilidad, lo que nos permite comparar dos clasificadores diferentes que predicen valores en una escala diferente.

Entonces, finalmente, queremos una métrica de evaluación que satisfaga las siguientes dos condiciones:

  • Es invariable al umbral, es decir, el valor de la métrica no depende de un umbral elegido.
     
  • Es invariable en escala, es decir, mide qué tan bien se clasifican las predicciones en lugar de sus valores absolutos.

La excelente noticia es que AUC cumple con las dos condiciones anteriores. Sin embargo, antes de que podamos ver cómo se calcula el AUC, comprendamos las curvas ROC con más detalle.

Curvas de la República de China

Un hecho histórico divertido sobre las curvas ROC es que se usaron por primera vez durante la Segunda Guerra Mundial para el análisis de señales de radar. Después de los ataques a Pearl Harbor, el ejército de los Estados Unidos quería detectar aviones japoneses usando sus señales de radar. Las curvas ROC fueron particularmente buenas para esta tarea, ya que permitieron a los operadores elegir umbrales para discriminar ejemplos positivos versus negativos.

Pero, ¿cómo hacemos estas curvas nosotros mismos? Para comprender esto, primero debemos comprender la tasa de verdaderos positivos (TPR) y la tasa de falsos positivos (FPR). Entonces, digamos que tenemos la siguiente matriz de confusión de muestra para un modelo con un umbral de probabilidad particular:

roc-curva-guia

Para explicar TPR y FPR, suelo dar el ejemplo de un sistema de justicia. Naturalmente, cualquier sistema de justicia solo quiere castigar a las personas culpables de delitos y no quiere acusar a una persona inocente. Ahora digamos que el modelo anterior es un sistema de justicia que evalúa a cada ciudadano y predice un cero (inocente) o un uno (culpable).

En este caso, la TPR es la proporción de delincuentes culpables que nuestro modelo pudo capturar. Así, el numerador es criminales culpables capturados, y el denominador es criminales totales. Esta relación también se conoce como recuerdo o sensibilidad.

TPR (tasa de verdaderos positivos)/sensibilidad/recuperación  = TP/(TP+FN)

El FPR es la proporción de inocentes que predijimos incorrectamente como criminales (falsos positivos) dividida por el número total de ciudadanos inocentes reales. Por lo tanto, el numerador son los inocentes capturados y el denominador los inocentes totales.

FPR (tasa de falsos positivos)  = FP/(TN+FP)

Por lo general, querríamos un TPR alto (porque queremos capturar a todos los delincuentes) y un FPR bajo (porque no queremos capturar a personas inocentes).

Entonces, ¿cómo trazamos curvas ROC usando TPR y FPR? Trazamos la tasa de falsos positivos (FPR) en el eje X frente a la tasa de verdaderos positivos (TPR) en el eje Y usando diferentes valores de umbral. La curva resultante cuando unimos estos puntos se llama Curva ROC.

Veamos un ejemplo de código simple aquí para entender cómo hacer esto en Python. A continuación, solo creamos un pequeño conjunto de datos de clasificación de muestra y ajustamos un modelo de regresión logística a los datos. También obtenemos los valores de probabilidad del clasificador. 

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
import plotly.express as px
import pandas as pd

# Random Classification dataset
X, y = make_classification(n_samples=1000, n_classes=2, random_state=1)

model = LogisticRegression()
model.fit(X, y)

# predict probabilities
preds = model.predict_proba(X)[:,1]

Ahora queremos evaluar qué tan bueno es nuestro modelo usando curvas ROC. Para hacer esto, necesitamos encontrar FPR y TPR para varios valores de umbral. Podemos hacer esto con bastante facilidad usando la función roc_curve de sklearn.metrics, que nos proporciona FPR y TPR para varios valores de umbral, como se muestra a continuación:

fpr, tpr, thresh = roc_curve(y, preds)

roc_df = pd.DataFrame(zip(fpr, tpr, thresh),columns = ["FPR","TPR","Threshold"])
roc-curva-guia

Ahora todo lo que queda es trazar la curva usando los datos anteriores. Podemos hacer esto usando cualquier biblioteca de gráficos, pero prefiero plotly.express ya que es bastante fácil de usar e incluso le permite usar construcciones plotly sobre figuras plotly express. Como puede ver en la siguiente curva, trazamos FPR vs TPR para varios valores de umbral.

roc-curva-guia

Cómo usar la curva ROC

En general, podemos usar curvas ROC para decidir un valor de umbral. La elección del valor umbral también dependerá de cómo se pretenda utilizar el clasificador. Entonces, si la curva anterior fuera para una aplicación de predicción de cáncer, desea capturar la cantidad máxima de positivos (es decir, tener un TPR alto) y puede elegir un valor de umbral bajo como 0.16 incluso cuando el FPR es bastante alto aquí. Esto se debe a que realmente no desea predecir que «no tendrá cáncer» para una persona que en realidad tiene cáncer. En este ejemplo, el costo de un falso negativo es bastante alto. Está bien incluso si una persona que no tiene cáncer da positivo porque el costo de un falso positivo es más bajo que el de un falso negativo. Esto es realmente lo que hacen muchos médicos y hospitales para pruebas tan vitales y también por qué muchos médicos hacen la misma prueba por segunda vez si una persona da positivo. (¿Puedes pensar por qué hacerlo ayuda? Sugerencia: Regla de Bayes).

De lo contrario, en un caso como el clasificador penal del ejemplo anterior, no queremos un FPR alto ya que uno de los principios del sistema de justicia es que no queremos capturar a personas inocentes. Entonces, en este caso, podríamos elegir nuestro umbral como 0.82, lo que nos da un buen recuerdo o TPR de 0.6. Es decir, podemos capturar al 60 por ciento de los delincuentes.

¿Qué es AUC?

El AUC es el área bajo la curva ROC. Esta área siempre se representa como un valor entre 0 y 1 (así como TPR y FPR pueden variar de 0 a 1), y esencialmente queremos maximizar esta área para que podamos tener el TPR más alto y el FPR más bajo para algún umbral.

Scikit también proporciona una función de utilidad que nos permite obtener AUC si tenemos predicciones y valores reales de y usando roc_auc_score(y, preds) .

También se puede demostrar matemáticamente que AUC es igual a la probabilidad de que un clasificador clasifique una instancia positiva elegida al azar más alta que una negativa elegida al azar. Por lo tanto, un AUC de 0,5 significa que la probabilidad de que una instancia positiva tenga una clasificación más alta que una instancia negativa es de 0,5 y, por lo tanto, aleatoria. Un clasificador perfecto siempre clasificaría una instancia positiva por encima de una negativa y tendría un AUC de 1.

Entonces, ¿el AUC es invariable en el umbral y en la escala?

Sí, el AUC no varía con respecto al umbral, ya que no tenemos que establecer un umbral para calcular el AUC.

Para comprobar la invariancia de la escala , esencialmente haré un experimento en el que multiplico nuestras predicciones por un factor aleatorio (escala) y también expongo las predicciones para comprobar si el AUC cambia si las predicciones cambian aunque su orden de clasificación no cambie. Como el AUC no varía en escala, esperaría la misma curva ROC y la misma métrica del AUC. A continuación, puede ver la escala a la izquierda y el orden de clasificación exponencial a la derecha.

roc-curva-guia

Y eso es de hecho lo que obtuve. Solo cambia el umbral a medida que cambia la escala. La forma de la curva, así como el AUC, permanece exactamente igual.

Conclusión

Un paso importante al crear cualquier canalización de aprendizaje automático es evaluar diferentes modelos entre sí. Elegir la métrica de evaluación incorrecta o no comprender lo que realmente significa su métrica podría causar estragos en todo su sistema. Espero que, con esta publicación, haya podido aclarar algunas confusiones que podría haber tenido con las curvas ROC y AUC.

Si desea obtener más información sobre cómo estructurar un proyecto de aprendizaje automático y las mejores prácticas para hacerlo, le recomendaría este excelente tercer curso llamado «Estructuración de proyectos de aprendizaje automático» en la Especialización de aprendizaje profundo de Coursera . Compruébalo. Aborda las trampas y muchas ideas básicas para mejorar sus modelos.

Más en ciencia de datos: Los 10 mejores algoritmos de aprendizaje automático que todo principiante debe conocer