- Evaluación y Comparación de Modelos de Clasificación Binaria
Evaluación y Comparación de Modelos de Clasificación Binaria
Odisea Algorítmica — Una vez que construimos modelos de clasificación binaria, medir su verdadero rendimiento es una tarea más sutil que solo la exactitud (accuracy). En esta lección exploramos las métricas fundamentales para evaluar clasificadores, especialmente en contextos de clases desbalanceadas —como diagnósticos médicos con enfermedades raras— y presentamos la curva ROC como herramienta visual y analítica. Finalmente, comparamos la regresión lineal y la regresión logística, preparando el terreno para modelos más complejos como árboles de decisión y SVM.
Matriz de confusión: el lienzo de la evaluación
La matriz de confusión es el punto de partida para cualquier análisis riguroso. Para un problema binario (positivo/negativo), cruzamos las predicciones del modelo con los valores reales. De esta tabla se derivan las métricas esenciales:
| Real Positivo | Real Negativo | |
|---|---|---|
| Predicho Positivo | Verdadero Positivo (TP) | Falso Positivo (FP) (Error tipo I) |
| Predicho Negativo | Falso Negativo (FN) (Error tipo II) |
Verdadero Negativo (TN) |
Exactitud = (TP + TN) / (TP + TN + FP + FN).
Problema: si la clase positiva es rara (ej. 1% de los casos), un modelo que siempre prediga negativo tendrá un 99% de accuracy, pero será inútil. Por eso necesitamos más herramientas.
Precisión, Recall, Especificidad y F1-score
Estas métricas revelan diferentes facetas del comportamiento del modelo. A continuación se definen con su interpretación en dominios desbalanceados.
- Precisión (Precision): TP / (TP + FP). De todas las predicciones positivas que hizo el modelo, ¿cuántas eran realmente positivas? Es crítica cuando el costo de un falso positivo es alto (ej. diagnósticos incorrectos que llevan a tratamientos innecesarios).
- Recall (Sensibilidad / TPR): TP / (TP + FN). De todos los casos reales positivos, ¿cuántos detectó el modelo? Es vital cuando es peor no detectar un positivo (ej. cáncer, fraude).
- Especificidad (Specificity / TNR): TN / (TN + FP). De todos los reales negativos, ¿cuántos identificó correctamente? Mide la capacidad de evitar falsas alarmas.
- F1-score: media armónica de precisión y recall: 2 × (Precision × Recall) / (Precision + Recall). Útil cuando buscamos un balance entre ambas.
En un test de detección de una enfermedad rara (1% positivos), un modelo con alta precisión pero recall bajo pasará por alto muchos casos reales. El F1-score ayuda a equilibrar, pero siempre debe contextualizarse según el dominio. No existe una métrica universal.
Curva ROC (Receiver Operating Characteristic) y AUC
La curva ROC representa gráficamente la tasa de verdaderos positivos (TPR = recall) frente a la tasa de falsos positivos (FPR = 1 − especificidad) para distintos umbrales de decisión. Cada punto de la curva corresponde a un umbral diferente. Un clasificador perfecto se acerca a la esquina superior izquierda (TPR=1, FPR=0).
Área bajo la curva (AUC-ROC): valor entre 0.5 (clasificador aleatorio) y 1 (perfecto). Mide la capacidad discriminativa del modelo, independientemente del umbral. En problemas desbalanceados, el AUC es más robusto que la exactitud, aunque no debe ser el único indicador cuando los costos de error son asimétricos.
- AUC = 0.5: el modelo no distingue entre clases (predice al azar).
- 0.7 ≤ AUC < 0.8: discriminación aceptable (dependiendo del dominio).
- 0.8 ≤ AUC < 0.9: buena capacidad discriminativa.
- AUC ≥ 0.9: excelente, pero hay que verificar sobreajuste.
nota La curva ROC es invariante ante el desbalance de clases si la proporción se mantiene en test, pero no refleja el rendimiento en términos de precisión si la clase positiva es muy rara. Se recomienda complementar con curvas de precisión-recall (PR).
Comparativa: Regresión lineal y logística
Aunque ambas pertenecen a la familia de modelos lineales, sus aplicaciones en clasificación binaria son muy distintas. Resumimos sus fortalezas y limitaciones.
| Característica | Regresión lineal | Regresión logística |
|---|---|---|
| Uso en clasificación | No recomendada (predice valores continuos, sin límite). Puede forzarse con un umbral, pero es frágil. | Diseñada específicamente para probabilidades de clase (salida entre 0 y 1). |
| Interpretabilidad | Alta: coeficientes indican cambio en la variable respuesta por unidad. | Alta: los odds ratios (exp(β)) son intuitivos. Coeficientes en escala logit. |
| Linealidad | Asume relación lineal entre predictores y respuesta. | Asume linealidad en los log-odds (frontera de decisión lineal). |
| Sensibilidad a outliers | Muy sensible (mínimos cuadrados). | Relativamente robusta (función sigmoide acota el impacto). |
| Suposiciones | Normalidad, homocedasticidad, independencia. | No requiere normalidad de predictores. Independencia sí. |
Veredicto rápido: para clasificación binaria, siempre empezar con regresión logística (interpretable, bien calibrada, y eficiente). La regresión lineal se usa en problemas de regresión numérica. Sin embargo, ambos modelos son lineales; si los datos presentan interacciones o no linealidades complejas, en la siguiente etapa del curso exploraremos árboles de decisión y SVM.
Más allá de la linealidad: árboles, SVM y ensembles
Las métricas que hemos visto (matriz de confusión, precisión, recall, F1, ROC-AUC) son la base para evaluar cualquier clasificador. Cuando la frontera de decisión no es lineal, modelos como árboles de decisión, Random Forest o SVM con kernels pueden capturar patrones más complejos. La lección siguiente aborda estos modelos, pero siempre evaluándolos con las mismas herramientas:
- Matriz de confusión y métricas derivadas (especialmente F1 en clases desbalanceadas).
- Curva ROC y AUC para comparar la capacidad discriminativa global.
- Validación cruzada y curvas de aprendizaje para evitar sobreajuste.
Dominar la evaluación es tan importante como construir el modelo. Sin métricas sólidas, cualquier comparación es engañosa.
Ejemplo de código: métricas con Python (scikit-learn)
from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score, roc_curve
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 0, 1, 1]
print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))
# probabilidades para AUC
y_prob = [0.9, 0.2, 0.8, 0.4, 0.3, 0.85, 0.1, 0.15, 0.95, 0.6]
auc = roc_auc_score(y_true, y_prob)
print(f"AUC-ROC: {auc:.3f}")
En este pequeño ejemplo, la matriz de confusión y el reporte ya revelan desequilibrios que la exactitud por sí sola ocultaría.
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.