단순 앙상블을 넘어서: XGBoost 기반 Stacking으로 성능 극대화하기

Bean·2025년 5월 11일
0

인공지능

목록 보기
27/123

단순 앙상블을 넘어서: XGBoost 기반 Stacking으로 성능 극대화하기

머신러닝과 딥러닝 모델을 여러 개 학습한 후, 그 결과를 결합하는 앙상블(Ensemble)은 성능 향상을 위한 대표적인 기법입니다. 특히 모델들이 서로 다른 구조나 특성을 가질 경우, 적절한 앙상블 전략은 단일 모델보다 훨씬 나은 결과를 만들어냅니다.

이번 글에서는 단순 평균이나 다수결보다 한 단계 진보한 방식인 XGBoost 기반 Stacking 기법에 대해 자세히 설명드리겠습니다.


단순 앙상블의 한계

단순 앙상블은 다음과 같은 방식으로 구현됩니다:

  • 회귀 문제: 모델들의 예측값을 단순 평균
  • 분류 문제: 확률 평균 후 argmax, 또는 하드 보팅(다수결)

이 방식은 직관적이고 과적합 위험이 적다는 장점이 있지만,
모델 간 예측 신뢰도특정 상황에서의 강점을 전혀 고려하지 못합니다.


Stacking이란?

Stacking은 여러 모델의 예측값을 모아서, 이를 다시 메타 모델(meta-learner)에 학습시키는 방식입니다.
가장 널리 쓰이는 메타 모델 중 하나가 바로 XGBoost입니다.


왜 XGBoost를 메타 모델로 쓸까?

XGBoost는 다음과 같은 이유로 stacking에서 매우 강력한 성능을 발휘합니다:

1. 비선형 관계 학습

모델 A, B, C의 예측값 사이의 비선형적 조합을 학습할 수 있습니다.
단순 평균은 선형 결합만 가능하지만, XGBoost는 훨씬 복잡한 패턴을 포착합니다.

2. 모델 간 상호작용 반영

어떤 모델은 특정 클래스에 강하고, 다른 모델은 다른 클래스에 강할 수 있습니다.
XGBoost는 이러한 조건부 상호작용을 트리 분기로 자연스럽게 학습합니다.

3. 특성 선택 및 가중치 조정

모델의 예측이 신뢰할 수 없을 경우, 해당 모델의 출력을 무시하거나 낮은 가중치를 둘 수 있습니다.
이런 점에서 XGBoost는 단순 평균보다 훨씬 유연합니다.


어떻게 적용할까? (예시)

1. 여러 모델 훈련

model_a = train_model_a()
model_b = train_model_b()
model_c = train_model_c()

2. 예측값을 feature로 수집

probs_a = model_a.predict_proba(x_valid)
probs_b = model_b.predict_proba(x_valid)
probs_c = model_c.predict_proba(x_valid)

stack_input = np.concatenate([probs_a, probs_b, probs_c], axis=1)

3. XGBoost 학습

import xgboost as xgb

xgb_model = xgb.XGBClassifier(n_estimators=100, max_depth=4)
xgb_model.fit(stack_input, y_valid)

4. 테스트 데이터 예측

# 각 모델의 test 예측도 위와 같이 stack_input_test 생성
final_pred = xgb_model.predict(stack_input_test)

주의할 점

  • 데이터 누수 방지: Stacking은 반드시 validation 예측만 사용해야 하며, K-Fold cross-validation을 통해 out-of-fold 예측값을 쌓는 것이 이상적입니다.
  • 오버피팅 위험: 메타 모델이 너무 강력하면 validation set에 과적합할 수 있으므로 적절한 regularization과 검증이 중요합니다.
  • 다양성 있는 모델을 조합할수록 효과가 큽니다.

단순 앙상블 vs XGBoost Stacking 성능 비교 (예시)

방법Accuracy (Public LB)
단순 확률 평균86.5%
XGBoost Stacking87.8%

→ 다양한 Kaggle 대회에서도 Stacking이 눈에 띄는 성능 향상을 보여주는 경우가 많습니다.


마무리

단순한 앙상블은 빠르게 구현할 수 있는 장점이 있지만, 모델 간의 상호작용을 효과적으로 반영하고, 예측 신뢰도에 따라 다르게 가중치를 줄 수 있는 XGBoost 기반 Stacking은 그보다 한 단계 발전된 전략입니다.

딥러닝 모델 여러 개를 학습한 상황이라면, 그 예측값을 기반으로 XGBoost를 메타 모델로 사용해 보는 것을 강력히 추천드립니다.

profile
AI developer

0개의 댓글