: 여러 개의 모델을 결합해 단일 모델보다 더 안정적이고 성능 좋은 예측을 만드는 방법
앙상블
├─ Bagging → 분산 감소
├─ Boosting → 편향 감소
└─ Stacking/Blending → 모델 조합

: 같은 종류의 모델을 서로 다른 데이터 샘플로 여러 개 학습시키고, 그 예측을 평균/다수결로 결합하는 방식
부트스트랩(Bootstrap)?
지금 가진 표본 데이터만 가지고, 그 안에서 복원추출을 반복해서 '가짜 모집단'을 흉내 내는 방식
: 특정 모델을 base estimator로 지정해 그대로 Bagging을 적용하는 일반적인 방식
BaggingClassifier(
base_estimator = DecisionTree,
n_estimators = 100
): Bagging에 "피처 랜덤성"을 추가한 트리 앙상블

# Random Forest
나이 기준값 후보 전부 계산
→ 29.5, 31.0, 36.7, 42.1
→ 지니 제일 좋은 31.0 선택
# Extra Trees
나이 최소=23, 최대=45
→ 그 사이에서 랜덤으로 38.4 뽑음
→ 그냥 나이 < 38.4로 분기

| 구분 | Decision Tree | Bagging | Random Forest | Extra Trees |
|---|---|---|---|---|
| 나무 개수 | 1 | 여러 개 | 여러 개 | 여러 개 |
| 데이터 샘플링 | ❌ | O | O | O |
| 피처 랜덤 | ❌ | ❌ | O | O |
| 분기값 랜덤 | ❌ | ❌ | ❌ | O |
| 오버피팅 | 매우 높음 | 감소 | 더 감소 | 가장 안정 |
| 실무 사용 | 거의 안 씀 | 가끔 | 매우 많음 | 상황 따라 |
: 이전 모델이 틀린 데이터를 다음 모델이 더 집중해서 학습하도록 모델을 순차적으로 쌓는 방법

: 이전 모델이 오분류한 샘플의 가중치를 증가시켜 다음 모델이 그 샘플들에게 더 큰 비중을 두고 학습하도록 유도하는 부스팅 알고리즘
약한 학습기 (Weak Learner)
단독으로는 높은 성능을 내지 못하지만 무작위 추정보다 약간 더 나은 성능을 보이는 모델을 의미함.
부스팅에서는 이러한 약한 학습기를 순차적으로 결합하여 강한 학습기(strong learner)를 구성함.

: 이전 모델의 오차를 다음 모델이 예측하도록 순차적으로 학습시키는 방법
-> 이전 단계 모델의 예측이 정답에 못 미친 만큼(손실을 줄이는 방향)을 다음 트리가 보정하면서 전체 모델을 점진적으로 개선
AdaBoost가 "가중치로 샘플 중요도를 조절"한다면, GBDT는 "오차를 함수적으로 보정"함.

: GBDT를 실무/대규모 환경에서 더 안정적이고 강력하게 쓰기위해 다양한 개선을 넣은 대표적인 구현체

XGBoost는 트리의 복잡도를 제어하기 위해 목적 함수에 정규화 항을 추가함. 리프 노드의 개수에 대한 벌점을 통해 불필요한 분기를 억제하고, 리프 예측값의 크기에 대한 정규화를 통해 특정 샘플에 과도하게 맞춰지는 현상을 방지. 이를 통해 손실 감소와 모델 단순성 사이의 균형을 유지하며 과적합을 완화.
: 대용량 데이터에서의 학습 속도/메모리 효율을 극대화한 GBDT 계열 모델
기존 모델의 문제
해결방안
XGBoost: level-wise (균형)
LightGBM: leaf-wise (가장 손해 큰 곳부터)장점: 빠른 학습, 메모리 효율, 대규모 데이터에 강함
주의점: 작은 데이터나 노이즈가 많을 때는 leaf-wise 특성상 과적합이 더 쉽게 발생할 수 있어 depth/leaf 관련 파라미터 관리가 중요
| 파라미터 | 역할 | 커지면 | 줄이면 |
|---|---|---|---|
| num_leaves | 최대 리프 수 | 표현력↑, 과적합↑ | 단순화, 성능↓ |
| max_depth | 트리 최대 깊이 | 복잡도↑ | 과적합↓ |
| min_data_in_leaf | 리프 최소 샘플 수 | 안정성↑ | 세밀한 패턴↑ |
| learning_rate | 한 트리의 보정 크기 | 수렴 빠름, 불안정 | 안정적, 트리 더 필요 |
| n_estimators | 트리 개수 | 과적합 위험 | 과소적합 |
| feature_fraction | 트리당 사용 피처 비율 | 다양성↓ | 일반화↑ |
| bagging_fraction | 트리당 사용 샘플 비율 | 안정성↓ | 분산↓ |
| bagging_freq | bagging 적용 주기 | 랜덤성↑ | 결정적 |
: 범주형(categorical) 피처가 많은 데이터에서 강한 GBDT 계열 모델
| 모델 | 핵심 아이디어 | 강점 | 주의점 |
|---|---|---|---|
| AdaBoost | 오분류 샘플 가중치 ↑, 다음 학습기 집중 | 직관적 부스팅, 단순 구조 | 노이즈/라벨 오류에 민감 |
| GBDT | residual/gradient를 다음 모델이 학습 | 손실함수 기반 범용성 | 순차 학습으로 느릴 수 있음 |
| XGBoost | GBDT + 정규화/최적화/실무 기능 | 성능·안정성·기능 밸런스 | 파라미터 많음 |
| LightGBM | leaf-wise + 히스토그램 기반 | 속도·대규모 데이터 강점 | 작은 데이터 과적합 주의 |
| CatBoost | 범주형 처리 내장 + 누수 완화 | 범주형 많은 데이터에 강함 | 데이터/설정에 따라 속도 차이 |
: 서로 다른 모델들의 예측값을 다시 입력으로 사용해 최종 모델을 학습하는 앙상블 방식
: 교차 검증(Cross Validation)을 이용해 각 베이스 모델의 out-of-fold 예측값을 생성하고, 이를 입력으로 메타 모델을 학습하는 방식

# Bagging
최종 = (RF + XGB + NN) / 3
-> 새 모델을 동등하게 취급
# Stacking
“이 상황에서는 RF를 더 믿자”
“이 구간에서는 XGB가 잘 맞는다”
“이 영역은 NN이 강하다”
-> 최종 = 0.6*RF + 0.3*XGB + 0.1*NN
=> Bagging은 모델 하나의 불안정성을 여러 개 평균내어 안정화시키고, Stacking은 모델마다 잘하는 영역이 다르니까 그 관계를 학습하는 원리
: 데이터를 학습용(train)과 검증용(hold-out)으로 분리한 뒤, 학습용 데이터로 베이스 모델을 학습하고, 검증용 데이터에 대한 예측값을 입력으로 메타 모델을 학습하는 방식

| 구분 | Stacking | Blending |
|---|---|---|
| 예측 생성 | K-Fold 기반 OoF | Hold-out 기반 |
| 메타 학습 데이터 | 전체 데이터 (OoF) | Hold-out 일부 |
| 데이터 누수 위험 | 낮음 | 상대적으로 높음 |
| 구현 난이도 | 높음 | 쉬움 |
| 데이터 효율 | 높음 | 일부 데이터 낭비 |
| 방법 | 줄이는 것 | 핵심 아이디어 |
|---|---|---|
| Bagging | Variance | 평균으로 안정화 |
| Boosting | Bias | 오답 보완 |
| Stacking | 둘 다 | 모델 조합 |