Generalizar y evaluar
¿Cómo sabes si un modelo funciona de verdad?
Lección completa
Si quieres:
Un modelo que acierta todos sus ejemplos de entrenamiento puede fallar con los casos nuevos. Medir bien es medir con datos que el modelo nunca vio.
Sin voz: la lección avanza sola con subtítulos.
La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.
Modo revisiónComentar este pasoTerminé la lección
Qué lograrás
- Distinguir subajuste de sobreajuste y detectarlos comparando el error de entrenamiento con el de validación.
- Explicar para qué sirven los conjuntos de entrenamiento, validación y prueba, y qué es una fuga de datos.
- Calcular e interpretar precisión, exhaustividad y la matriz de confusión, incluido el efecto de la tasa base.
Ideas clave
- Bajar el error de entrenamiento no basta: lo que importa es el error con datos que el modelo no vio.
- Subajuste = modelo demasiado simple; sobreajuste = aprende el ruido. Una brecha grande entre error de entrenamiento y de validación es la señal.
- Entrenamiento para aprender, validación para elegir, prueba para informar (una sola vez). Si el examen se filtra al entrenamiento, hay fuga de datos.
- Se frena el sobreajuste con más datos, modelos más simples, regularización y parada temprana.
- La exactitud engaña con clases desbalanceadas: mira precisión, exhaustividad y la matriz de confusión, y recuerda que la tasa base manda.
Lo que mucha gente cree
Creencia común «El modelo acierta el 99 % en las pruebas, así que funciona muy bien».
Lo correcto Depende de con qué datos se midió y de la tasa base. Con datos que el modelo ya vio, la cifra no dice nada de lo nuevo; y con eventos raros, un 99 % puede ser inútil.
Compruébalo
Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.
Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.
Sesgo, varianza y ruido
Para un modelo entrenado con un conjunto aleatorio, el error esperado en un punto nuevo se descompone en
Es la forma estándar con error cuadrático (Hastie, Tibshirani y Friedman, ec. 7.9). El subajuste es sesgo alto (modelo demasiado rígido); el sobreajuste es varianza alta (el modelo cambia mucho con cada muestra). En la lección el ruido es : en promedio, ningún modelo puede bajar de ese error en datos nuevos (en una muestra concreta de 80 puntos puede quedar un poco por encima o por debajo), y el mejor grado (4) llega a en la validación de la escena.
Esto se comprobó simulando 4 000 conjuntos de entrenamiento con la misma receta de datos (verify-data.ts): la suma coincide con el error simulado en puntos nuevos. Con grado 1: sesgo² ≈ 0.066 y varianza ≈ 0.007 (el error es de sesgo). Con grado 4: 0.001 y 0.017. Con grado 10: sesgo² ≈ 0 y varianza ≈ 1.6, sobre todo hacia los extremos del intervalo (el error es de varianza). Con grado 10 y : 0.005 y 0.018; la regularización cambia varianza por un poco de sesgo.
Regularización ridge
El ajuste polinómico con castigo a los pesos (regresión ridge, o decaimiento de pesos, weight decay) minimiza , con solución cerrada
Con se recupera el ajuste libre; al subir los pesos se encogen y la curva se suaviza (en la escena, la norma de los pesos de grado 10 baja de ≈ 327 con a ≈ 0.19 con ). Dos precisiones. El término constante no se penaliza (como en la escena y en scikit-learn; Hastie et al., §3.4.1), y las entradas conviene normalizarlas antes (la escena pasa a ). Y con demasiado grande el modelo vuelve a subajustar: con grado 10, el error de validación de la escena baja hasta (≈ 0.24) y luego sube (≈ 0.44 con , peor que la recta).
La parada temprana del descenso del gradiente actúa de forma parecida a una regularización: detener antes limita cuánto crecen los pesos. Para un modelo lineal con error cuadrático y descenso del gradiente simple equivale, con una aproximación cuadrática, a una regularización (Goodfellow, Bengio y Courville, §7.8). Otras defensas: más datos (reales o aumentados, §7.4) y, en redes neuronales, el dropout: apagar unidades al azar durante el entrenamiento (Srivastava et al., 2014).
Métricas de clasificación
Con verdaderos positivos , falsos positivos , falsos negativos y verdaderos negativos :
Si no se marca a nadie () la precisión es : por convención (la de la escena) se toma 1, de modo que un detector que dice «sano» siempre tiene precisión perfecta y recall 0, y por eso hay que mirar las dos (Goodfellow et al., §11.1). El es la media armónica de precisión y recall.
El umbral y los costos
Si un falso negativo cuesta y un falso positivo (los aciertos no cuestan), la decisión de menor costo esperado es marcar «positivo» cuando
Con costos iguales el corte de probabilidad es 0.5; si perder un caso cuesta 10 veces más, baja a . En la escena (dos campanas y 10 % de enfermas) eso da los umbrales de puntuación óptimos 2.23 (costos iguales), 1.46 (perder un caso cuesta 10) y 3.00 (la falsa alarma cuesta 10).
La tasa base (teorema de Bayes)
Con prevalencia , sensibilidad (= recall) y especificidad , la probabilidad de estar enfermo dado un positivo es
Con y : , el «uno de cada seis» de la lección. Con hay más falsas alarmas que aciertos mientras la prevalencia sea menor que 5 %.
Presentar el cálculo en frecuencias («de 2 000 personas, 20 enfermas, 19 detectadas…») en lugar de probabilidades ayuda a razonar: Gigerenzer y Hoffrage (1995) muestran que los algoritmos bayesianos son computacionalmente más simples en ese formato y que, con él, personas sin formación estadística siguieron algoritmos bayesianos hasta en el 50 % de sus inferencias. Es el formato que usa la lección.
En código
import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
f = lambda x: 0.6 * np.sin(2 * np.pi * x) + 0.2 # la señal verdadera
rng = np.random.default_rng(0)
x_tr = ((np.arange(12) + 0.5) / 12)[:, None] # 12 mediciones repartidas en [0, 1]
y_tr = f(x_tr[:, 0]) + 0.2 * rng.normal(size=12)
x_va = rng.uniform(0, 1, 80)[:, None] # 80 mediciones nuevas
y_va = f(x_va[:, 0]) + 0.2 * rng.normal(size=80)
for grado in (1, 4, 10):
for lam in (1e-9, 3e-2): # 1e-9 hace de λ = 0
m = make_pipeline(PolynomialFeatures(grado, include_bias=False), Ridge(alpha=lam)).fit(2 * x_tr - 1, y_tr)
rmse = lambda a, b: float(np.sqrt(np.mean((m.predict(2 * a - 1) - b) ** 2)))
print(grado, lam, round(rmse(x_tr, y_tr), 3), round(rmse(x_va, y_va), 3)) # entrenamiento y validación
# Con esa semilla: grado 1 → 0.302 y 0.339 (subajuste); grado 4 → 0.093 y 0.221 (mejor validación);
# grado 10 → 0.006 y 0.251 con λ ≈ 0 (sobreajuste) y 0.103 y 0.237 con λ = 0.03.
# Son datos nuevos con la misma receta que la escena: no repiten sus números exactos.
def ppv(prev, sens, spec): # valor predictivo positivo
tp, fp = prev * sens, (1 - prev) * (1 - spec)
return tp / (tp + fp)
print(round(ppv(0.01, 0.95, 0.95), 3)) # 0.161
Lo que viene
Para imágenes, una red totalmente conectada no escala. La lección 11 muestra la idea de las convoluciones. La lección 34 retoma la evaluación para sistemas de IA generativa, donde medir bien es más difícil.
Lente de decisión
Qué significa esta idea si tu trabajo es decidir, no programar.
- Pide siempre que el rendimiento se reporte sobre datos que el modelo no vio, y que el equipo explique cómo evitó fugas de datos.
- Una sola cifra de exactitud no basta: pide precisión y exhaustividad, y la matriz de confusión con los costos reales de cada tipo de error.
- Con eventos raros (fraude, fallas, enfermedades) manda la tasa base: calcula cuántas falsas alarmas puede absorber tu operación antes de aprobar un sistema.
- El umbral de decisión es una palanca de negocio: ajústalo según el costo de un falso negativo frente a un falso positivo y revísalo cuando cambie el entorno.
Términos de la lección
- Sobreajuste Cuando un modelo aprende el ruido de sus datos de entrenamiento y por eso falla con datos nuevos. Se detecta con una brecha grande entre error de entrenamiento y de validación.
- Subajuste Cuando un modelo es demasiado simple para captar la señal: falla incluso con los datos de entrenamiento.
- Conjunto de validación Datos que el modelo no usa para ajustarse y que sirven para elegir entre modelos o hiperparámetros.
- Conjunto de prueba Datos reservados que se usan una sola vez al final para informar el rendimiento esperado con casos nuevos.
- Fuga de datos Información de los datos de evaluación que se cuela en el entrenamiento, inflando el resultado medido.
- Regularización Cualquier cambio en el aprendizaje pensado para reducir el error con datos nuevos, aunque no baje el de entrenamiento. La más simple penaliza la complejidad del modelo (por ejemplo, los pesos grandes); la parada temprana y el dropout son otras formas.
- Precisión De todo lo que el modelo marcó como positivo, la fracción que realmente lo era: TP / (TP + FP).
- Exhaustividad (recall) De todos los positivos reales, la fracción que el modelo encontró: TP / (TP + FN).
- Matriz de confusión Tabla con los aciertos y errores de cada tipo: verdaderos y falsos positivos, verdaderos y falsos negativos.
- Tasa base La frecuencia real de un evento en la población (por ejemplo, el 1 % de transacciones fraudulentas). Condiciona cuántas falsas alarmas genera un detector.
Transcripción completa
Fuentes
- Hastie, T., Tibshirani, R., Friedman, J. (2009). The Elements of Statistical Learning (2.ª ed.), cap. 3 (§3.4.1, regresión ridge) y cap. 7 (§7.1–7.3: reparto en entrenamiento, validación y prueba; sesgo y varianza)
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, cap. 5 (§5.2 capacidad, sobreajuste y subajuste; §5.3 conjuntos de validación)
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, cap. 7 (§7.1.1 decaimiento de pesos, §7.4 aumento de datos, §7.8 parada temprana, §7.12 dropout)
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, cap. 11 (§11.1 métricas de rendimiento: precisión, recall, F)
- Kapoor, S., Narayanan, A. (2023). Leakage and the reproducibility crisis in machine-learning-based science (Patterns 4(9), 100804)
- Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., Salakhutdinov, R. (2014). Dropout: A Simple Way to Prevent Neural Networks from Overfitting (JMLR 15, 1929–1958)
- Elkan, C. (2001). The Foundations of Cost-Sensitive Learning (IJCAI 2001)
- Gigerenzer, G., Hoffrage, U. (1995). How to improve Bayesian reasoning without instruction: Frequency formats (Psychological Review 102(4), 684–704)
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.
Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub