(Random Forest Training and Interpretation)
랜덤 포레스트는 비선형 머신러닝 모델 중에서도 안정성과 해석력의 균형이 좋은 알고리즘으로, 데이터가 많지 않은 상황에서도 높은 예측 성능을 보입니다.
1️⃣ 개념 요약
- 여러 개의 결정 트리(Decision Trees) 를 만들어, 각 결과를 평균(회귀) 또는 투표(분류) 로 결합하는 앙상블 모델
- Bagging(Bootstrap Aggregation) 기법을 사용하여 과적합을 줄이고 일반화 성능을 높임
2️⃣ 작동 원리 (학습 프로세스)
(1) Bootstrap Sampling
- 전체 학습 데이터를 무작위로 샘플링하여 각 트리에 서로 다른 데이터셋 제공
- 데이터 다양성을 확보해 과적합 방지
(2) Feature Subset Selection
- 각 트리마다 일부 변수(feature)만 무작위로 선택
- 트리 간 상호보완 효과를 높임
(3) Tree Construction
- 각 트리는 독립적으로 학습
- Gini 불순도, 엔트로피 등을 기준으로 최적 분기점 선택
(4) Aggregation
- 예측 시 모든 트리의 결과를 결합
- 회귀: 평균값
- 분류: 다수결
3️⃣ 장점
- 데이터 스케일링 불필요
- 이상치와 결측치에 강함
- 변수 중요도(Feature Importance) 제공
- 비교적 빠른 학습 속도
4️⃣ 변수 중요도 (Feature Importance)
- 각 트리의 분기점에서 변수별 불순도 감소량을 평균하여 계산
- 값이 높을수록 예측에 큰 영향을 미친 변수
importance = pd.Series(model.feature_importances_, index=feature_names)
importance.sort_values(ascending=False).head()
- 단점: 상관된 변수들 사이에서는 중요도 해석이 왜곡될 수 있음
5️⃣ SHAP (Shapley Additive Explanations)
- 게임이론 기반 해석 기법으로, 각 변수의 예측 기여도와 방향성을 설명
- 단순한 중요도보다 “이 변수 때문에 결과가 높아졌는가 / 낮아졌는가”를 명확히 보여줌
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)
- 색상: 변수의 값 크기
- x축: 예측에 미친 영향(+, –)
- 시각화로 예측 근거를 쉽게 설명 가능
6️⃣ 적용 시 주의점
- 트리 개수(
n_estimators)를 너무 적게 설정하면 과적합 위험 - 너무 많으면 계산 시간 증가
- 데이터가 적을 경우, 오히려 딥러닝보다 더 안정적 성능
- GPU보다는 CPU 환경에 적합 (병렬처리 가능)
7️⃣ 결론
- 랜덤 포레스트는 비선형 관계를 잘 포착하면서도 과적합에 강하고 해석 가능한 모델
- 데이터가 많지 않거나 고성능 GPU를 사용할 수 없는 환경에서 매우 실용적
- SHAP과 같은 해석 도구와 함께 사용하면, 현업에서 신뢰성 있는 인사이트 제공이 가능