본문 바로가기
수학&통계학

앙상블 기법

by 코스믹구구 2026. 5. 14.
728x90
한 명의 전문가보다 여러 전문가의 의견을 모으면 더 좋은 결론이 나온다.
머신러닝에서도 마찬가지다. 하나의 강력한 모델보다 여러 모델을 결합하는 앙상블(Ensemble)이 대부분의 경우 더 높은 성능을 낸다.
Kaggle 같은 데이터 분석 경진대회에서 상위권을 차지하는 솔루션은 거의 항상 앙상블을 사용한다.
이번 글에서는 배깅, 랜덤 포레스트, 부스팅, 스태킹의 원리와 차이를 정리한다.

1. 앙상블이란? — 왜 여러 모델을 합치는가

단일 모델은 두 가지 오류 원인을 동시에 최소화하기 어렵다.

편의(Bias)
모델이 데이터의 실제 패턴을 제대로 학습하지 못하는 오류.
모델이 너무 단순할 때 발생.
과소적합의 원인
분산(Variance)
훈련 데이터의 작은 변화에도 예측이 크게 달라지는 오류.
모델이 너무 복잡하거나 데이터에 과하게 맞춰질 때 발생.
과적합의 원인

앙상블은 이 두 문제를 전략적으로 해결한다.

  • 배깅(Bagging): 여러 모델을 병렬로 학습 → 분산(Variance)을 줄인다
  • 부스팅(Boosting): 모델을 순차적으로 개선 → 편의(Bias)를 줄인다
  • 스태킹(Stacking): 여러 모델의 출력을 메타 모델로 결합 → 둘 다 줄인다
💡 앙상블이 효과적인 이유 — 다양성(Diversity)
앙상블이 효과적이려면 각 모델이 서로 다른 오류를 만들어야 한다.
모든 모델이 같은 실수를 하면 결합해도 그 실수가 그대로 남는다.
모델들이 서로 다른 실수를 하면 결합 시 실수들이 상쇄되어 더 나은 예측이 나온다.
→ 앙상블은 다양한 모델을 만드는 것이 핵심이다.

 

2. 배깅 (Bagging) — Bootstrap Aggregating

개념

배깅은 부트스트랩 샘플링(Bootstrap Sampling)으로 여러 데이터셋을 만들고, 각각에 독립적으로 모델을 학습시킨 뒤, 결과를 합치는(Aggregating) 방법이다.

부트스트랩 샘플링이란?

원본 데이터 n개에서 복원 추출로 n개를 뽑는 것이다. 복원 추출이므로 같은 데이터가 여러 번 선택될 수도 있고, 선택되지 않을 수도 있다. 통계적으로 부트스트랩 샘플에 포함되지 않는 데이터는 약 36.8%다. 이 나머지 데이터를 OOB(Out-of-Bag) 샘플이라 하며, 자체 검증에 활용한다.

💡 OOB(Out-of-Bag) 오류란?
각 모델은 부트스트랩 샘플에 없던 OOB 데이터로 자체 검증을 할 수 있다.
모든 모델의 OOB 오류를 평균한 것이 OOB 오류율이다.
→ 별도의 교차 검증 없이도 모델 성능을 추정할 수 있다는 큰 장점이다.

 

배깅의 결합 방식

  • 분류: 각 모델의 예측 클래스를 다수결로 결정 (Hard Voting)
  • 분류(확률 기반): 각 모델의 예측 확률을 평균 후 가장 높은 클래스 선택 (Soft Voting)
  • 회귀: 각 모델의 예측값을 단순 평균

 

3. 랜덤 포레스트 (Random Forest)

개념

랜덤 포레스트는 배깅의 확장이다. 배깅처럼 부트스트랩 샘플로 여러 의사결정나무를 학습하되, 각 분할 시 무작위로 선택한 일부 특성만 고려한다는 점이 핵심 차이다.

배깅
부트스트랩 샘플링으로 데이터 다양성 확보
각 분할 시 모든 특성 고려
→ 데이터만 다르고 모델 구조는 비슷할 수 있음
랜덤 포레스트
부트스트랩 샘플링 + 특성 무작위 선택
각 분할 시 √p개 (분류) 또는 p/3개 (회귀) 특성만 고려
→ 트리들이 서로 더 다양해져 상관관계 감소
💡 왜 특성을 무작위로 선택하는가?
배깅에서 매우 중요한 특성 하나가 있다고 하자. 모든 트리가 이 특성을 먼저 사용하게 된다.
결과적으로 트리들이 서로 비슷해지고 (상관 관계가 높아짐), 앙상블 효과가 줄어든다.
랜덤 포레스트는 특성도 무작위로 선택해서 트리 사이의 상관관계를 낮추고 다양성을 높인다.
→ 이것이 단순 배깅보다 랜덤 포레스트가 대부분 더 성능이 좋은 이유다.

 

주요 하이퍼파라미터

  • n_estimators: 트리 수. 많을수록 좋지만 계산 비용 증가. 보통 100~500
  • max_features: 분할 시 고려할 특성 수. 분류: √p, 회귀: p/3 기본값
  • max_depth: 각 트리의 최대 깊이. 기본값은 제한 없음
  • min_samples_leaf: 리프 노드의 최소 샘플 수. 과적합 방지
  • oob_score=True: OOB 샘플로 자체 검증 수행
📌 랜덤 포레스트 예측 과정 예시

고객의 이탈 여부(이탈/유지)를 10개의 트리로 예측하는 경우

각 트리의 예측 결과
트리 1: 이탈  트리 2: 유지  트리 3: 이탈  트리 4: 이탈  트리 5: 유지
트리 6: 이탈  트리 7: 유지  트리 8: 이탈  트리 9: 이탈  트리10: 이탈
다수결 집계
이탈 7표 vs 유지 3표
→ 최종 예측: 이탈 (확률 70%)
📌 랜덤 포레스트의 특성 중요도
의사결정나무처럼 랜덤 포레스트도 특성 중요도를 계산한다.
각 트리에서 특성별 불순도 감소량을 합산하고 전체 트리에서 평균 낸다.
→ 단일 트리보다 안정적인 특성 중요도를 얻을 수 있다.

 

반응형

 

4. 부스팅 (Boosting) — 순차적 오류 개선

개념

부스팅은 배깅과 달리 모델을 순차적으로 학습한다. 이전 모델이 틀린 데이터에 더 큰 가중치를 두고 다음 모델을 학습시켜, 점진적으로 오류를 줄여나간다. 편의(Bias)를 줄이는 데 특화되어 있다.

주요 부스팅 알고리즘

① AdaBoost (Adaptive Boosting)

가장 초기의 부스팅 알고리즘이다. 이전 모델이 틀린 샘플의 가중치를 높이고, 맞힌 샘플의 가중치를 낮춘다. 각 모델의 성능에 따라 최종 예측에 기여하는 가중치도 달라진다.

최종 예측 = sign(Σ αₜ · hₜ(x))
hₜ(x): t번째 약한 학습기의 예측  |  αₜ: t번째 학습기의 가중치 (성능이 좋을수록 큰 가중치)
약한 학습기: 주로 깊이 1인 결정 트리(Decision Stump) 사용

② 그래디언트 부스팅 (Gradient Boosting)

현재 가장 널리 사용되는 부스팅 방식이다. 이전 모델의 예측 오류(잔차, Residual)를 다음 모델이 학습하는 방식으로 작동한다. 경사 하강법(Gradient Descent)을 트리 학습에 적용한 것으로 이해하면 된다.

F_m(x) = F_{m-1}(x) + η · h_m(x)
F_m(x): m번째 단계의 예측  |  h_m(x): m번째 트리 (이전 잔차를 학습)
η (학습률): 각 트리의 기여도. 작을수록 과적합 방지 but 트리 수 증가 필요
📌 그래디언트 부스팅 직관 예시 — 중고차 가격 예측
단계별 잔차 학습
실제 가격: 1,500만원

모델 1 예측: 1,200만원 → 잔차 = +300만원
모델 2: 잔차 +300만원을 학습 → 280만원 예측 → 누적: 1,480만원
모델 3: 잔차 +20만원을 학습 → 18만원 예측 → 누적: 1,498만원
...
→ 각 단계마다 남은 오류를 줄여나가 최종 예측이 실제에 수렴

③ XGBoost / LightGBM / CatBoost

그래디언트 부스팅을 더 빠르고 강력하게 개선한 구현체들이다.

알고리즘 특징 장점 단점
XGBoost 정규화 추가, 병렬 처리 과적합 방지 강력, 안정적 메모리 사용량 큼
LightGBM 리프 중심 트리 성장, GOSS/EFB 매우 빠름, 대용량에 강함 소규모 데이터 과적합 주의
CatBoost 범주형 특성 자동 처리 범주형 많을 때 전처리 최소화 학습 속도가 상대적으로 느림
💡 LightGBM이 XGBoost보다 빠른 이유
XGBoost: 트리를 깊이 우선(Level-wise)으로 성장 → 균형 잡힌 트리
LightGBM: 잎 우선(Leaf-wise)으로 성장 → 손실이 가장 큰 리프를 우선 분할
→ Leaf-wise는 같은 수의 분할로 더 낮은 손실을 달성하지만 과적합 주의 (max_depth 제한 권장)

 

5. 보팅 (Voting) — 다양한 모델의 결합

서로 다른 종류의 모델(의사결정나무, 로지스틱 회귀, SVM 등)을 함께 사용해서 예측을 결합하는 방법이다. 배깅과 달리 같은 알고리즘을 반복하지 않는다.

하드 보팅 (Hard Voting)
각 모델의 최종 클래스 예측을 다수결로 결정.

예) 모델 A: 스팸, 모델 B: 정상, 모델 C: 스팸
→ 스팸 2표 vs 정상 1표 → 스팸
소프트 보팅 (Soft Voting)
각 모델의 클래스별 확률을 평균해서 결정.

예) 모델 A: 스팸 0.8, 모델 B: 스팸 0.4, 모델 C: 스팸 0.7
→ 평균 0.633 > 0.5 → 스팸
(일반적으로 하드 보팅보다 성능이 좋다)

 

6. 스태킹 (Stacking) — 모델이 모델을 학습

개념

스태킹은 여러 1차 모델(Base Models)의 예측 결과를 새로운 특성으로 삼아, 메타 모델(Meta Model)이 최종 예측을 학습하는 방법이다. 모델이 모델을 학습하는 2단계 구조다.

스태킹의 핵심 주의사항 — 데이터 누출 방지

1차 모델을 학습 데이터 전체로 학습한 후, 같은 데이터로 메타 특성을 만들면 데이터 누출(Data Leakage)이 발생해 과적합이 심해진다. 이를 방지하기 위해 교차 검증 방식으로 메타 특성을 생성한다.

 

📌 스태킹 교차 검증 메타 특성 생성 (K-폴드 활용)
5-폴드 스태킹 과정
Fold 1: 나머지 4개 폴드로 모델 A 학습 → 폴드 1 데이터 예측값 생성
Fold 2: 나머지 4개 폴드로 모델 A 학습 → 폴드 2 데이터 예측값 생성
...반복...
→ 전체 학습 데이터에 대한 모델 A의 OOF(Out-of-Fold) 예측값 완성

동일하게 모델 B, C의 OOF 예측값 생성
→ [ŷA, ŷB, ŷC]를 새 특성으로 메타 모델 학습
💡 스태킹이 단순 앙상블보다 강력한 이유
보팅/배깅: 모든 모델에 동일한 가중치(또는 사전 정의 가중치)
스태킹: 메타 모델이 "어느 상황에서 어느 모델을 더 믿어야 하는가"를 데이터로 학습
→ 각 모델의 강점을 자동으로 학습해서 최적으로 결합한다.
단, 구현이 복잡하고 학습 시간이 길다는 단점이 있다.

 

7. 배깅 vs 부스팅 vs 스태킹 종합 비교

구분 배깅 부스팅 스태킹
학습 방식 병렬 순차 2단계
주요 목적 분산(Variance) 감소 편의(Bias) 감소 둘 다
기본 모델 같은 알고리즘 반복 같은 알고리즘 반복 서로 다른 알고리즘
과적합 위험 낮음 높음(학습률 조절 필요) 데이터 누출 주의
계산 속도 빠름(병렬) 느림(순차) 매우 느림
대표 알고리즘 랜덤 포레스트 XGBoost, LightGBM Stacking Ensemble
노이즈 내성 강함 약함(노이즈에 민감) 중간
📌 실무에서 앙상블 선택 가이드
• 빠른 결과가 필요할 때: 랜덤 포레스트 (튜닝이 적고 안정적)
• 높은 성능이 최우선일 때: LightGBM 또는 XGBoost (Kaggle 표준)
• 범주형 특성이 많을 때: CatBoost
• 최고 성능을 원할 때: 스태킹 (여러 모델 결합 + 메타 모델)
• 해석이 중요할 때: 랜덤 포레스트 (특성 중요도 직관적)
→ 일반적으로 XGBoost/LightGBM + 교차 검증 + 스태킹이 경진대회의 황금 조합이다.

📌 핵심 정리

  • 앙상블: 여러 모델을 결합해 단일 모델보다 나은 성능. 다양성이 핵심
  • 배깅: 부트스트랩 샘플링 + 병렬 학습 + 다수결/평균. 분산 감소
  • OOB: 부트스트랩에서 제외된 ~36.8% 데이터. 별도 검증 없이 성능 추정 가능
  • 랜덤 포레스트: 배깅 + 특성 무작위 선택. 트리 다양성 극대화
  • 부스팅: 순차 학습 + 이전 오류에 집중. 편의 감소
  • AdaBoost: 틀린 샘플 가중치 증가. 약한 학습기 결합
  • 그래디언트 부스팅: 잔차를 다음 트리가 학습. 경사 하강법 응용
  • XGBoost/LightGBM/CatBoost: 그래디언트 부스팅의 고성능 구현체
  • 보팅: 다른 알고리즘 모델 결합. 소프트 보팅 > 하드 보팅
  • 스태킹: 1차 모델 예측 → 메타 모델 학습. 가장 강력하지만 복잡
  • 스태킹 주의: OOF 예측으로 메타 특성 생성 (데이터 누출 방지)

 

728x90
반응형

'수학&통계학' 카테고리의 다른 글

인공신경망 모형(ANN) (2) : 신경망 모형 분류  (0) 2026.05.14
인공신경망 모형(ANN) (1) : 뉴런, 층, 활성화 함수  (0) 2026.05.14
의사결정나무  (0) 2026.05.14
K-NN  (0) 2026.05.14
서포트 벡터 머신  (0) 2026.05.14