반응형
로버스트 피팅 (Robust Fitting)
- 이상치(outlier)에 덜 민감한 회귀 기법
- 일반적인 최소제곱법(OLS)이 이상치에 의해 회귀선이 크게 왜곡되는 문제를 완화
- 잔차 제곱합을 최소화하는 대신, 이상치에 덜 민감한 손실 함수를 사용



장점
- 이상치(outlier)에 대한 높은 견고성(robustness)
- 데이터의 잡음(noise)나 오염이 있는 경우 보다 안정적인 모델 생성
- 실제 산업 데이터(예: 센서 오차, 금융 데이터)에서 유용
단점
- 손실 함수가 비선형이라 계산량 증가
- 하이퍼파라미터(예: Huber의 δ) 튜닝 필요
- 이상치가 아닌 정상 데이터까지 영향력을 약화시킬 수 있음
- 예측 성능은 OLS보다 일반적으로 약간 낮음
한계 및 주의점
- 이상치가 너무 많거나 패턴이 복잡하면 로버스트 피팅조차 실패할 수 있음
- 이상치가 구조적 패턴(예: 다른 집단)이라면 제거하거나 무시하기보다 클러스터링이나 혼합모형 접근이 더 적합
- 모든 로버스트 모델은 일반적인 최소제곱보다 느림
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, HuberRegressor, RANSACRegressor, TheilSenRegressor
from sklearn.datasets import make_regression
# 1. 기본 데이터 생성
np.random.seed(42)
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = 2.5 * X.squeeze() + np.random.randn(100) * 2
# 2. 이상치 추가 (로버스트 피팅이 빛나는 부분)
outliers_X = np.random.uniform(0, 10, 10).reshape(-1, 1)
outliers_y = np.random.uniform(30, 50, 10)
X_out = np.vstack([X, outliers_X])
y_out = np.hstack([y, outliers_y])
# 3. 모델 정의
models = {
"OLS (LinearRegression)": LinearRegression(),
"HuberRegressor": HuberRegressor(),
"RANSACRegressor": RANSACRegressor(),
"TheilSenRegressor": TheilSenRegressor()
}
# 4. 학습 및 예측
x_line = np.linspace(0, 10, 100).reshape(-1, 1)
plt.figure(figsize=(10, 6))
plt.scatter(X_out, y_out, color='gray', alpha=0.6, label='data (with outlier)')
colors = ['r', 'g', 'b', 'orange']
for (name, model), color in zip(models.items(), colors):
model.fit(X_out, y_out)
y_pred = model.predict(x_line)
plt.plot(x_line, y_pred, color=color, lw=2, label=name)
# 5. 그래프 설정
plt.title("compare")
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.grid(True)
plt.show()

반응형
댓글