10 · Matriz de confusión, precisión, recall, F1, ROC, AUC
La accuracy miente con datos desbalanceados — la historia completa requiere precisión, recall, F1 y AUC.
La accuracy miente con datos desbalanceados — precisión, recall, F1 y AUC cuentan la historia completa.
Sin esto:
Sin estas métricas, desplegarías un detector de fraude que no detecta nada y reportarías orgulloso el 99% de accuracy.
Un modelo de clasificación produce tanto una etiqueta predicha como una probabilidad predicha. Una vez que tienes un umbral (por defecto 0.5), cada muestra cae en una de las cuatro celdas:
La matriz de confusión
| | Predicho Positivo | Predicho Negativo | |---|---|---| | Verdadero Positivo | TP | FN | | Verdadero Negativo | FP | TN |
- TP (Verdadero Positivo): predicho 1, realmente 1 — llamada positiva correcta.
- FP (Falso Positivo): predicho 1, realmente 0 — falsa alarma.
- FN (Falso Negativo): predicho 0, realmente 1 — positivo perdido.
- TN (Verdadero Negativo): predicho 0, realmente 0 — llamada negativa correcta.
De estos cuatro números derivas todas las métricas:
Accuracy = (TP + TN) / (TP + FP + FN + TN)
Fracción total correcta. Engañosa con datos desbalanceados — un modelo que siempre predice "no es fraude" en un dataset 99:1 logra 99% de accuracy sin detectar ningún fraude.
Precisión = TP / (TP + FP)
"De las muestras que predije como positivas, ¿qué fracción eran realmente positivas?" Optimiza precisión cuando los falsos positivos son costosos (p. ej., filtro de spam — no quieres correo legítimo en la carpeta de spam).
Recall (Sensibilidad) = TP / (TP + FN)
"De todos los positivos verdaderos en el dataset, ¿qué fracción encontré?" Optimiza recall cuando los falsos negativos son costosos (p. ej., cribado de cáncer — no quieres perder un caso real).
El tradeoff precisión-recall: bajar el umbral de decisión (< 0.5) detecta más positivos (mayor recall) pero también acepta más falsas alarmas (menor precisión). Subir el umbral hace lo opuesto.
F1 score = 2 · (precisión · recall) / (precisión + recall) = media armónica de P y R.
Cuando tanto la precisión como el recall importan y quieres un único número, usa F1. Es la media armónica — que da menor peso al que esté más bajo.
Especificidad = TN / (TN + FP) — el recall para la clase negativa.
Curva ROC — grafica TPR (=recall) en el eje y vs FPR (= 1 − especificidad) en el eje x mientras el umbral de clasificación varía de 1 a 0. Un clasificador aleatorio da la diagonal y = x. Un clasificador perfecto pasa por (0, 1).
AUC (Área bajo la curva ROC) — un resumen independiente del umbral. AUC = 0.5 significa aleatorio. AUC = 1.0 significa separación perfecta. AUC tiene una interpretación elegante: es igual a la probabilidad de que una muestra positiva elegida aleatoriamente sea clasificada por encima de una muestra negativa elegida aleatoriamente.
Curva PR (Precisión-Recall) — grafica precisión vs recall mientras el umbral varía. Más informativa que ROC cuando los positivos son raros (datos desbalanceados).
Python (in browser)
La alta accuracy general en datos desbalanceados es una trampa. Mira la precisión y recall por clase en el reporte de clasificación — la clase minoritaria (fraude, enfermedad, etc.) mostrará números mucho peores. Por eso nunca evalúas un clasificador con datos desbalanceados usando solo la accuracy.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Cada punto en la curva ROC es un umbral diferente. El área sombreada es el AUC. La línea diagonal punteada es la línea base aleatoria. Cuanto más se curve la curva hacia la esquina superior izquierda, mejor clasifica el modelo los positivos por encima de los negativos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Con datos desbalanceados (10% de positivos), la línea base aleatoria de precisión es 0.10 — no 0.50 como en el caso ROC. La curva PR expone cuán malo es realmente el modelo en la clase minoritaria. Una curva PR más cercana a la esquina superior derecha es mejor.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
La elección de beta es una decisión de negocio, no estadística. Pregunta: '¿Es peor perder un caso verdadero (FN) o generar una falsa alarma (FP)?' La respuesta determina beta.
Un modelo predice 0 para todo en un dataset desbalanceado 99:1. ¿Cuáles son su accuracy y el recall en la clase minoritaria?
- La matriz de confusión (TP, FP, FN, TN) es la base de toda métrica de clasificación.
- Precisión = TP/(TP+FP) optimiza para el costo de falsas alarmas; Recall = TP/(TP+FN) optimiza para el costo de positivos perdidos; F1 es su media armónica.
- ROC-AUC es independiente del umbral y mide la calidad del ranking; PR-AUC es más honesto en datos muy desbalanceados.
- Nunca uses la accuracy como única métrica en datasets desbalanceados — verifica siempre el recall por clase.
Cada leaderboard de clasificación (Kaggle, papers) reporta AUC o F1, no accuracy. Los despliegues en producción usan precisión-en-K (p. ej., top-100 predicciones de mayor confianza) para problemas de ranking.
Si lo quitas: Desplegarías modelos que parecen perfectos en la hoja de cálculo y fallan en el caso de uso.