Skip to content
PART 4 · 23장

앙상블 학습

약한 모델의 연합

대중의 지혜: 한 명보다 백 명이 정확하다

1906년, 영국의 통계학자 프랜시스 골턴은 한 축제에서 흥미로운 실험을 목격합니다. 787명의 사람들이 소의 무게를 추측했는데, 개인의 추측은 들쭉날쭉했지만 전체 추측값의 중앙값은 실제 무게와 겨우 1% 차이였습니다.

한 사람의 판단보다 100명의 다수결이 정확한 이 현상을 "대중의 지혜(Wisdom of Crowds)"라 부릅니다. 앙상블 학습은 이 원리를 머신러닝에 적용합니다. 하나의 뛰어난 모델 대신, 여러 개의 평범한 모델을 결합하면 더 강력한 모델이 됩니다.

쉽게 말하면 -- 집단지성:
퀴즈 대회에서 한 명의 천재에게 모든 것을 맡기는 것과, 100명의 보통 사람에게 투표시키는 것 중 어느 쪽이 더 정확할까요? 놀랍게도 100명의 다수결이 대부분의 경우 천재 한 명보다 낫습니다. 천재도 실수할 수 있지만, 100명이 동시에 같은 실수를 할 확률은 매우 낮기 때문입니다. 앙상블 학습은 이 "집단지성"을 알고리즘화한 것입니다. 각각의 모델이 완벽하지 않아도, 서로 다른 방식으로 틀리기 때문에 합치면 오류가 상쇄됩니다.

이전 장에서 의사결정트리의 약점을 보았습니다: 불안정하고 과적합에 취약합니다. 하지만 트리 100개를 결합하면? 놀랍게도 가장 강력한 알고리즘 중 하나가 됩니다.

앙상블의 두 가지 전략: 배깅 vs 부스팅

배깅 (Bagging)

Bootstrap Aggregating의 약자. 원본 데이터에서 복원 추출(bootstrap)로 여러 데이터셋을 만들고, 각각에 독립적으로 모델을 학습시킨 뒤, 다수결(분류) 또는 평균(회귀)으로 결합합니다.

쉽게 말하면: 여러 명이 독립적으로 같은 시험을 치릅니다. 각자 다른 교재로 공부했기 때문에 틀리는 문제가 서로 다릅니다. 다수결로 가장 많이 고른 답을 최종 답안으로 제출하면, 개인보다 정확합니다. 핵심은 "독립적으로" -- 서로 상의하지 않고 각자의 판단을 내리는 것입니다.

대표 알고리즘: 랜덤 포레스트

부스팅 (Boosting)

약한 학습기를 순차적으로 학습합니다. 첫 번째 모델이 틀린 데이터에 가중치를 높여서 두 번째 모델이 그것에 집중합니다. 이렇게 실수를 보완하며 점점 강해집니다.

쉽게 말하면: 시험을 보고 틀린 문제만 복습하는 학생을 떠올리세요. 1차 시험에서 미적분을 틀렸으면, 미적분을 집중 복습하고 2차 시험을 봅니다. 2차에서 통계를 틀렸으면, 통계를 집중 복습하고 3차 시험을 봅니다. 반복할수록 약점이 하나씩 사라지면서 점수가 올라갑니다. 부스팅은 이처럼 이전 모델의 실수에 집중하여 순차적으로 보완합니다.

대표 알고리즘: AdaBoost, Gradient Boosting, XGBoost

핵심 차이: 배깅은 분산(variance)을 줄이는 전략이고, 부스팅은 편향(bias)을 줄이는 전략입니다. 배깅은 과적합을 방지하고, 부스팅은 과소적합을 극복합니다.
배깅: f(x) = 1/T * [f_1(x) + f_2(x) + ... + f_T(x)]   (독립적 평균)
부스팅: f(x) = alpha_1 * f_1(x) + alpha_2 * f_2(x) + ...   (순차적 가중합)

랜덤 포레스트: 나무가 모여 숲이 되면

랜덤 포레스트는 배깅에 무작위 특성 선택을 추가합니다. 각 트리는 전체 특성 중 일부만 사용합니다(보통 전체의 제곱근 개수). 이렇게 하면 트리들 사이의 상관관계가 줄어서 앙상블 효과가 극대화됩니다.

비유 -- 다양한 관점의 나무들:
30명이 퀴즈를 푸는데, 모두 같은 교과서만 보면 같은 실수를 합니다. 하지만 각자 다른 장만 공부하면(무작위 특성), 실수가 서로 다릅니다. 다수결로 합치면 개인의 실수가 상쇄됩니다.
쉽게 말하면 -- 왜 "랜덤"이 중요한가:
같은 데이터로 트리 100개를 만들면 100개가 거의 같은 트리가 됩니다 -- 이것은 1명이 100번 투표하는 것과 같습니다. 랜덤 포레스트는 두 가지 무작위성을 주입합니다: (1) 데이터를 무작위로 뽑고 (부트스트랩), (2) 변수도 무작위로 뽑습니다. 마치 30명의 분석가에게 각자 다른 데이터 샘플과 다른 변수 집합을 주는 것과 같습니다. 한 사람은 매출과 광고비만 보고, 다른 사람은 계절과 경쟁사 가격만 봅니다. 각자의 관점은 불완전하지만, 30명의 판단을 종합하면 놀랍도록 정확한 결론이 나옵니다. 이것이 랜덤 포레스트가 실무에서 가장 많이 쓰이는 알고리즘 중 하나인 이유입니다.
1
부트스트랩 샘플링
원본에서 중복 허용 추출
2
무작위 특성 선택
sqrt(p)개만 후보로
3
다수결 / 평균
모든 트리 결합

실습 1: 숲을 키워보자

트리를 하나씩 추가하면서 앙상블의 결정 경계와 정확도가 어떻게 변하는지 관찰합니다. 단일 트리의 들쭉날쭉한 경계가 트리가 늘어날수록 부드러워지는 것을 확인하세요.

"나무 추가" 버튼을 누르면 랜덤 트리가 하나씩 숲에 합류합니다. 트리가 늘어날수록 정확도가 어떻게 변하는지, 결정 경계가 어떻게 바뀌는지 관찰하세요.
현재 트리 수: 0
앙상블 결정 경계
트리 수 vs 정확도
트리 수
-
앙상블 정확도
-
첫 트리 정확도
-
관찰: 트리 1개는 불안정하지만, 50개 이상이면 결정 경계가 매끄러워지고 정확도가 안정됩니다. 하지만 200개 이상에서는 개선 폭이 미미합니다 -- 수확체감의 법칙이 여기에도 적용됩니다.

실습 2: 단일 트리 vs 배깅

같은 데이터에 대해 깊은 단일 트리와 50개 트리의 배깅 앙상블을 나란히 비교합니다. 단일 트리는 과적합으로 경계가 복잡하고, 배깅은 부드럽습니다.

단일 트리 (깊이 8)
정확도: --
배깅 앙상블 (50 트리)
정확도: --

실습 3: 부스팅, 실수에서 배우다

부스팅은 이전 모델이 틀린 데이터에 더 집중합니다. 아래 시뮬레이션에서 각 라운드마다 오분류된 점이 크게 강조되는 것을 관찰하세요.

AdaBoost 작동 원리:
1. 모든 데이터에 동일한 가중치를 부여합니다.
2. 약한 학습기(얕은 트리)를 학습합니다.
3. 틀린 데이터의 가중치를 높이고, 맞은 데이터의 가중치를 낮춥니다.
4. 다음 학습기는 높은 가중치의 데이터에 집중합니다.
5. 모든 학습기의 가중 투표로 최종 예측합니다.
라운드: 0 / 10
현재 라운드 학습기
결합된 앙상블
현재 학습기 오류율
-
학습기 가중치
-
앙상블 정확도
-

실습 4: 랜덤 포레스트 특성 중요도

랜덤 포레스트로 비즈니스 데이터를 분석하면, 어떤 요인이 결과에 가장 큰 영향을 미치는지 순열 중요도(Permutation Importance)로 측정할 수 있습니다.

시나리오: 고객 이탈을 예측하는 랜덤 포레스트 모델입니다. 가입기간, 월 이용료, 고객만족도, 문의횟수, 계약유형의 5가지 특성이 있습니다. 특성을 하나 선택하고 "셔플" 버튼을 누르면, 그 특성의 값을 무작위로 섞었을 때 정확도가 얼마나 떨어지는지 볼 수 있습니다.
원래 정확도
-
셔플 후 정확도
-
정확도 감소
-
순열 중요도의 직관: "이 특성이 완전히 엉망이 되면 예측이 얼마나 나빠지는가?" 많이 나빠지면 중요한 특성이고, 별로 안 나빠지면 중요하지 않은 특성입니다. 이것은 트리 기반 중요도보다 더 신뢰할 수 있는 방법입니다.

실습 5: 모델 동물원 비교

같은 데이터에 대해 단일 트리, 배깅, 랜덤 포레스트, 그레이디언트 부스팅 4가지 모델을 동시에 실행합니다. 어떤 모델이 가장 좋은 성능을 보일까요?

"전체 비교 실행" 버튼을 누르면 4가지 모델이 순차적으로 학습됩니다. 결과 테이블과 막대그래프를 비교하세요. 항상 같은 모델이 이기나요? 데이터를 바꿔보세요.
모델 훈련 정확도 테스트 정확도 리프/학습기 수 순위
실행 버튼을 눌러주세요
주의: "항상 가장 좋은 모델"은 없습니다. 데이터 크기, 특성 수, 노이즈 수준에 따라 최적 모델이 달라집니다. 하지만 일반적으로 랜덤 포레스트나 그레이디언트 부스팅이 단일 트리보다 우수합니다.

그레이디언트 부스팅: 잔차를 학습하라

그레이디언트 부스팅(Gradient Boosting)은 부스팅의 강력한 변형입니다. 이전 모델의 잔차(residual, 실제값 - 예측값)를 다음 모델이 학습합니다. 매 단계마다 "아직 설명하지 못한 오차"를 조금씩 줄여 나갑니다.

F_0(x) = 초기 예측 (평균값)
F_1(x) = F_0(x) + lr * h_1(x)   (h_1은 잔차를 학습한 트리)
F_2(x) = F_1(x) + lr * h_2(x)   (h_2는 새 잔차를 학습)
...
F_T(x) = F_0(x) + lr * [h_1(x) + h_2(x) + ... + h_T(x)]
비유: 초상화를 그릴 때, 첫 화가가 대략적인 윤곽을 잡고, 두 번째 화가가 부족한 부분을 보완하고, 세 번째가 세부를 추가합니다. 각 화가는 이전까지의 작품에서 "빠진 부분"만 그립니다. lr(학습률)은 각 화가가 얼마나 자신감 있게 그리는지를 조절합니다.

실무에서 인기 있는 구현체

  • XGBoost: 속도와 성능의 균형. Kaggle 대회 우승의 단골.
  • LightGBM: 대용량 데이터에 빠름. 리프 중심 성장.
  • CatBoost: 범주형 데이터에 강함. 인코딩 자동 처리.

핵심 하이퍼파라미터

  • n_estimators: 트리 수 (100~1000)
  • learning_rate: 학습률 (0.01~0.3)
  • max_depth: 개별 트리 깊이 (3~8)
  • subsample: 데이터 부분 사용 비율
  • 앙상블은 여러 약한 모델을 결합하여 강한 모델을 만드는 전략이다.
  • 배깅(랜덤 포레스트)은 독립적 투표로 분산을 줄이고, 부스팅은 순차 학습으로 편향을 줄인다.
  • 랜덤 포레스트는 부트스트랩 + 무작위 특성 선택으로 트리 간 상관을 낮춘다.
  • 그레이디언트 부스팅은 잔차를 순차적으로 학습하며, XGBoost/LightGBM이 대표적이다.
  • 앙상블은 강력하지만, "어떤 모델이 좋은가?"를 판단하려면 체계적 평가가 필요하다.

다음 장 예고: 모델을 만들었으면, 이제 "이 모델이 정말 좋은가?"를 판단해야 합니다. 다음 장에서는 모델 평가와 선택 -- 정확도, 정밀도, 재현율, ROC 곡선, 교차검증을 배웁니다.