Capítulo 8 Regularización: Ridge, Lasso y Elastic Net Logit

La regularización es una de las herramientas más valiosas en machine learning supervisado, especialmente cuando tenemos muchos predictores, relaciones complejas o alta colinealidad. Su objetivo es mejorar la capacidad predictiva reduciendo el sobreajuste (overfitting) mediante penalizaciones aplicadas a los coeficientes del modelo lineal.

A diferencia de la regresión MCO tradicional, que solo busca minimizar el error cuadrático, los métodos de regularización agregan un término que penaliza la magnitud de los coeficientes. Esto tiene dos efectos importantes:

  1. Controla la varianza del modelo, suavizando estimaciones inestables.
  2. Mejora la predicción fuera de muestra, que es la meta principal en ML.

8.1 Motivación: ¿por qué regularizar?

Un modelo lineal clásico:

\[ Y = \beta_0 + \sum_{j=1}^p \beta_j X_j + u \]

puede fallar cuando:

  • hay muchas variables,
  • algunas están muy correlacionadas,
  • el tamaño muestral es limitado,
  • los datos contienen “ruido”.

En esos casos, los coeficientes estimados pueden ser grandes, inestables y muy sensibles a pequeños cambios en los datos. La regularización atenúa este problema.


8.2 Ridge Regression (Penalización L2)

Nuevamente, la regresión ridge es muy similar a la de mínimos cuadrados. En particular, la estimación ridge \(\hat{\beta}^{R}\) son los valores que minimizan la ecuación (8.1) donde \(\lambda \ge 0\) es un parámetro de ajuste, que se determinará por separado. La ecuación (8.1) realiza un trade-off entre dos criterios diferentes. Al igual que con los mínimos cuadrados, la regresión ridge busca estimaciones de coeficientes que se ajusten bien a los datos, haciendo que RSS sea pequeña. Sin embargo, el segundo término \(\lambda \sum_{j=1}^{p}\beta_{j}^{2}\), llamado penalización, es pequeño cuando \(\beta_1,...,\beta_p\) están cerca de cero, por lo que tiene el efecto de reducir las estimaciones de \(\beta_j\) hacia cero.

\[\begin{equation} \tag{8.1} R_r(\beta) = \sum_{i=1}^{n}(y_i - x_i^{'} \beta)^2 + \lambda \sum_{j=1}^{p}\beta_{j}^{2} \end{equation}\]

Ridge

Figura 8.1: Ridge

  • No genera ceros exactos → mantiene todas las variables.
  • Ideal cuando hay alta colinealidad.
  • Los coeficientes se “achican” (shrink), pero no desaparecen.

Intuición:
La penalización L2 “aprieta” los coeficientes hacia cero suavemente.
Como castiga más fuertemente valores grandes, evita coeficientes desproporcionados.


8.3 Lasso (Penalización L1)

Least Absolute Shrinkage and Selection Operator

Dado:

\(Y = \beta_0 + \beta_1 X_1 +...+ \beta_p X_p + u\)

Suponer que \(M_k\) con \(k = 1,...,K\) es una serie modelos.

Elección de modelos: buscar en \(M_k\) el mejor modelo para predecir fuera de la muestra. La primera alternativa podría ser realizar una búsqueda exhaustiva. En la ocasiones, puede ser impracticable dado que con \(p\) predictores, se pueden construir \(2^p\) modelos (con \(p = 15\) hay \(32.768\) modelos).

Lasso: una manera formal y algorítmica de realizar esa tarea. Para \(\lambda \ge 0\) dado, se considera la siguiente función objetivo (a minimizar):

\[\begin{equation} \tag{8.2} R_l(\beta) = \sum_{i=1}^{n}(y_i - x_i^{'} \beta)^2 + \lambda \sum_{j=1}^{p}|\beta_j| \end{equation}\]

donde \(x_i\) contiene un intercepto.

  1. \(\lambda = 0\) es el estimador de \(MCO\)

  2. \(\lambda = \infty\) el segundo término \(\to \infty\) entonces \(\beta_1,...\beta_p = 0\)

  3. Si \(0 < \lambda < \infty\) Lasso hace algo intermedio entre \(MCO\) y \(0\)

Intuitivamente:

  • \(\sum_{i=1}^{n}(y_i - x_i^{'} \beta)^2\) penaliza la falta de ajuste

  • \(\sum_{j=1}^{p}|\beta_j|\) penaliza complejidad

  • Puede llevar coeficientes exactamente a cero.

  • Cumple una doble función: regularización + selección de variables.

  • Útil cuando sospechamos que solo algunas variables son realmente relevantes.

En determinados casos, la ventaja de utilizar lasso es que elige automáticamente qué variables entran en el modelo \((\beta_j \neq 0)\) y cuales no \((\beta_j = 0)\). Por su parte, ridge restringe todos los coeficientes hacia \(0\).

La Figura 8.2 muestra el valor de los coeficientes estandarizados en función de distintos valores del parámetro \(\lambda\) que se obtienen al aplicar lasso a la base de datos de Credit.16 Cuando \(\lambda = 0\), el resultado coincide con el de mínimos cuadrados, cuando \(\lambda\) es lo suficientemente grande, todos los coeficientes son iguales cero. Entre los dos casos extremos, moviéndose de derecha a izquierda se observa que al principio lasso resulta en un modelo que contiene solo el predictor de rating. Luego, ingresan al modelo student y limit casi simultáneamente, seguidas de cerca por income. Finalmente lo hacen el resto de las variables.

Lasso

Figura 8.2: Lasso

Como señalamos arriba, si \(\hat{\beta_l} = 0\), al moverse de \(0\) (es decir, incluir la variable) podría pensarse que la función de penalidad de lasso genera costos y beneficios. Por un lado, el costo por incluir la variable sube en el valor de (\(\lambda\)), por el otro, la penalidad de ajuste baja (más variables, mejor ajuste). Si el primero sube más rápido que lo que el segundo baja conviene quedarse en \(0\). En caso contrario conviene moverse afuera de \(0\). Por lo tanto, conviene moverse de \(0\) si la relación es lo suficientemente fuerte (mejora el ajuste), sino conviene evitar la penalización.


8.4 Elastic Net (L1 + L2)

\[ \min_{\beta} \left\{ \sum_{i=1}^n (Y_i - \hat Y_i)^2 + \lambda \left[ \alpha |\beta| + (1 - \alpha)\beta^2 \right] \right\} \]

Combina lo mejor de ambos mundos:

  • Lasso: selección de variables
  • Ridge: estabilidad cuando hay variables correlacionadas

8.5 Selección del hiperparámetro lambda (\(\lambda\))

La regularización requiere elegir cuánto penalizar. Esto se define con el hiperparámetro \(\lambda\).

  • \(\lambda\) = 0 → modelo MCO estándar.
  • \(\lambda\) grande → coeficientes más chicos (incluso cero en Lasso).

La elección óptima se hace con cross-validation (CV), típicamente k-fold.


8.6 Ejemplo aplicado

Usaremos el dataset Hitters, disponible en el paquete ISLR2.
Objetivo: predecir el salario de jugadores de béisbol utilizando múltiples características.

library(ISLR2)
library(glmnet)
library(tidyverse)

data(Hitters)

# Eliminamos observaciones sin salario
hitters <- Hitters %>% drop_na(Salary)

X <- model.matrix(Salary ~ ., data = hitters)[, -1]
y <- hitters$Salary

8.6.1 Ridge

cv_ridge <- cv.glmnet(X, y, alpha = 0)
best_lambda_ridge <- cv_ridge$lambda.min
coef(cv_ridge, s = best_lambda_ridge)
## 20 x 1 sparse Matrix of class "dgCMatrix"
##                s=25.52821
## (Intercept)  8.112693e+01
## AtBat       -6.815959e-01
## Hits         2.772312e+00
## HmRun       -1.365680e+00
## Runs         1.014826e+00
## RBI          7.130224e-01
## Walks        3.378558e+00
## Years       -9.066800e+00
## CAtBat      -1.199478e-03
## CHits        1.361029e-01
## CHmRun       6.979958e-01
## CRuns        2.958896e-01
## CRBI         2.570711e-01
## CWalks      -2.789666e-01
## LeagueN      5.321272e+01
## DivisionW   -1.228345e+02
## PutOuts      2.638876e-01
## Assists      1.698796e-01
## Errors      -3.685645e+00
## NewLeagueN  -1.810510e+01

Interpretación intuitiva

  • Los coeficientes son más pequeños que en MCO.
  • Ninguna variable es eliminada.
  • Ridge “suaviza” el impacto de predictores correlacionados (ej.: hits, home runs, runs).

Ridge estabiliza el modelo cuando hay muchas variables que miden dimensiones similares del rendimiento del jugador.
No selecciona variables, pero evita coeficientes exagerados.


8.6.2 Lasso

cv_lasso <- cv.glmnet(X, y, alpha = 1)
best_lambda_lasso <- cv_lasso$lambda.min
coef(cv_lasso, s = best_lambda_lasso)
## 20 x 1 sparse Matrix of class "dgCMatrix"
##                s=2.220313
## (Intercept)  134.48030406
## AtBat         -1.67572220
## Hits           5.94122316
## HmRun          0.04746835
## Runs           .         
## RBI            .         
## Walks          4.95676182
## Years        -10.26657309
## CAtBat         .         
## CHits          .         
## CHmRun         0.56236426
## CRuns          0.70135135
## CRBI           0.38727139
## CWalks        -0.58111548
## LeagueN       32.92255640
## DivisionW   -119.37941356
## PutOuts        0.27580087
## Assists        0.19782326
## Errors        -2.26242857
## NewLeagueN     .

Interpretación intuitiva

  • Algunos coeficientes se vuelven exactamente 0.
  • Lasso descarta predictores que tienen poco valor adicional.

Lasso identifica qué variables realmente ayudan a explicar el salario.
Elimina predictores redundantes y simplifica el modelo.


8.6.3 Elastic Net

cv_en <- cv.glmnet(X, y, alpha = 0.5)
best_lambda_en <- cv_en$lambda.min
coef(cv_en, s = best_lambda_en)
## 20 x 1 sparse Matrix of class "dgCMatrix"
##                s=4.046134
## (Intercept)  123.60600016
## AtBat         -1.47823124
## Hits           5.42887358
## HmRun          .         
## Runs           .         
## RBI            0.01844694
## Walks          4.70505493
## Years         -9.97100025
## CAtBat         .         
## CHits          0.01527343
## CHmRun         0.57446273
## CRuns          0.63408692
## CRBI           0.37487333
## CWalks        -0.52472736
## LeagueN       33.48050532
## DivisionW   -120.79037839
## PutOuts        0.27360980
## Assists        0.18897767
## Errors        -2.47338342
## NewLeagueN     .

Interpretación intuitiva

  • Mantiene estabilidad cuando hay variables correlacionadas.
  • Puede hacer selección, pero sin la inestabilidad del Lasso puro.

Elastic Net equilibra simplicidad y estabilidad.
Es ideal en contextos con grupos de variables correlacionadas (muy común en macro).


8.7 Comparación general

Método Penalización Selección de variables Estabilidad con variables correlacionadas Cuándo usarlo
Ridge L2 No Muy alta Muchas variables correlacionadas
Lasso L1 Baja se busca un modelo más simple
Elastic Net L1 + L2 Alta Mezcla óptima cuando hay grupos de predictores

8.8 Conclusión

  • La regularización mejora la predicción, especialmente cuando hay muchos predictores.
  • \(\lambda\) regula cuánto achicamos los coeficientes: valores grandes penalizan más.
  • Ridge es ideal cuando las variables están muy correlacionadas.
  • Lasso sirve cuando queremos seleccionar automáticamente las variables relevantes.
  • Elastic Net combina ambos: es la opción más robusta en la mayoría de aplicaciones reales.
  • La selección de \(\lambda\) siempre debe hacerse con cross-validation.
  • En la práctica, Elastic Net suele ofrecer la mejor combinación entre precisión, simplicidad y estabilidad.

  1. Datos simulados que contiene información sobre 10.000 clientes donde el objetivo es predecir quienes no pagarán su deuda de tarjeta de crédito.↩︎