ROC-AUC

La evaluación de modelos de clasificación es una etapa fundamental en cualquier proyecto de Machine Learning. Aunque métricas como la exactitud (Accuracy) son ampliamente utilizadas, en muchos escenarios no proporcionan una visión completa del rendimiento del modelo, especialmente cuando las clases están desbalanceadas.

La métrica ROC-AUC es una de las herramientas más utilizadas para evaluar clasificadores binarios porque permite medir la capacidad de un modelo para distinguir correctamente entre clases positivas y negativas independientemente del umbral de clasificación seleccionado.

¿Qué es ROC-AUC?

ROC-AUC es una métrica compuesta por dos elementos:

  • ROC (Receiver Operating Characteristic): una curva que muestra el comportamiento del modelo para distintos umbrales de clasificación.
  • AUC (Area Under the Curve): el área bajo la curva ROC.

La curva ROC representa la relación entre:

  • Tasa de Verdaderos Positivos (True Positive Rate o TPR).
  • Tasa de Falsos Positivos (False Positive Rate o FPR).

Mientras que el AUC resume toda la curva en un único valor numérico. Un valor de AUC cercano a 1 indica una excelente capacidad de discriminación, mientras que un valor cercano a 0.5 indica un comportamiento similar al azar.

¿Por qué se llama ROC?

ROC significa Receiver Operating Characteristic. El término proviene de la teoría de detección de señales desarrollada durante la Segunda Guerra Mundial para evaluar sistemas de radar capaces de distinguir entre señales reales y ruido. Posteriormente fue adoptado en estadística, medicina, minería de datos y Machine Learning.

Conceptos fundamentales

Para comprender ROC-AUC es necesario conocer algunos conceptos básicos de clasificación.

Matriz de confusión

RealPredicciónResultado
PositivoPositivoVerdadero Positivo (TP)
PositivoNegativoFalso Negativo (FN)
NegativoPositivoFalso Positivo (FP)
NegativoNegativoVerdadero Negativo (TN)

A partir de estos valores se calculan las métricas utilizadas en la curva ROC.

Tasa de Verdaderos Positivos (TPR)

También conocida como Recall o Sensibilidad.

$$TPR = \frac{TP}{TP + FN}$$

Indica qué proporción de positivos reales fue correctamente identificada.

Tasa de Falsos Positivos (FPR)

$$FPR = \frac{FP}{FP + TN}$$

Representa la proporción de negativos clasificados incorrectamente como positivos.

¿Cómo funciona la curva ROC?

Muchos clasificadores no generan directamente una clase, sino una probabilidad. Por ejemplo:

ClienteProbabilidad de Compra
A0.95
B0.82
C0.65
D0.40
E0.15

Para convertir estas probabilidades en clases se utiliza un umbral.

Si el umbral es 0.5:

  • Probabilidad ≥ 0.5 → Positivo
  • Probabilidad < 0.5 → Negativo

La curva ROC evalúa múltiples umbrales:

  • 0.1
  • 0.2
  • 0.3
  • 0.4
  • 1.0

Para cada umbral se calculan:

  • TPR
  • FPR

Finalmente se representan gráficamente.

¿Qué es el AUC?

El AUC (Area Under the Curve) mide el área bajo la curva ROC. Su valor está comprendido entre 0 y 1.

AUCInterpretación
1.0Clasificador perfecto
0.9 – 0.99Excelente
0.8 – 0.9Muy bueno
0.7 – 0.8Aceptable
0.6 – 0.7Pobre
0.5Aleatorio
< 0.5Peor que el azar

Un AUC de 0.90 significa que existe aproximadamente un 90% de probabilidad de que el modelo asigne una puntuación mayor a una observación positiva que a una negativa.

Interpretación intuitiva

Supongamos dos pacientes:

  • Paciente enfermo.
  • Paciente sano.

Si seleccionamos ambos al azar:

  • El modelo obtiene un AUC de 0.95.
  • Existe un 95% de probabilidad de que el paciente enfermo reciba una puntuación de riesgo superior al paciente sano.

Por eso ROC-AUC es considerada una medida de capacidad discriminativa.

Ejemplo práctico

Supongamos el siguiente modelo de detección de fraude.

TransacciónClase RealProbabilidad
T1Fraude0.95
T2Fraude0.85
T3Normal0.60
T4Normal0.20

El modelo asigna sistemáticamente probabilidades mayores a los casos de fraude. La curva ROC reflejará esta capacidad de separación y el AUC será elevado.

Beneficios de ROC-AUC

  • Evalúa todos los umbrales posibles.
  • No depende de un umbral específico.
  • Permite comparar clasificadores fácilmente.
  • Funciona bien con probabilidades.
  • Es robusta frente a cambios de umbral.
  • Facilita la selección de modelos.
  • Resume el rendimiento en un único valor.

¿Cuándo utilizar ROC-AUC?

  • Se trabaja con clasificación binaria.
  • El modelo genera probabilidades.
  • Se desea comparar varios clasificadores.
  • El coste de errores aún no está definido.
  • Se busca una evaluación global del modelo.
  • Se realizan procesos de selección de modelos.

Es especialmente útil durante la fase de experimentación.

Ventajas y desventajas

VentajasDesventajas
Evalúa todos los umbrales posiblesNo refleja directamente el coste de los errores
Facilita la comparación entre modelosPuede ser optimista en datasets muy desbalanceados
Independiente del umbralNo indica qué umbral utilizar
Fácil de interpretarPuede ocultar problemas en regiones específicas
Muy utilizada en investigación y producciónNo siempre refleja el rendimiento operativo real

ROC-AUC vs Accuracy

CaracterísticaROC-AUCAccuracy
Considera múltiples umbralesNo
Evalúa capacidad de discriminaciónNo
Adecuada para comparar modelosLimitada
Sensible al umbralNo
Puede utilizar probabilidadesNo

ROC-AUC vs Precision-Recall AUC

CaracterísticaROC-AUCPR-AUC
Utiliza TPR y FPRNo
Utiliza Precision y RecallNo
Adecuada para clases balanceadas
Adecuada para clases muy desbalanceadasMenos recomendableMás recomendable
Muy utilizada en clasificación general

En problemas con fraude, enfermedades raras o detección de anomalías suele preferirse Precision-Recall AUC.

Limitaciones

ROC-AUC no es una métrica perfecta. Entre sus principales limitaciones destacan:

  • No indica el umbral óptimo.
  • Puede resultar engañosa con clases extremadamente desbalanceadas.
  • No refleja costes de negocio.
  • Dos modelos con igual AUC pueden comportarse de forma diferente.
  • No muestra dónde ocurren los errores.
  • Puede ocultar problemas importantes en determinadas regiones de decisión.

Por esta razón suele combinarse con otras métricas.

Aplicaciones en Data Science y Machine Learning

ROC-AUC se utiliza ampliamente en:

  • Detección de fraude financiero.
  • Diagnóstico médico.
  • Clasificación de clientes.
  • Predicción de abandono de clientes (Churn).
  • Sistemas de recomendación.
  • Detección de spam.
  • Ciberseguridad.
  • Scoring crediticio.
  • Mantenimiento predictivo.
  • Clasificación de imágenes.
  • Clasificación de texto.
  • Modelos de riesgo.

Es una de las métricas más utilizadas en competiciones de Machine Learning y entornos empresariales.

Implementación en Python

Crear un conjunto de datos

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=1000,
    n_features=10,
    random_state=42
)

Entrenar un modelo

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42
)

modelo = RandomForestClassifier()

modelo.fit(X_train, y_train)

Obtener probabilidades

y_prob = modelo.predict_proba(X_test)[:, 1]

La segunda columna representa la probabilidad de pertenecer a la clase positiva.

Calcular ROC-AUC

from sklearn.metrics import roc_auc_score

auc = roc_auc_score(y_test, y_prob)

print(f"AUC: {auc:.4f}")
AUC: 0.9421

Construir la curva ROC

from sklearn.metrics import roc_curve

fpr, tpr, thresholds = roc_curve(
    y_test,
    y_prob
)

Visualizar la curva ROC

import matplotlib.pyplot as plt

plt.figure(figsize=(8,6))

plt.plot(fpr, tpr, label=f"AUC = {auc:.3f}")

plt.plot(
    [0, 1],
    [0, 1],
    linestyle='--'
)

plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("Curva ROC")
plt.legend()

plt.show()

Comparar varios modelos

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier

modelos = {
    "Logistic Regression": LogisticRegression(),
    "Random Forest": RandomForestClassifier(),
    "Gradient Boosting": GradientBoostingClassifier()
}

for nombre, modelo in modelos.items():

    modelo.fit(X_train, y_train)

    prob = modelo.predict_proba(X_test)[:,1]

    auc = roc_auc_score(y_test, prob)

    print(nombre, round(auc,4))
}

Esta práctica es muy habitual durante la selección de modelos.

Buenas prácticas

Para utilizar ROC-AUC correctamente se recomienda:

  • Evaluarla junto con Precision, Recall y F1-Score.
  • Analizar la matriz de confusión.
  • Considerar el desbalanceo de clases.
  • Comparar la curva ROC de varios modelos.
  • Revisar el impacto del umbral de clasificación.
  • Utilizar validación cruzada para obtener resultados más robustos.
  • Complementar el análisis con métricas de negocio.

Conclusión

ROC-AUC es una de las métricas más importantes para evaluar modelos de clasificación binaria. Su principal fortaleza es que mide la capacidad de un modelo para diferenciar entre clases positivas y negativas considerando todos los umbrales posibles. Esto la convierte en una herramienta extremadamente útil para comparar clasificadores, seleccionar modelos y evaluar sistemas predictivos de forma global.

Sin embargo, aunque proporciona una excelente medida de discriminación, no debe utilizarse de manera aislada. En proyectos reales es recomendable complementarla con métricas como Precision, Recall, F1-Score y análisis de negocio para obtener una visión completa del rendimiento del modelo y tomar decisiones más informadas.