GW LABS

XGBoost 회귀 완전 정복: RMSE, MAE부터 Tweedie와 Gamma까지 최적 Objective 선택법 본문

MachineLearning

XGBoost 회귀 완전 정복: RMSE, MAE부터 Tweedie와 Gamma까지 최적 Objective 선택법

GeonWoo Kim 2025. 8. 25. 10:00

서론

XGBoost는 분류 문제뿐 아니라 회귀 문제에서도 강력한 성능을 발휘하는 알고리즘입니다. 특히 비선형 데이터, 결측치 처리, 대용량 데이터셋에 효과적이라는 장점이 있습니다. 그러나 회귀 문제에서는 단순히 reg:squarederror 같은 기본 Objective만 사용하는 경우가 많습니다. 실제로 데이터의 분포와 목적에 맞춰 Objective를 선택하고, 적절한 하이퍼파라미터를 조정하면 모델의 성능을 극대화할 수 있습니다.

이번 글에서는 XGBoost 회귀(Objective function) 활용법, RMSE와 MAE의 차이, Tweedie, Gamma 분포 회귀 적용법, 그리고 주요 하이퍼파라미터 튜닝 방법을 정리하겠습니다.


본론

1. XGBoost 회귀 Objective와 평가 지표 선택

XGBoost는 다양한 회귀용 Objective를 제공합니다. 데이터 분포와 목적에 맞게 선택해야 합니다.

  • reg:squarederror

    • 기본값. 평균제곱오차(MSE)를 최소화.
    • RMSE(Root Mean Squared Error) 지표와 궁합이 좋음.
    • 예측값이 정규분포적 특성을 가질 때 적합.
  • reg:squaredlogerror

    • 로그 스케일 오차 최소화.
    • target 값이 지수적 성장 형태(예: 매출액, 가격)일 때 유용.
    • 예측값이 음수가 되지 않는다는 점을 고려해야 함.
  • reg:gamma

    • 양수 실수값(보험료, 대기 시간, 수익 등)에 적합.
    • 분포가 오른쪽 꼬리가 긴 형태(skewed distribution)일 때 추천.
  • reg:tweedie

    • Tweedie 분포 기반 회귀.
    • 0 값이 다수 존재하면서 동시에 양수 연속값도 있는 경우 유용 (예: 보험 청구 건수, 날씨 데이터 강수량).
    • tweedie_variance_power 하이퍼파라미터로 분포 형태 제어 가능:
      • 1 < power < 2 → 포아송+감마 혼합
      • power = 1 → 포아송 근사
      • power = 2 → 감마 근사

평가 지표 선택

  • RMSE (Root Mean Squared Error)
    • 큰 오차에 민감 → 이상치 영향 반영 필요할 때 사용.
  • MAE (Mean Absolute Error)
    • 이상치에 둔감 → 예측값 분포가 고르게 퍼져 있고 극단값이 문제되지 않을 때 사용.
  • Poisson Deviance / Tweedie Deviance
    • reg:tweedie, reg:gamma 모델에서 활용 가능.

2. 회귀 학습에서 중요한 하이퍼파라미터

회귀 문제에서 성능을 좌우하는 주요 하이퍼파라미터는 다음과 같습니다.

  • 학습률(eta)

    • 기본값: 0.3
    • 너무 크면 과적합, 너무 작으면 학습이 느려짐. 일반적으로 0.01~0.1 권장.
  • 트리 깊이(max_depth)

    • 모델 복잡도를 조절.
    • 깊을수록 비선형 패턴을 잘 잡지만 과적합 위험 증가.
  • 정규화 파라미터(lambda, alpha)

    • L2(lambda), L1(alpha) 정규화 적용.
    • 다중공선성이나 잡음을 줄이는 데 효과적.
  • max_delta_step (특히 reg:logistic, reg:gamma, reg:tweedie에서 중요)

    • 모델의 수렴 안정성을 높이는 역할.
    • 포아송/감마 계열 회귀에서는 1~10 범위에서 조정.
  • tweedie_variance_power

    • reg:tweedie 전용.
    • 1.1~1.9 범위에서 탐색 → 데이터 분포에 맞게 최적화.

3. 예제 코드: 다양한 회귀 Objective 적용

아래는 사이킷런 API 기반의 XGBoost 회귀 예제입니다.

import xgboost as xgb
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error

# 예시 데이터 생성
X, y = make_regression(n_samples=5000, n_features=20, noise=0.3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# XGBoost 회귀 모델 (Tweedie objective 적용)
params = {
    "objective": "reg:tweedie",
    "tweedie_variance_power": 1.5,
    "learning_rate": 0.05,
    "max_depth": 6,
    "n_estimators": 300,
    "eval_metric": "mae"
}

model = xgb.XGBRegressor(**params)
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 평가
rmse = mean_squared_error(y_test, y_pred, squared=False)
mae = mean_absolute_error(y_test, y_pred)

print(f"RMSE: {rmse:.4f}, MAE: {mae:.4f}")

결론

XGBoost 회귀에서 성능을 극대화하려면 데이터의 분포와 특성에 맞는 Objective를 선택하는 것이 중요합니다. RMSE와 MAE를 적절히 비교하며 평가 지표를 선택하고, reg:gamma, reg:tweedie 같은 특수 목적 Objective를 활용하면 일반적인 reg:squarederror보다 훨씬 나은 성능을 얻을 수 있습니다.

👉 정리하면, XGBoost 회귀의 핵심은 올바른 Objective 선택과 하이퍼파라미터 최적화에 있다는 점입니다.

Comments