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
| Real | Predicción | Resultado |
|---|---|---|
| Positivo | Positivo | Verdadero Positivo (TP) |
| Positivo | Negativo | Falso Negativo (FN) |
| Negativo | Positivo | Falso Positivo (FP) |
| Negativo | Negativo | Verdadero 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:
| Cliente | Probabilidad de Compra |
|---|---|
| A | 0.95 |
| B | 0.82 |
| C | 0.65 |
| D | 0.40 |
| E | 0.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.
| AUC | Interpretación |
|---|---|
| 1.0 | Clasificador perfecto |
| 0.9 – 0.99 | Excelente |
| 0.8 – 0.9 | Muy bueno |
| 0.7 – 0.8 | Aceptable |
| 0.6 – 0.7 | Pobre |
| 0.5 | Aleatorio |
| < 0.5 | Peor 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ón | Clase Real | Probabilidad |
|---|---|---|
| T1 | Fraude | 0.95 |
| T2 | Fraude | 0.85 |
| T3 | Normal | 0.60 |
| T4 | Normal | 0.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
| Ventajas | Desventajas |
|---|---|
| Evalúa todos los umbrales posibles | No refleja directamente el coste de los errores |
| Facilita la comparación entre modelos | Puede ser optimista en datasets muy desbalanceados |
| Independiente del umbral | No indica qué umbral utilizar |
| Fácil de interpretar | Puede ocultar problemas en regiones específicas |
| Muy utilizada en investigación y producción | No siempre refleja el rendimiento operativo real |
ROC-AUC vs Accuracy
| Característica | ROC-AUC | Accuracy |
|---|---|---|
| Considera múltiples umbrales | Sí | No |
| Evalúa capacidad de discriminación | Sí | No |
| Adecuada para comparar modelos | Sí | Limitada |
| Sensible al umbral | No | Sí |
| Puede utilizar probabilidades | Sí | No |
ROC-AUC vs Precision-Recall AUC
| Característica | ROC-AUC | PR-AUC |
|---|---|---|
| Utiliza TPR y FPR | Sí | No |
| Utiliza Precision y Recall | No | Sí |
| Adecuada para clases balanceadas | Sí | Sí |
| Adecuada para clases muy desbalanceadas | Menos recomendable | Más recomendable |
| Muy utilizada en clasificación general | Sí | Sí |
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.9421Construir 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.