Principios de evaluación
Un modelo no vale por lo que aprende, sino por lo que generaliza. Evaluar bien es diseñar un experimento honesto: separar los datos antes de tocar el modelo, elegir una métrica alineada con el coste real y reportar la incertidumbre.
Al terminar sabrás
Las tres particiones
| Conjunto | Uso | Qué no hacer |
|---|---|---|
| Entrenamiento | Ajustar parámetros y transformaciones | Evaluar el rendimiento final |
| Validación | Elegir modelo, hiperparámetros y umbral | Reportarlo como resultado definitivo |
| Test | Estimar el rendimiento en datos no vistos | Usarlo para tomar decisiones |
La regla es simple: toda decisión que mire los datos de test contamina la estimación. Si ajustas el umbral, imputas valores, seleccionas features o comparas 50 modelos usando test, el número final deja de ser una estimación independiente.
Data leakage: el error más caro
La fuga de información ocurre cuando el modelo accede durante el entrenamiento a información que no tendría en producción. Ejemplos frecuentes:
- Estandarizar o imputar con todo el dataset antes de dividir.
- Incluir una variable que se calcula después del evento que quieres predecir (por ejemplo, «fecha de cancelación» para predecir cancelación).
- Duplicados entre train y test, o el mismo cliente en ambos conjuntos.
- En series temporales, mezclar futuro y pasado.
Una fuga que parece inofensiva
Quieres predecir si un paciente tendrá una complicación. Entre las features incluyes «medicamento administrado». En los datos históricos, ese medicamento solo se administra después de detectar la complicación. El modelo aprende una regla trivial y obtiene un AUC de 0.98 en validación, pero en producción no puede saber el medicamento antes de que ocurra el evento.
Lección: antes de usar una variable, pregúntate si estará disponible en el momento exacto de la predicción.
El tamaño de la partición
70/15/15 o 80/10/10 son valores razonables para datasets medianos. Con pocos datos, la validación cruzada aprovecha mejor la muestra. Con millones de filas, una partición fija grande es suficiente y más rápida. Lo importante no es el porcentaje exacto, sino que cada conjunto sea representativo y suficientemente grande para la métrica.
from sklearn.model_selection import train_test_split
# 1) Separar test desde el inicio y no tocarlo
X_temp, X_test, y_temp, y_test = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
# 2) Del resto, separar validación
X_train, X_val, y_train, y_val = train_test_split(
X_temp, y_temp, test_size=0.25, stratify=y_temp, random_state=42
)
print(X_train.shape, X_val.shape, X_test.shape)Ejercicio 6.1 · Detectar fugas
Enumera tres posibles fugas de información en un modelo que predice abandono de clientes usando datos de una plataforma. Para cada una, indica cómo la detectarías y cómo la corregirías.
Orientación: (a) usar la fecha de baja como feature: eliminarla y reconstruir el dataset con información disponible antes de la baja; (b) calcular la media de consumo con todo el periodo: calcularla solo con la ventana previa; (c) clientes duplicados en train y test: agrupar por cliente antes de dividir.