move84

배깅(Bagging)과 부스팅(Boosting): 앙상블 방법론 완벽 분석 본문

머신러닝

배깅(Bagging)과 부스팅(Boosting): 앙상블 방법론 완벽 분석

move84 2025. 4. 12. 15:21
반응형

배깅과 부스팅은 머신러닝에서 강력한 성능을 제공하는 앙상블 방법론입니다. 이 두 기법은 여러 개의 약한 학습기(weak learner)를 결합하여 하나의 강력한 학습기(strong learner)를 만드는 데 사용됩니다. 본 포스트에서는 배깅과 부스팅의 기본 개념, 작동 원리, 장단점, 그리고 실제 코드 예제를 통해 자세히 알아보겠습니다.


🚀 배깅(Bagging)이란?
배깅(Bagging)은 Bootstrap Aggregating의 약자로, 통계적 샘플링 기법인 부트스트랩(Bootstrap)을 사용하여 여러 개의 데이터셋을 생성하고, 각 데이터셋에 대해 독립적으로 학습된 모델들을 결합하는 앙상블 방법입니다. 배깅의 핵심은 데이터의 중복을 허용하는 리샘플링(Resampling)을 통해 다양한 데이터셋을 만들고, 이 데이터셋들을 기반으로 여러 모델을 학습시킨다는 점입니다.


🛠️ 배깅의 작동 원리

  1. 부트스트랩 샘플링(Bootstrap Sampling): 원본 데이터셋에서 중복을 허용하여 N개의 데이터셋을 생성합니다. 각 데이터셋은 원본 데이터셋과 크기가 같지만, 일부 샘플은 여러 번 포함될 수 있고, 일부 샘플은 아예 포함되지 않을 수도 있습니다.
  2. 개별 모델 학습: 각 부트스트랩 데이터셋에 대해 독립적으로 학습된 모델을 생성합니다. 일반적으로 결정 트리(Decision Tree)와 같은 불안정한(unstable) 모델이 배깅에 적합합니다.
  3. 예측 결합(Aggregation): 모든 모델의 예측 결과를 결합하여 최종 예측을 수행합니다. 분류(Classification) 문제에서는 다수결 투표(Majority Voting) 방식을 사용하고, 회귀(Regression) 문제에서는 평균(Averaging)을 사용합니다.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score

# 가상 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 배깅 분류기 생성 및 학습
bagging_clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(),
                                n_estimators=100,  # 트리의 개수
                                random_state=42)
bagging_clf.fit(X_train, y_train)

# 예측 및 평가
y_pred = bagging_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"배깅 정확도: {accuracy:.4f}")

👍 배깅의 장점과 단점
장점:

  • 분산 감소(Variance Reduction): 배깅은 모델의 분산을 줄여 과적합(Overfitting)을 방지합니다. 여러 모델의 예측을 평균화함으로써 개별 모델의 오류를 상쇄시키는 효과가 있습니다.
  • 병렬 처리(Parallel Processing): 각 모델이 독립적으로 학습되므로 병렬 처리가 가능하여 학습 시간을 단축할 수 있습니다.
  • 높은 안정성(Stability): 데이터의 작은 변화에 덜 민감하게 반응하여 안정적인 성능을 유지합니다.

단점:

  • 편향 증가(Bias Increase): 배깅은 분산을 줄이는 데 효과적이지만, 편향을 증가시킬 수 있습니다. 특히, 원본 모델의 성능이 매우 낮을 경우 배깅을 적용해도 성능 향상이 미미할 수 있습니다.
  • 해석의 어려움(Interpretability): 앙상블 모델은 개별 모델에 비해 해석이 어렵습니다.

🚀 부스팅(Boosting)이란?
부스팅(Boosting)은 약한 학습기를 순차적으로 학습시키면서, 이전 모델의 오류를 보완하는 방식으로 모델을 개선해 나가는 앙상블 방법입니다. 배깅과는 달리, 부스팅은 각 모델이 독립적으로 학습되지 않고, 이전 모델의 결과를 반영하여 다음 모델을 학습합니다. 부스팅의 핵심은 이전 모델이 잘못 예측한 데이터에 더 큰 가중치를 부여하여, 다음 모델이 이러한 오류를 줄이도록 유도하는 것입니다.


🛠️ 부스팅의 작동 원리

  1. 초기 모델 학습: 전체 데이터셋에 대해 초기 모델을 학습합니다.
  2. 가중치 업데이트: 초기 모델이 잘못 예측한 데이터에 더 큰 가중치를 부여합니다. 올바르게 예측한 데이터에는 더 작은 가중치를 부여합니다.
  3. 다음 모델 학습: 업데이트된 가중치를 사용하여 다음 모델을 학습합니다. 가중치가 높은 데이터에 더 집중하여 학습합니다.
  4. 반복: 2단계와 3단계를 반복하여 여러 개의 모델을 순차적으로 학습합니다.
  5. 예측 결합: 모든 모델의 예측 결과를 결합하여 최종 예측을 수행합니다. 모델의 성능에 따라 가중치를 부여하여 결합할 수도 있습니다.
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score

# 가상 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# AdaBoost 분류기 생성 및 학습
adaboost_clf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1),  # 약한 학습기 설정
                                    n_estimators=100,  # 모델 개수
                                    random_state=42)
adaboost_clf.fit(X_train, y_train)

# 예측 및 평가
y_pred = adaboost_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"AdaBoost 정확도: {accuracy:.4f}")

👍 부스팅의 장점과 단점
장점:

  • 높은 정확도(High Accuracy): 부스팅은 약한 학습기를 결합하여 강력한 학습기를 만들기 때문에 높은 정확도를 제공합니다.
  • 편향 감소(Bias Reduction): 이전 모델의 오류를 보완하는 방식으로 학습하므로 편향을 줄이는 데 효과적입니다.

단점:

  • 과적합 가능성(Overfitting Risk): 부스팅은 학습 데이터에 지나치게 최적화될 수 있어 과적합이 발생할 가능성이 높습니다.
  • 학습 시간 증가(Increased Training Time): 모델을 순차적으로 학습해야 하므로 배깅에 비해 학습 시간이 오래 걸릴 수 있습니다.
  • 이상치 민감성(Sensitivity to Outliers): 이상치에 민감하게 반응하여 성능이 저하될 수 있습니다.

🆚 배깅 vs 부스팅: 주요 차이점

특징 배깅(Bagging) 부스팅(Boosting)
학습 방식 병렬 학습 (Parallel Learning) 순차 학습 (Sequential Learning)
데이터 샘플링 부트스트랩 샘플링 (Bootstrap Sampling) 가중치 기반 샘플링 (Weight-based Sampling)
모델 결합 방식 다수결 투표 또는 평균 (Majority Voting or Averaging) 가중치 기반 결합 (Weighted Averaging)
주요 목표 분산 감소 (Variance Reduction) 편향 감소 (Bias Reduction)
과적합 방지 효과적 (Effective) 주의 필요 (Requires Caution)

🎯 결론
배깅과 부스팅은 앙상블 방법론의 핵심적인 기법으로, 각각의 장단점을 이해하고 적절한 상황에 맞게 활용하는 것이 중요합니다. 배깅은 분산을 줄여 과적합을 방지하는 데 효과적이며, 부스팅은 편향을 줄여 높은 정확도를 달성하는 데 유용합니다. 실제 머신러닝 프로젝트에서는 데이터의 특성과 문제의 요구사항을 고려하여 최적의 앙상블 방법을 선택해야 합니다.


📝 핵심 용어 정리

  • 배깅 (Bagging): Bootstrap Aggregating의 약자
  • 부스팅 (Boosting): 약한 학습기를 강화하는 앙상블 방법
  • 앙상블 (Ensemble): 여러 모델을 결합하는 방법
  • 분산 (Variance): 예측값들이 흩어진 정도
  • 편향 (Bias): 예측값과 실제값의 차이
  • 과적합 (Overfitting): 학습 데이터에 지나치게 최적화된 상태
반응형