[알고리즘 비교] Random Forest vs XGBoost
기술 로그 2026-08-04
요약
Random Forest는 여러 트리를 독립적으로 학습한 뒤 평균하는 배깅 방식이고, XGBoost는 이전 단계의 오차를 다음 트리가 보완하는 부스팅 방식임.
0이 많은 카운트 데이터에서는 단순 알고리즘 우열보다 count:poisson 목적함수 결합 여부가 핵심이며, 전환 후 오차율(WAPE)이 최대 30%p 개선됨.
1. 핵심 차이
| 구분 | Random Forest | XGBoost |
|---|---|---|
| 학습 방식 | 배깅 (Bagging) | 부스팅 (Boosting) |
| 트리 학습 | 독립적 (병렬) | 순차적 (직렬) |
| 최종 예측 | 여러 트리 평균 | 트리 결과 누적 |
| 이전 오차 활용 | 없음 | 있음 (오차 집중 교정) |
| 튜닝 난이도 | 낮은 편 | 높은 편 |
| 목적함수 선택 | 제한적 | 다양함 |
구조를 단순화하면 다음과 같음.
Random Forest
Tree 1 ─┐
Tree 2 ─┼─> 평균 ─> 최종 예측
Tree 3 ─┘
XGBoost
Tree 1 → 오차 확인 → Tree 2 → 오차 확인 → Tree 3 → 최종 예측
2. 0이 많은 데이터에서의 차이
예시 데이터:
0, 0, 1, 0, 2, 0, 0
- Random Forest 회귀는 여러 트리의 예측값을 평균하므로 0.3, 0.5, 1.6 등의 실수 예측 가능.
- XGBoost도 일반 회귀 목적함수(
reg:squarederror)를 사용하면 동일하게 실수 예측 가능.
따라서 다음과 같은 단순 구분은 부정확함:
Random Forest = 0.x 발생
XGBoost = 정확히 0
신규 모델의 핵심 차이는 XGBoost 자체보다 다음 설정에 있음:
objective="count:poisson"
카운트 데이터에 맞는 목적함수를 사용하여 음수 예측을 방지하고 건수 데이터 특성을 학습에 반영하는 방식임.
3. 프로젝트 적용 비교
기존 모델 (golden-pipeline)
RandomForestRegressor(
n_estimators=200,
max_depth=12,
random_state=42
)
주요 특징:
- 독립적인 트리 200개 학습
- 최종 예측값 평균 사용
- 일반 회귀 구조 사용 (L2/MSE)
- 카운트 데이터 전용 목적함수 없음
신규 모델 (ml-pipeline)
XGBRegressor(
objective="count:poisson",
n_estimators=500,
learning_rate=0.04,
max_depth=6,
random_state=42
)
주요 특징:
- 트리를 순차적으로 학습
- 이전 단계 오차를 계속 보정
- Poisson 목적함수 적용
- 음수가 없는 카운트 데이터 구조 반영
실제 변경 흐름:
Random Forest + 일반 회귀
↓
XGBoost + Poisson 목적함수
4. 실측 정확도 개선 결과 (WAPE / fMAPE)
28개 백테스트 구간 실측 결과, 희소 구간 및 0인 날짜에서의 예측 안정성이 대폭 개선됨.
| 평가 기준 | 기존 모델 (RF + 일반 회귀) | 신규 모델 (XGB + Poisson) | 개선 폭 |
|---|---|---|---|
| 일별 운송 오차 (WAPE) | 44.5% | 14.5% | 30.0%p 개선 |
| 시간대별 오차 (WAPE) | 30% 초중반 | 19.0% ~ 22.9% | 목표치(30% 이하) 진입 |
| 휴일/주말 0구간 오차 | 85.7% | 27.4% | 58.3%p 대폭 개선 |