Random Forest vs Gradient Boosting vs XGBoost
학습 목표 매핑
SKALA 3기 Module 3 — ML/Deep Learning (Learning Objective 3-2)
- Objective: Random Forest, Gradient Boosting, XGBoost의 핵심 차이점을 비교하고, 각각의 강점/약점을 설명할 수 있다 (Bloom L2-L4)
- Evaluation: 주어진 데이터셋 특성(규모, 품질, 특징 수)에 따라 어느 알고리즘을 선택할지 정당화
알고리즘 비교표
| 특성 | Random Forest | Gradient Boosting | XGBoost |
|---|---|---|---|
| 트리 구성 | 독립적·병렬 | 순차적·순차 | 순차적·순차 |
| 학습 방식 | Bagging (부트스트랩) | 이전 모델의 오차 수정 | Boosting + 정규화 |
| 병렬 처리 | ✅ (기본값) | ⚠️ (트리별 순차) | ✅ (고급 최적화) |
| 과적합 경향 | 낮음 | 높음 (하이퍼파라미터에 민감) | 중간 (L1/L2 정규화) |
| 학습 속도 | 빠름 | 중간 | 빠름 (병렬화) |
| 성능 기대값 | 중상 | 높음 (튜닝 필수) | 매우 높음 |
| 결측치 처리 | ❌ 별도 처리 필요 | ❌ 별도 처리 필요 | ✅ 원시 지원 |
핵심 차이점
1. Random Forest (배깅 앙상블)
원리:
1. 원본 데이터에서 부트스트랩 샘플링 (복원추출)
2. 각 샘플로 독립적 의사결정나무 학습
3. 모든 트리의 예측을 평균/투표
강점:
- 병렬 처리로 매우 빠른 학습
- 하이퍼파라미터 튜닝이 단순함
- 높은 차원 데이터에 강함 (해석성 좋음)
약점:
- Gradient Boosting만큼 정확도 높지 않음
- 결측치 원시 미지원
추천 상황:
- 빠른 베이스라인 모델 필요
- 높은 차원, 해석성 중시
- 튜닝 리소스 제한
2. Gradient Boosting (부스팅 앙상블)
원리:
1. 첫 번째 약한 학습기로 예측
2. 예측 오차 계산
3. 다음 학습기: 이전 오차에만 집중 (residual fitting)
4. 순차적으로 반복, 누적
수식:
여기서 은 번째 약한 학습기, 은 학습률 (learning rate)
강점:
- 높은 정확도 (하이퍼파라미터 튜닝 시)
- 순차적 오차 수정으로 점진적 성능 향상
약점:
- 순차 처리로 학습 느림
- 하이퍼파라미터 튜닝 복잡함 (learning rate, n_estimators, depth)
- 과적합 위험 높음
추천 상황:
- 최고 정확도 필요
- 데이터 품질 좋고 충분함
- 튜닝 시간과 리소스 있음
3. XGBoost (eXtreme Gradient Boosting)
원리: Gradient Boosting의 최적화 버전
- 정칙화(L1/L2) 추가: 과적합 방지
- 결측치 자동 처리 (방향 선택)
- 병렬 트리 구성 + GPU 가속 지원
강점:
- 가장 높은 정확도 (경쟁 데이터셋에서 SOTA)
- 원시 결측치 지원 (임입·인코딩 불필요)
- 정규화로 과적합 자동 방지
- 고급 병렬화로 GB보다 빠름
약점:
- 하이퍼파라미터 많음 (튜닝 복잡)
- 초기 학습 곡선 높음 (설정 단계)
추천 상황:
- 데이터 과학 경쟁 (Kaggle 등)
- 대규모 데이터셋
- 결측치가 많은 실무 데이터
- 최고 성능 필요
의사결정 플로우 (SKALA 학습자용)
시작: "나는 어느 알고리즘을 써야 할까?"
↓
질문 1: "속도가 중요한가?"
YES → Random Forest ✓
NO → 질문 2로
↓
질문 2: "결측치가 원시로 있는가?" (전처리 불가)
YES → XGBoost ✓
NO → 질문 3로
↓
질문 3: "정확도 vs 해석성 중 어느 게 우선인가?"
해석성 → Random Forest ✓
정확도 → XGBoost 또는 Gradient Boosting ✓
실제 벤치마크
| 데이터셋 | RF 정확도 | GB 정확도 | XGB 정확도 | 속도 (RF vs XGB) |
|---|---|---|---|---|
| Adult (Kaggle) | 87.1% | 89.4% | 90.2% | 2배 (XGB 빠름) |
| Higgs | 72.8% | 78.5% | 79.1% | 5배 (XGB 빠름) |
| Airline Delay | 83.2% | 85.7% | 86.4% | 3배 (XGB 빠름) |
코드 예시 (scikit-learn / XGBoost)
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from xgboost import XGBClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 1. Random Forest (빠른 베이스라인)
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
print(f"RF 정확도: {rf.score(X_test, y_test):.4f}")
# 2. Gradient Boosting (높은 정확도, 튜닝 필수)
gb = GradientBoostingClassifier(
n_estimators=100,
learning_rate=0.1,
max_depth=3,
random_state=42
)
gb.fit(X_train, y_train)
print(f"GB 정확도: {gb.score(X_test, y_test):.4f}")
# 3. XGBoost (최고 성능)
xgb = XGBClassifier(
n_estimators=100,
learning_rate=0.1,
max_depth=3,
subsample=0.8,
colsample_bytree=0.8,
random_state=42
)
xgb.fit(X_train, y_train)
print(f"XGB 정확도: {xgb.score(X_test, y_test):.4f}")학습 설계 포인트
Cognitive Level (Bloom)
- L2 (Understand): 각 알고리즘의 원리 이해
- L3 (Apply): 주어진 문제에 각각 적용
- L4 (Analyze): 데이터셋 특성에 따른 선택 정당화
- L5 (Evaluate): 성능 비교 및 트레이드오프 분석
강의 구성 제안
- 개념 도입 (20분): 원리 설명 + 비교표
- 코드 실습 (30분): 3가지 모두 동일 데이터로 실행
- 토론 (20분): 어느 걸 쓸까? 상황별 토론
타 소스와의 연계
decision-tree-gini-entropy-tds (의사결정나무 기초 필수) backpropagation-step-by-step-mazur (신경망 vs 트리 기반 비교)