[Week 11] Random Forest

[email protected]  |  2025-11-12 18:35


(Random Forest Training and Interpretation)

랜덤 포레스트는 비선형 머신러닝 모델 중에서도 안정성과 해석력의 균형이 좋은 알고리즘으로, 데이터가 많지 않은 상황에서도 높은 예측 성능을 보입니다.

1️⃣ 개념 요약

  1. 여러 개의 결정 트리(Decision Trees) 를 만들어, 각 결과를 평균(회귀) 또는 투표(분류) 로 결합하는 앙상블 모델
  2. Bagging(Bootstrap Aggregation) 기법을 사용하여 과적합을 줄이고 일반화 성능을 높임

2️⃣ 작동 원리 (학습 프로세스)

(1) Bootstrap Sampling

  1. 전체 학습 데이터를 무작위로 샘플링하여 각 트리에 서로 다른 데이터셋 제공
  2. 데이터 다양성을 확보해 과적합 방지

(2) Feature Subset Selection

  1. 각 트리마다 일부 변수(feature)만 무작위로 선택
  2. 트리 간 상호보완 효과를 높임

(3) Tree Construction

  1. 각 트리는 독립적으로 학습
  2. Gini 불순도, 엔트로피 등을 기준으로 최적 분기점 선택

(4) Aggregation

  1. 예측 시 모든 트리의 결과를 결합
  2. 회귀: 평균값
  3. 분류: 다수결

3️⃣ 장점

  1. 데이터 스케일링 불필요
  2. 이상치와 결측치에 강함
  3. 변수 중요도(Feature Importance) 제공
  4. 비교적 빠른 학습 속도

4️⃣ 변수 중요도 (Feature Importance)

  1. 각 트리의 분기점에서 변수별 불순도 감소량을 평균하여 계산
  2. 값이 높을수록 예측에 큰 영향을 미친 변수

importance = pd.Series(model.feature_importances_, index=feature_names)
importance.sort_values(ascending=False).head()
  1. 단점: 상관된 변수들 사이에서는 중요도 해석이 왜곡될 수 있음

5️⃣ SHAP (Shapley Additive Explanations)

  1. 게임이론 기반 해석 기법으로, 각 변수의 예측 기여도와 방향성을 설명
  2. 단순한 중요도보다 “이 변수 때문에 결과가 높아졌는가 / 낮아졌는가”를 명확히 보여줌

import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)
  1. 색상: 변수의 값 크기
  2. x축: 예측에 미친 영향(+, –)
  3. 시각화로 예측 근거를 쉽게 설명 가능

6️⃣ 적용 시 주의점

  1. 트리 개수(n_estimators)를 너무 적게 설정하면 과적합 위험
  2. 너무 많으면 계산 시간 증가
  3. 데이터가 적을 경우, 오히려 딥러닝보다 더 안정적 성능
  4. GPU보다는 CPU 환경에 적합 (병렬처리 가능)

7️⃣ 결론

  1. 랜덤 포레스트는 비선형 관계를 잘 포착하면서도 과적합에 강하고 해석 가능한 모델
  2. 데이터가 많지 않거나 고성능 GPU를 사용할 수 없는 환경에서 매우 실용적
  3. SHAP과 같은 해석 도구와 함께 사용하면, 현업에서 신뢰성 있는 인사이트 제공이 가능