🎯 Validación Cruzada y Tuning

K-fold CV, LOOCV, nested CV, búsqueda de hiperparámetros y criterios de información

K-fold Grid Search AIC · BIC
Módulo 11 de 12
💡 Piénsalo así: La validación cruzada es como un examen donde el profesor divide el temario en K partes y hace K exámenes: en cada uno, una parte es el examen (test) y el resto es el material de estudio (train). Al final, tienes K notas y promedias. LOOCV es la versión extrema: K = n, cada examen es de una sola pregunta. Nested CV es como tener un examen para elegir el método de estudio (tuning) y otro para evaluar el resultado final, evitando hacer trampa al elegir el método que mejor le fue en el primer examen.
Teoría: Validación Cruzada

K-fold Cross-Validation

Intuición: En lugar de entrenar una vez y evaluar en un solo test set, K-fold CV divide los datos en K partes iguales (folds). Entrena el modelo en K-1 folds y evalúa en el fold restante. Repite esto K veces, usando un fold diferente como test cada vez. El error final es el promedio de los K errores. Esto da una estimación más robusta del rendimiento del modelo que un único split.

Fórmula explicada: CV(λ) = (1/K) Σ_{k=1}^{K} MSE_k(λ), donde MSE_k se calcula en el fold k usando el modelo entrenado sin ese fold. K típico = 5 o 10. K=10 da menor sesgo pero mayor costo computacional. K=5 es un buen balance.

Caso real: Un investigador tiene 1,000 encuestas. Usa 5-fold CV para evaluar un modelo de predicción de salarios. Cada fold tiene 800 train y 200 test. Entrena 5 modelos y promedia el MSE. Esto da una estimación más confiable que un solo split 80/20.

Error común: No estratificar los folds cuando hay desbalance de clases. Si la variable Y tiene 10% de casos positivos, un fold podría tener 0% o 30% por azar, distorsionando el error.

CV = (1/K) Σk MSEk

LOOCV y Stratified CV

Intuición: LOOCV (Leave-One-Out CV) lleva K-fold al extremo: K = n (tamaño de muestra). Entrena en todos menos 1 y evalúa en esa observación. Repite n veces. Es computacionalmente costoso (n modelos) pero produce estimaciones casi insesgadas. Stratified CV asegura que cada fold tenga la misma proporción de clases que el dataset original, crucial para clasificación.

Fórmula explicada: LOOCV = (1/n) Σ (y_i - f̂_{-i}(x_i))². El problema es que LOOCV tiene alta varianza (los modelos entrenados con n-1 son casi idénticos) y puede sobreajustar en problemas de clasificación.

Caso real: Con solo 30 observaciones (típico en estudios piloto), LOOCV permite usar casi todos los datos para entrenar (29 observaciones por modelo) mientras obtiene una evaluación en cada punto.

Error común: Usar LOOCV con modelos lentos. Para n=1,000, necesitas entrenar 1,000 modelos. Para redes neuronales o Random Forest con muchos árboles, esto es prohibitivo. Prefiere K=10.

LOOCV = (1/n) Σ (yi - f̂-i(xi))2

Nested CV

Intuición: Si usas CV para elegir hiperparámetros (tuning) y luego reportas el error de ese mismo CV como rendimiento del modelo, estás "haciendo trampa" (sesgo de optimización). Nested CV separa estos dos pasos: un loop externo evalúa el modelo final, y un loop interno (dentro de cada fold externo) hace el tuning. Así, la evaluación final es honesta porque el modelo nunca vió los datos de test externos durante el tuning.

Fórmula explicada: Outer CV: divide datos en K_outer folds. Para cada fold externo: (a) el train set se divide en K_inner folds para elegir los mejores hiperparámetros, (b) se entrena con esos hiperparámetros en todo el train externo, (c) se evalúa en el test externo. El error final es el promedio de los K_outer errores.

Caso real: Un equipo de data science usa nested CV (outer=10, inner=5) para evaluar un modelo de riesgo crediticio. El error reportado (AUC=0.82) refleja el rendimiento real del proceso completo de modelado, no solo del modelo final.

Error común: Olvidar que nested CV solo EVALÚA el proceso de modelado, no produce un modelo único para deploy. Para deploy, se entrena el modelo final con todos los datos usando los hiperparámetros elegidos por CV simple.

Nested CV: outer para evaluación, inner para tuning

Grid Search y Random Search

Intuición: El tuning de hiperparámetros puede hacerse con Grid Search (probamos todas las combinaciones en una cuadrícula) o Random Search (probamos combinaciones aleatorias). Sorprendentemente, Random Search suele ser más eficiente: si solo el 10% de los hiperparámetros importan realmente, Grid Search desperdicia la mayor parte del presupuesto computacional en dimensiones irrelevantes.

Fórmula explicada: Grid Search evalúa todas las combinaciones de {λ_1, λ_2, ..., λ_k} × {α_1, ..., α_m}. Random Search muestrea combinaciones uniformemente del espacio de búsqueda. Si el presupuesto es de B evaluaciones, Random Search explora B configuraciones distintas, mientras Grid Search solo explora raíz cuadrada de B por dimensión.

Caso real: Tuning de un Random Forest con 3 hiperparámetros (n_estimators, max_depth, min_samples_split). Grid Search con 10 valores cada uno = 1,000 modelos. Random Search con 100 iteraciones encuentra configuraciones igual de buenas en 1/10 del tiempo.

Error común: Grid Search con valores demasiado espaciados. Si pruebas λ = [0.01, 0.1, 1, 10] para Lasso, te puedes perder el óptimo en λ=0.5. Random Search con distribución log-uniforme explora mejor rangos amplios.

Random Search: B muestras aleatorias ≈ misma calidad que Grid con B^D

AIC, BIC vs CV

Intuición: AIC (Akaike Information Criterion) y BIC (Bayesian Information Criterion) son métodos rápidos para selección de modelos que no requieren dividir la muestra. Penalizan la complejidad del modelo: AIC = -2logL + 2p (penaliza cada parámetro con 2), BIC = -2logL + plog(n) (penaliza más cuando n es grande). BIC selecciona modelos más parsimoniosos que AIC.

Fórmula explicada: Tanto AIC como BIC son aproximaciones asintóticas del error de predicción fuera de muestra (CV). En muestras grandes, AIC es asintóticamente equivalente a LOOCV. BIC es equivalente a CV con un K específico que depende del modelo. Se prefiere CV cuando n es pequeño o hay incertidumbre sobre la distribución de los errores.

Caso real: Seleccionar entre 20 modelos de regresión con distintas transformaciones. Calcular AIC y BIC toma segundos. Hacer CV para cada modelo tomaría horas. AIC/BIC son buena primera aproximación, pero CV es más confiable para la evaluación final.

Error común: Usar AIC/BIC para comparar modelos con diferentes distribuciones de Y (ej. logit vs probit). AIC/BIC requieren que la verosimilitud sea comparable. CV no tiene esta limitación porque compara errores de predicción directamente.

AIC = -2logL + 2p   BIC = -2logL + p·log(n)

Time Series CV (Forward Chaining)

Intuición: En series temporales, el K-fold estándar NO funciona porque los datos tienen un orden temporal: no puedes entrenar con datos futuros y predecir el pasado (fuga de información). Forward Chaining respeta el orden: entrena con datos [1..t], predice t+1, luego entrena con [1..t+1], predice t+2, etc. Es como hacer predicciones en tiempo real hacia adelante.

Fórmula explicada: Forward Chaining (también llamado expanding window): para t desde T_0 hasta T-1: entrena modelo con datos [1..t], predice y_{t+1}, calcula error. CV Error = (1/(T-T_0)) Σ_{t=T_0}^{T-1} (y_{t+1} - f̂_{1..t}(x_{t+1}))². Existe también sliding window (ventana fija) para datasets muy largos.

Caso real: Predecir inflación mensual con 120 meses de datos. Forward Chaining: entrena con meses 1-12, predice 13; entrena 1-13, predice 14; ... hasta predecir mes 120. Esto simula cómo se usaría el modelo en producción.

Error común: Usar K-fold estándar en series temporales. Si entrenas con datos de 2020-2023 y tests con 2015, el modelo "vería" el futuro durante el entrenamiento, dando una visión irrealmente optimista del rendimiento.

TS-CV = (1/(m)) Σ (yt+1 - f̂1..t(xt+1))2
Ejemplo paso a paso

Evaluamos un modelo Lasso con 5-fold CV para elegir λ y estimar su rendimiento real.

Paso 1: Dividimos los 500 datos en 5 folds de 100 observaciones cada uno (aleatorio pero estratificado por la media de Y).

Fold 1: observaciones 1-100, Fold 2: 101-200, ..., Fold 5: 401-500 (después de barajar). Cada fold tiene distribución similar de Y. Esto asegura que ningún fold sea "demasiado fácil" o "demasiado difícil".

Paso 2: Para cada fold k, entrenamos Lasso con λ=0.1 en los otros 4 folds y calculamos MSE en el fold k. Repetimos para varios λ.

Probamos λ = [0.001, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]. Para cada λ, obtenemos 5 MSE (uno por fold). El CV error para λ=0.1 es el promedio de esos 5 MSE. Así obtenemos una curva de CV error vs log(λ).

Paso 3: Elegimos λ* = 0.05 (el que minimiza CV error). Este es el único paso donde usamos los datos para tuning.

Si reportamos el error de CV para λ=0.05 como "rendimiento del modelo", este estará sesgado porque usamos los mismos datos para elegir λ y evaluar. Para una evaluación honesta, necesitamos nested CV o un test set separado desde el inicio.

Paso 4: Aplicamos nested CV: outer 5-fold para evaluación, inner 3-fold para elegir λ dentro de cada fold externo.

El error final (MSE = 0.342) es una estimación insesgada del rendimiento real del proceso de modelado (tuning + entrenamiento). Este error suele ser 5-15% mayor que el CV simple ingenuo.

Simulación: CV Visual y Comparación

Elige K para visualizar los folds y compara selección de modelo con AIC, BIC y CV para 4 modelos candidatos.

Presiona para ver la partición.
Mini Quiz: Validación Cruzada
💡 Responde las preguntas sobre validación cruzada.