LASSO와 Ridge

src/content/documents/machine-learning/lasso-vs-ridge-regularization.json

회귀계수에 패널티를 매겨 일반화 성능을 지킨다

회귀분석은 변수가 많아지고 서로 상관관계가 높아질수록 회귀계수가 불안정해지고, 훈련 데이터에만 맞춰지는 과적합 위험이 커진다. 정규화(Regularization)는 회귀계수의 크기 자체에 패널티를 부과해서 모델이 지나치게 복잡해지는 것을 막는 기법이다. 대표적인 방법이 L1 패널티를 쓰는 LASSO와 L2 패널티를 쓰는 Ridge다.

발표 자료 5장 제한으로 이해하기

30장짜리 발표 자료에 내용을 다 우겨넣으면 핵심이 안 보인다(과적합과 비슷하다). 교수가 “5장으로 줄이라”고 규칙을 준 상황이 정규화다. 줄이는 방식은 두 가지다.

  • Ridge (L2) — 모든 슬라이드의 글자를 조금씩 줄여서 5장에 다 눌러 담는다. 모든 변수를 남기되 전체적으로 영향력을 줄인다.

  • LASSO (L1) — 중요하지 않은 슬라이드는 통째로 삭제한다. 일부 변수의 계수를 정확히 0으로 만들어 아예 없앤다.

L1과 L2, 수식으로는 패널티 항의 차이

구분

LASSO (L1)

Ridge (L2)

패널티

회귀계수 절댓값의 합에 비례한 패널티

회귀계수 제곱합에 비례한 패널티

계수에 미치는 효과

일부 계수를 정확히 0으로 만든다 → 변수 선택 효과

모든 계수를 0 근처로 고르게 줄인다(shrinkage) → 변수는 유지

언제 유리한가

변수가 많고 그중 일부만 진짜 중요할 때, 해석 가능한 단순 모델이 필요할 때

변수들이 서로 상관관계(다중공선성)가 높고 모두 어느 정도씩 반영하고 싶을 때

alpha 시작값(scikit-learn 기준 경험칙)

0.1처럼 작은 값에서 조심스럽게 시작

1.0처럼 상대적으로 큰 값에서 시작

scikit-learn에서 두 값 모두 패널티 강도를 alpha 파라미터로 조절한다. alpha가 0에 가까우면 정규화 없는 일반 회귀와 같아지고, alpha가 커질수록 계수가 더 강하게 억제된다.

코드로 차이 확인하기

10개 변수 중 실제로 결과에 영향을 주는 변수는 3개뿐인 가상의 회귀 데이터를 만들어 두 모델을 비교해본다.

import numpy as np
from sklearn.linear_model import Lasso, Ridge
from sklearn.datasets import make_regression
from sklearn.preprocessing import StandardScaler

X, y, coef = make_regression(
    n_samples=200, n_features=10, n_informative=3,
    noise=5.0, coef=True, random_state=42,
)
X = StandardScaler().fit_transform(X)

lasso = Lasso(alpha=0.5).fit(X, y)
ridge = Ridge(alpha=1.0).fit(X, y)

print("실제로 의미 있는 변수 수:", int(np.sum(coef != 0)))
print("LASSO가 0이 아니라고 남긴 변수 수:", int(np.sum(np.abs(lasso.coef_) > 1e-6)))
print("Ridge가 0이 아니라고 남긴 변수 수:", int(np.sum(np.abs(ridge.coef_) > 1e-6)))
실제로 의미 있는 변수 수: 3
LASSO가 0이 아니라고 남긴 변수 수: 3
Ridge가 0이 아니라고 남긴 변수 수: 10

LASSO는 실제로 의미 있는 3개 변수만 남기고 나머지 7개의 계수를 정확히 0으로 만들었다. Ridge는 10개 변수를 모두 남기되, 크기를 줄여 값을 고르게 눌렀다. 이 예제처럼 “진짜 중요한 변수가 소수”라는 확신이 있다면 LASSO가 더 해석하기 쉬운 모델을 준다.

주의할 점

  • 변수들의 스케일이 다르면 패널티가 특정 변수에 불공평하게 걸린다 — 정규화 전 반드시 표준화(StandardScaler 등)를 먼저 적용한다.

  • LASSO는 서로 상관관계가 높은 변수 그룹 중 하나만 남기고 나머지를 0으로 만드는 경향이 있어, “중요하지 않아서 0”이 아니라 “대표로 하나만 남아서 0”일 수 있다.

  • 변수 선택과 다중공선성 완화를 동시에 원한다면 L1과 L2를 함께 쓰는 Elastic Net도 대안이 된다.

정리

LASSO와 Ridge 모두 회귀계수에 패널티를 부과해 과적합을 줄이는 정규화 기법이지만 방향이 다르다. LASSO(L1)는 일부 계수를 0으로 만들어 변수를 골라내고, Ridge(L2)는 모든 계수를 고르게 줄여 다중공선성을 완화한다. 변수 선택과 해석 가능성이 중요하면 LASSO, 상관관계 높은 변수를 모두 반영하고 싶다면 Ridge를 먼저 시도해볼 만하다.

참고 자료

댓글 0

댓글을 불러오는 중…