Validación cruzada en machine learning

La validación cruzada en machine learning evalúa un modelo mediante varias particiones de entrenamiento y validación. En lugar de depender de un único corte, estima cómo varía el rendimiento y aprovecha mejor un dataset limitado.
No reemplaza un conjunto de prueba final. Se usa para comparar modelos y ajustar decisiones dentro del desarrollo; el test permanece aislado para una evaluación final honesta.
K-Fold
K-Fold divide los datos en k pliegues. En cada iteración entrena con k - 1 y valida con el restante:
from sklearn.model_selection import KFold, cross_validate
cv = KFold(n_splits=5, shuffle=True, random_state=42)
resultado = cross_validate(
modelo,
X,
y,
cv=cv,
scoring=["accuracy", "f1"],
return_train_score=True,
)
Cinco pliegues implican cinco ajustes. Reporta media y dispersión, no solo el mejor valor.
StratifiedKFold
En clasificación, StratifiedKFold conserva aproximadamente la proporción de clases:
from sklearn.model_selection import StratifiedKFold
cv = StratifiedKFold(
n_splits=5,
shuffle=True,
random_state=42,
)
Ayuda con clases desbalanceadas, pero no garantiza suficientes positivos si existen muy pocos. Elige métricas como precisión, recall, F1 o ROC-AUC según el costo del error; consulta la curva ROC y AUC.
Datos agrupados
Si varias filas pertenecen al mismo paciente, cliente o dispositivo, no deben repartirse entre entrenamiento y validación. El modelo podría memorizar señales de la entidad.
Usa divisores por grupos:
from sklearn.model_selection import GroupKFold
cv = GroupKFold(n_splits=5)
scores = cross_validate(
modelo,
X,
y,
groups=cliente_id,
cv=cv,
)
La unidad de separación debe representar el uso real.
Series temporales
No mezcles futuro en entrenamiento para predecir pasado. Usa particiones que respeten orden:
from sklearn.model_selection import TimeSeriesSplit
cv = TimeSeriesSplit(n_splits=5)
Puede requerirse una brecha entre train y validación para evitar información cercana. La guía de series temporales desarrolla backtesting y ventanas.
Fuga de datos
Escalar, imputar o seleccionar variables antes de la validación permite que el pliegue de validación influya en el entrenamiento. Encapsula los pasos:
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline([
("imputar", SimpleImputer(strategy="median")),
("escalar", StandardScaler()),
("modelo", modelo),
])
Cada pliegue ajusta transformaciones solo con sus datos de entrenamiento.
Ajuste de hiperparámetros
GridSearchCV o RandomizedSearchCV usan validación interna para seleccionar configuraciones. Evaluar después en los mismos pliegues produce una estimación optimista.
Para rigor adicional:
- validación anidada;
- train/validation/test;
- test temporal posterior;
- evaluación externa.
Elegir k
Cinco o diez pliegues son opciones comunes, no reglas universales. Más pliegues usan más datos por entrenamiento pero aumentan costo y correlación entre estimaciones. Dataset, grupos, tiempo y estabilidad determinan la estrategia.
Métricas
Define la métrica antes de comparar. Accuracy puede ocultar una clase rara. En regresión, MAE y RMSE penalizan errores de forma diferente. Usa varias métricas con una primaria explícita.
Variabilidad
Un promedio de 0.85 con pliegues entre 0.70 y 0.95 señala inestabilidad. Inspecciona subgrupos, deriva, tamaño y datos atípicos. Repetir particiones aleatorias puede estimar sensibilidad, sin convertirlas en intentos para escoger la semilla más favorable.
Errores frecuentes
- Preprocesar antes de dividir.
- Mezclar la misma entidad.
- Barajar series temporales.
- Ajustar y reportar sobre los mismos pliegues sin corrección.
- Comparar modelos con particiones diferentes.
- Ignorar dispersión.
- Elegir accuracy por defecto.
- Usar el test repetidamente.
La guía de machine learning explica por qué una evaluación aislada protege frente a decisiones adaptadas a los datos.
Preguntas frecuentes
¿Qué es validación cruzada?
Es una evaluación repetida que rota varias particiones entre entrenamiento y validación.
¿Qué significa K-Fold?
Divide el dataset en k pliegues y entrena k veces, usando cada pliegue una vez para validar.
¿Cuándo uso StratifiedKFold?
En clasificación cuando conviene conservar aproximadamente la proporción de clases en cada pliegue.
¿La validación cruzada reemplaza el test?
No. El test final debe permanecer aislado de selección de modelos e hiperparámetros.
¿Cómo evito data leakage?
Incluye imputación, escalado y selección dentro de una Pipeline ajustada en cada pliegue.
¿Puedo barajar series temporales?
No si simulas predicción futura. Usa divisiones cronológicas y una brecha cuando proceda.

Deja una respuesta