Regressão Ridge
O que é Regressão Ridge?
Regressão ridge (ridge regression) é regressão linear (linear regression) com regularização L2 (L2 regularization). Ela mantém o modelo linear familiar
[ \hat{y} = X\beta + b ]
mas adiciona uma penalidade que desestimula coeficientes grandes. Isso torna o modelo menos sensível a ruído, melhora a generalização (generalization) e é particularmente eficaz quando os preditores são altamente correlacionados (multicolinearidade (multicollinearity)) ou quando você tem muitos atributos (features).
A regressão ridge é um exemplo central de Regularização (Regularization): ela introduz intencionalmente um pouco de viés para reduzir substancialmente a variância (veja Compromisso Viés-Variância (Bias-Variance Tradeoff)).
Por que Regressão Ridge?
O método de mínimos quadrados ordinários (ordinary least squares, OLS) escolhe coeficientes que minimizam o erro de treinamento. Quando os atributos são correlacionados ou a matriz de projeto (design matrix) é mal condicionada, os coeficientes do OLS podem ficar instáveis: pequenas mudanças nos dados podem causar grandes oscilações nas estimativas.
A regressão ridge resolve isso ao:
- Encolher (shrink) os coeficientes em direção a zero (mas tipicamente não exatamente zero)
- Reduzir a variância e melhorar o desempenho fora da amostra
- Estabilizar soluções sob multicolinearidade
- Fornecer uma solução única mesmo quando (p > n) (mais atributos do que exemplos)
Função Objetivo (Mínimos Quadrados com Regularização L2)
Dado:
- (X \in \mathbb{R}^{n \times p}): matriz de atributos
- (y \in \mathbb{R}^{n}): alvos
- (\beta \in \mathbb{R}^{p}): coeficientes
- (b \in \mathbb{R}): intercepto (intercept)
- (\lambda \ge 0): força de regularização (regularization strength)
A regressão ridge resolve:
[ \min_{\beta,, b}; \frac{1}{2n}|y - (X\beta + b\mathbf{1})|_2^2 + \lambda |\beta|_2^2 ]
Pontos-chave:
- O termo (|y - (X\beta + b)|_2^2) é o erro quadrático usual.
- A penalidade (|\beta|2^2 = \sum{j=1}^p \beta_j^2) desestimula pesos grandes.
- Tipicamente o intercepto (b) não é penalizado.
Bibliotecas diferentes usam constantes ligeiramente diferentes (por exemplo, (1/2), (1/n)), mas a ideia é a mesma.
O que \(\lambda\) faz?
- (\lambda = 0): a regressão ridge se reduz à Regressão Linear.
- Maior (\lambda): encolhimento mais forte → coeficientes menores → maior viés, menor variância.
- (\lambda \to \infty): coeficientes se aproximam de 0 (o modelo prediz principalmente o intercepto / a média).
Solução em Forma Fechada
Se você centraliza o alvo (y) e centraliza as colunas de (X) (para que o intercepto possa ser tratado separadamente), a solução da regressão ridge tem forma fechada:
[ \hat{\beta}_{\text{ridge}} = \left(X^T X + \lambda I\right)^{-1} X^T y ]
onde (I) é a matriz identidade (p \times p).
Por que isso ajuda numericamente
- O OLS usa ((X^T X)^{-1}), mas se (X^T X) é singular ou quase singular (comum sob multicolinearidade), a inversão é instável ou impossível.
- A regressão ridge adiciona (\lambda I), tornando a matriz estritamente definida positiva quando (\lambda > 0), então ela é invertível e melhor condicionada.
Quando \(p\) é grande
Na prática, raramente se calcula a inversa explicitamente. Implementações usam:
- Fatoração de Cholesky ou fatoração QR
- SVD (muito estável)
- Solvers iterativos (especialmente para dados esparsos/alta dimensionalidade)
Se você treina via métodos iterativos, a regressão ridge ainda é direta e funciona bem com Descida do Gradiente (Gradient Descent).
Como a Regressão Ridge Encolhe Coeficientes (e Por Que Ela Reduz Variância)
Uma forma útil de ver a regressão ridge é por meio da decomposição em valores singulares (Singular Value Decomposition, SVD) / decomposição espectral (eigendecomposition) da matriz de atributos. Seja:
[ X = U \Sigma V^T ]
Então a regressão ridge pode ser escrita como:
[ \hat{\beta}_{\text{ridge}} = V , \mathrm{diag}\left(\frac{\sigma_k}{\sigma_k^2 + \lambda}\right) U^T y ]
Interpretação:
- Ao longo de cada direção principal (vetor singular) (k), o escalonamento do OLS seria (\frac{1}{\sigma_k}).
- A regressão ridge, em vez disso, escala por (\frac{\sigma_k}{\sigma_k^2+\lambda}), que é menor quando (\sigma_k) é pequeno.
Assim, a regressão ridge encolhe os componentes de (\beta) com mais força nas direções em que os dados fornecem pouca informação (valores singulares pequenos) — exatamente onde o OLS se torna instável.
Conexão com multicolinearidade
A multicolinearidade cria direções quase redundantes no espaço de atributos → valores singulares pequenos. A regressão ridge amortece essas direções, de modo que os coeficientes param de “explodir” para ajustar ruído.
Interpretação Probabilística (Estimativa MAP)
A regressão ridge é equivalente à estimação de máxima a posteriori (maximum a posteriori, MAP) sob:
- Verossimilhança (likelihood): (y \mid X,\beta \sim \mathcal{N}(X\beta, \sigma^2 I))
- A priori (prior): (\beta \sim \mathcal{N}(0, \tau^2 I))
Esse a priori Gaussiano (Gaussian prior) prefere coeficientes pequenos. A penalidade da regressão ridge corresponde ao log negativo do a priori. A força de regularização se relaciona com a razão das variâncias (aproximadamente (\lambda \propto \sigma^2/\tau^2)).
Essa visão probabilística é útil ao conectar a regressão ridge a modelos lineares bayesianos e à estimação de incerteza.
Considerações Práticas
Escalonamento de atributos é (geralmente) essencial
Como a regressão ridge penaliza (\sum_j \beta_j^2), a penalidade não é invariante ao escalonamento dos atributos:
- Se um atributo é medido em milhares e outro em frações, a regressão ridge os penalizará de forma desigual.
- Prática padrão: padronizar (standardize) os atributos (média zero, variância unitária) antes da regressão ridge.
Essa é a mesma motivação de Escalonamento de Atributos (Feature Scaling).
Fluxo de trabalho comum:
- Separar treino/validação
- Ajustar um escalonador apenas nos atributos de treino
- Transformar treino e validação
- Ajustar a regressão ridge
E quanto a variáveis categóricas?
Se você codifica one-hot (one-hot encode) categorias, a regressão ridge também encolherá esses coeficientes indicadores. Isso geralmente é adequado, mas considere:
- Categorias raras podem ser fortemente encolhidas
- Para categóricas com alta cardinalidade, considere codificação pelo alvo (target encoding) ou outros esquemas (com cuidado para evitar vazamento de dados (leakage))
Tratamento do intercepto
A maioria das bibliotecas não penaliza o intercepto:
- Seja centralizando (X) e (y)
- Ou ajustando (b) separadamente enquanto penaliza apenas (\beta)
Escolhendo \(\lambda\) (ajuste da força de regularização)
Não existe um (\lambda) universalmente correto. Ele geralmente é selecionado por validação cruzada (cross-validation):
- Escolha uma grade de valores de (\lambda) (frequentemente espaçados em escala log)
- Avalie o desempenho preditivo com validação cruzada k-fold
- Escolha o melhor (\lambda) (ou um modelo mais simples dentro de um erro-padrão do melhor)
Veja Validação Cruzada (Cross-Validation).
Heurística para uma grade:
- (\lambda \in {10^{-4}, 10^{-3}, \dots, 10^{4}}) (depende do escalonamento e do problema)
Trajetória de regularização (regularization path)
À medida que (\lambda) aumenta:
- os coeficientes encolhem suavemente em direção a zero
- ao contrário do lasso, os coeficientes tipicamente não chegam exatamente a zero (então a regressão ridge não é um seletor de atributos)
Exemplo Prático (Python / scikit-learn)
Este exemplo cria atributos correlacionados, compara OLS vs regressão ridge e ajusta (\lambda) via validação cruzada.
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
# Make data with correlated features by mixing a smaller latent set
rng = np.random.RandomState(0)
n, p, latent = 300, 20, 5
Z = rng.randn(n, latent)
A = rng.randn(latent, p)
X = Z @ A + 0.1 * rng.randn(n, p) # correlated columns
beta_true = rng.randn(p)
y = X @ beta_true + 5.0 * rng.randn(n)
# Train/test split
idx = rng.permutation(n)
train, test = idx[:200], idx[200:]
X_train, X_test = X[train], X[test]
y_train, y_test = y[train], y[test]
# OLS baseline (with scaling for fairness)
ols = Pipeline([
("scaler", StandardScaler()),
("model", LinearRegression())
])
ols.fit(X_train, y_train)
y_pred_ols = ols.predict(X_test)
print("OLS test MSE:", mean_squared_error(y_test, y_pred_ols))
# Ridge with CV over alpha (= lambda in many libraries)
ridge = Pipeline([
("scaler", StandardScaler()),
("model", Ridge())
])
param_grid = {"model__alpha": np.logspace(-4, 4, 25)}
cv = GridSearchCV(ridge, param_grid=param_grid, scoring="neg_mean_squared_error", cv=5)
cv.fit(X_train, y_train)
print("Best ridge alpha:", cv.best_params_["model__alpha"])
y_pred_ridge = cv.predict(X_test)
print("Ridge test MSE:", mean_squared_error(y_test, y_pred_ridge))
Resultado típico: a regressão ridge produz um MSE de teste menor do que o OLS quando os atributos são fortemente correlacionados e há ruído.
Interpretando coeficientes na prática
Após o escalonamento, os coeficientes da regressão ridge correspondem a atributos padronizados. Se você quiser coeficientes nas unidades originais, deve levar em conta o escalonamento (muitas bibliotecas expõem métodos auxiliares, ou você pode reverter a transformação manualmente).
Ridge e PCA (Análise de Componentes Principais (Principal Component Analysis, PCA))
A regressão ridge está intimamente relacionada à geometria da Análise de Componentes Principais (Principal Component Analysis, PCA).
- A análise de componentes principais encontra direções ortogonais (componentes principais) ordenadas por variância em (X).
- Na visão via SVD acima, a regressão ridge encolhe componentes dos coeficientes mais nas direções de baixa variância ((\sigma_k) pequeno).
Comparação: Ridge vs Regressão por Componentes Principais (Principal Component Regression, PCR)
Regressão por Componentes Principais:
- Rodar PCA em (X)
- Manter os (K) principais componentes
- Regressar (y) nesses (K) componentes
Isso é um corte duro: componentes descartados recebem coeficiente 0.
Ridge:
- Mantém todos os componentes, mas aplica um encolhimento suave: [ \text{fator de encolhimento}_k = \frac{\sigma_k^2}{\sigma_k^2 + \lambda} ]
Implicação prática:
- A regressão por componentes principais pode funcionar bem se os componentes descartados forem principalmente ruído.
- A regressão ridge costuma ser mais robusta porque não força um corte abrupto; ela apenas reduz o peso de direções instáveis de forma gradual.
Relação com Outros Métodos de Regularização
Ridge vs Regressão Lasso (Lasso Regression)
Regressão Lasso (Lasso Regression) usa uma penalidade L1:
[ \min_{\beta}; \frac{1}{2n}|y - X\beta|_2^2 + \lambda |\beta|_1 ]
Principais diferenças:
- Ridge (L2): encolhe coeficientes, mas geralmente os mantém diferentes de zero.
- Lasso (L1): pode levar alguns coeficientes a exatamente zero → realiza seleção de atributos.
- Sob multicolinearidade forte, o lasso pode escolher um atributo e descartar outros; a regressão ridge tende a manter grupos de atributos correlacionados juntos (encolhidos de forma similar).
Se você quer estabilidade com preditores correlacionados, a regressão ridge costuma ser preferível; se você quer esparsidade/interpretabilidade, o lasso pode ser preferível.
Rede elástica (Elastic Net): um híbrido
Rede elástica (Elastic Net) combina L1 e L2:
[ \lambda_1 |\beta|_1 + \lambda_2 |\beta|_2^2 ]
Ela pode:
- induzir esparsidade (como o lasso)
- manter grupos de atributos correlacionados de forma mais adequada (como a regressão ridge)
Ridge como “decaimento de pesos” no aprendizado profundo
Em muitos modelos treinados com otimização baseada em gradiente (incluindo redes neurais), uma penalidade L2 nos pesos costuma ser chamada de decaimento de pesos (weight decay). Conceitualmente, é uma regularização no estilo ridge aplicada aos parâmetros do modelo.
Quando Você Deve Usar Regressão Ridge?
A regressão ridge é um baseline forte quando:
- Você suspeita que muitos atributos são relevantes, mas cada efeito pode ser pequeno
- Preditores são correlacionados (comum em dados socioeconômicos, biomédicos, embeddings de texto, dados de sensores)
- Você precisa de um modelo linear estável em vez de seleção esparsa de atributos
- (p) é grande em relação a (n), e o OLS seria instável
Ela também é comumente usada como componente dentro de fluxos de trabalho mais amplos (engenharia de atributos + regressão ridge; ridge com kernel (kernel ridge); variantes de classificação ridge (ridge classification variants)).
Limitações e Armadilhas Comuns
- Não é um seletor de atributos: coeficientes raramente se tornam exatamente zero.
- Escalonamento importa: não padronizar pode tornar o ajuste de (\lambda) sem sentido e distorcer o encolhimento entre atributos.
- Interpretabilidade muda: coeficientes são enviesados em direção a zero; interprete-os como associações regularizadas, não como estimativas não enviesadas.
- Outliers: a regressão ridge ainda usa erro quadrático, então outliers fortes podem dominar. Considere variantes de regressão robusta se necessário.
Resumo
A regressão ridge é regressão linear com regularização L2 que resolve:
[ \min_{\beta, b}; \frac{1}{2n}|y - (X\beta + b)|_2^2 + \lambda |\beta|_2^2 ]
Ela tem uma solução em forma fechada (sob suposições padrão/centralização):
[ \hat{\beta} = (X^T X + \lambda I)^{-1} X^T y ]
Ao encolher coeficientes — especialmente ao longo de direções mal determinadas, de baixa variância — a regressão ridge reduz variância, melhora a estabilidade sob multicolinearidade e frequentemente melhora a generalização. Na prática, ela deve ser combinada com escalonamento de atributos e (\lambda) escolhido via Validação Cruzada. Conceitualmente, ela se conecta naturalmente à Análise de Componentes Principais e fica ao lado de outros regularizadores como Regressão Lasso e Rede elástica.