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 ForestGradient BoostingXGBoost
트리 구성독립적·병렬순차적·순차순차적·순차
학습 방식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 빠름)
Higgs72.8%78.5%79.1%5배 (XGB 빠름)
Airline Delay83.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): 성능 비교 및 트레이드오프 분석

강의 구성 제안

  1. 개념 도입 (20분): 원리 설명 + 비교표
  2. 코드 실습 (30분): 3가지 모두 동일 데이터로 실행
  3. 토론 (20분): 어느 걸 쓸까? 상황별 토론

타 소스와의 연계

decision-tree-gini-entropy-tds (의사결정나무 기초 필수) backpropagation-step-by-step-mazur (신경망 vs 트리 기반 비교)