Ridge 회귀 vs Lasso 회귀

발행: (2026년 2월 4일 오전 05:02 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

죄송합니다만, 번역하려는 전체 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다. 현재는 링크만 제공되어 있어 실제 내용이 없으므로 번역이 불가능합니다. 텍스트를 복사해서 알려 주시면 바로 도와드리겠습니다.

소개

선형 회귀는 데이터 과학자 도구 상자에서 가장 기본적인 도구 중 하나입니다. 그 핵심에는 **Ordinary Least Squares (OLS)**가 있으며, 이는 예측값과 실제값 사이의 제곱 차이 합을 최소화하여 모델 파라미터를 추정하는 방법입니다.

많은 실제 문제—예를 들어 주택 가격 예측—에서 데이터셋은 종종 많은 특성, 상관된 변수, 그리고 잡음이 많은 입력을 포함합니다. 이러한 경우 전통적인 OLS 회귀는 불안정해지고 과적합되기 쉬워집니다. 이러한 문제를 해결하기 위해 정규화 기법이 사용됩니다. 가장 중요한 정규화 기반 모델 두 가지는:

  • Ridge Regression (L2 regularisation)
  • Lasso Regression (L1 regularisation)

Ordinary Least Squares (OLS)

OLS는 예측값과 실제값 사이의 제곱 잔차 합을 최소화함으로써 모델 파라미터를 추정합니다:

[ \text{Loss}{\text{OLS}} = \sum{i=1}^{n} (y_i - \hat{y}_i)^2 ]

여기서 (\hat{y}_i)는 관측치 (i)에 대한 예측 가격을 나타냅니다.

OLS는 작고 정제된 데이터셋에서는 잘 작동하지만, 다음과 같은 경우에는 어려움을 겪습니다:

  • 특성이 많이 존재할 때
  • 특성들 간에 높은 상관관계가 있을 때 (다중공선성)
  • 데이터에 노이즈가 포함되어 있을 때

이러한 상황은 과적합을 초래합니다: 모델이 훈련 데이터에서는 잘 작동하지만, 보지 못한 데이터에서는 성능이 저조합니다.

선형 회귀에서의 정규화

정규화는 손실 함수에 페널티 항을 추가하여 모델이 복잡성에 대해 비용을 부과합니다. 이제 모델은 단순히 오류를 최소화하는 것이 아니라 정확도와 단순성 사이의 균형을 맞춰야 합니다.

[ \text{Loss} = \text{Error} + \text{Penalty} ]

큰 계수는 억제되며, 이는 일반적으로 새로운 데이터에 대해 더 잘 일반화되는 모델을 만들게 됩니다.

릿지 회귀 (L2 정규화)

Ridge 회귀는 OLS 손실 함수에 계수들의 제곱합에 비례하는 L2 페널티를 추가하여 수정합니다.

[ \text{Loss}{\text{Ridge}} = \underbrace{\sum{i=1}^{n}(y_i - \hat{y}i)^2}{\text{RSS}} ;+; \lambda \underbrace{\sum_{j=1}^{p}\beta_j^{2}}_{\text{L2 penalty}} ]

  • (\lambda \ge 0)는 정규화 파라미터입니다.
  • 절편 (\beta_0)은 벌점이 적용되지 않습니다.

개념적 효과

  • 계수를 부드럽게 축소합니다.
  • 모델 분산을 감소시킵니다.
  • 모든 특성을 유지합니다.
  • 다중공선성을 잘 처리합니다.

주요 특성

Ridge는 특성 선택을 수행하지 않으며; 계수는 감소하지만 절대 정확히 0이 되지는 않습니다.

파이썬 예제

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1.0)          # alpha == λ
ridge.fit(X_train_scaled, y_train)

y_pred_ridge = ridge.predict(X_test_scaled)

라쏘 회귀 (L1 정규화)

라쏘는 계수들의 절대값 합인 L1 패널티를 추가합니다.

[ \text{Loss}{\text{Lasso}} = \underbrace{\sum{i=1}^{n}(y_i - \hat{y}i)^2}{\text{RSS}} ;+; \lambda \underbrace{\sum_{j=1}^{p}|\beta_j|}_{\text{L1 penalty}} ]

  • (\lambda)는 정규화 강도를 조절합니다.

개념적 효과

  • 희소(sparse) 모델을 생성합니다.
  • 일부 계수를 정확히 0으로 만들도록 강제합니다.
  • 약한 특성을 자동으로 제거합니다.

주요 특성

라쏘는 **특성 선택(feature selection)**을 수행하여 더 간단하고 해석하기 쉬운 모델을 만듭니다.

파이썬 예제

from sklearn.linear_model import Lasso

lasso = Lasso(alpha=0.1)          # alpha == λ
lasso.fit(X_train_scaled, y_train)

y_pred_lasso = lasso.predict(X_test_scaled)

Comparing Ridge and Lasso

AspectRidgeLasso
Feature selection모든 특성을 유지 (계수는 축소됨)일부 계수를 0으로 설정 → 자동 선택
Behaviour with correlated features상관된 예측 변수들 사이에 가중치를 부드럽게 분배하나의 예측 변수를 선택하고 나머지는 0으로 만듦
Interpretability“가격은 10개의 모든 요인에 따라 다르며 중요도가 다르게 나타납니다.”“가격은 주로 크기, 위치, 연령에 의존하며 다른 요인은 중요하지 않습니다.”

두 개의 상관된 예측 변수(크기와 방 수, (r = 0.85))에 대한 예시:

  • Ridge: Size = $120/sq ft, Rooms = $8,000/room (두 변수 모두 유지)
  • Lasso: Size = $180/sq ft, Rooms = $0 (하나를 선택하고 다른 것을 제외)

적용 시나리오: 주택 가격 예측

데이터셋에는 다음과 같은 항목이 포함되어 있다고 가정합니다:

  • 주택 면적
  • 침실 수
  • 도심까지 거리
  • 인근 학교 수
  • 여러 잡음이 많거나 약한 특성

Ridge를 사용할 때

  • 대부분의 특성이 가격에 영향을 미칠 것으로 예상됩니다
  • 다중공선성이 존재합니다
  • 안정적인 예측이 필요합니다

Lasso를 사용할 때

  • 실제로 중요한 특성은 몇 개에 불과합니다
  • 많은 변수가 잡음을 추가합니다
  • 모델 해석 가능성이 중요합니다

Python Implementation

Data Preparation

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.metrics import mean_squared_error

# Assume df is a pandas DataFrame containing the data
X = df[['size', 'bedrooms', 'distance_city', 'schools_nearby', 'noise_feature']]
y = df['price']

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled  = scaler.transform(X_test)

OLS Model

ols = LinearRegression()
ols.fit(X_train_scaled, y_train)

y_pred_ols = ols.predict(X_test_scaled)
mse_ols = mean_squared_error(y_test, y_pred_ols)
print(f'OLS MSE: {mse_ols:.2f}')

Ridge Model

ridge = Ridge(alpha=1.0)
ridge.fit(X_train_scaled, y_train)

y_pred_ridge = ridge.predict(X_test_scaled)
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
print(f'Ridge MSE: {mse_ridge:.2f}')

Lasso Model

lasso = Lasso(alpha=0.1)
lasso.fit(X_train_scaled, y_train)

y_pred_lasso = lasso.predict(X_test_scaled)
mse_lasso = mean_squared_error(y_test, y_pred_lasso)
print(f'Lasso MSE: {mse_lasso:.2f}')

주택 가격에 적합한 모델 선택

  • Ridge Regression모든 특성이 의미 있게 기여할 때 선호됨 (예: 크기, 침실 수, 학교, 거리).
  • Lasso Regression몇몇 특성만이 실제로 중요하고 나머지는 잡음일 때 더 적합하며, 내장된 특성 선택 기능 덕분이다.

모델 평가 및 과적합 탐지

  • 높은 훈련 점수지만 낮은 테스트 점수 → 과적합.
  • 훈련 점수와 테스트 점수가 유사함 → 좋은 일반화.

잔차 분석도 중요한 역할을 합니다. 잔차는 무작위로 분포해야 하며, 눈에 보이는 패턴은 누락된 변수나 비선형 관계를 나타낼 수 있습니다.

결론

  • OLS는 간단하지만 복잡한 데이터셋에서 과적합이 발생하기 쉽습니다.
  • RidgeLasso 회귀는 정규화를 도입하여 안정성과 일반화를 향상시킵니다.
    • Ridge는 모든 특성이 중요할 때 가장 적합합니다.
    • Lasso는 희소하고 해석 가능한 모델에 선호됩니다.

이러한 기법을 언제, 어떻게 적용해야 하는지를 이해하는 것은 시험은 물론 실제 머신러닝 문제에서도 필수적입니다.

Back to Blog

관련 글

더 보기 »

AI가 당신에게 뺨을 때릴 때

AI가 당신을 뺨 때릴 때: Adama에서 Claude가 생성한 코드 디버깅 AI에게 복잡한 기능을 “vibe‑code”하게 맡겨본 적이 있나요? 그 결과 미묘한 버그를 디버깅하느라 몇 시간을 보내게 됩니다.