Stat & ML

III. 예측 모델링 / M13

트리와 앙상블

8 minv1.0.0검토 2026-07-21
이 문서의 목차

학습목표

  • 트리와 앙상블의 대상·가정·산출물을 설명한다.
  • 공식 또는 절차를 작은 계산 사례에 적용하고 해석한다.
  • Python으로 재현 가능한 점검의 출발점을 만든다.

핵심 용어

의사결정나무 · 지니 불순도 · 가지치기 · 배깅 bagging · 랜덤포레스트 · 부스팅
한·영 정의와 약어는 통합 용어집을 함께 참조한다.

개념 설명

나무는 규칙을 반복 적용해 더 균질한 부분으로 나눈다. 깊은 나무는 학습 자료를 외워 일반화가 나빠질 수 있다. 배깅은 분산을 줄이고, 랜덤포레스트는 변수 무작위화도 쓰며, 부스팅은 앞 모델 오류에 순차 집중한다.

상세 이론

재귀적 분할

의사결정나무는 한 변수의 임계값으로 자료를 반복 분할해 잎의 결과를 균질하게 만든다. 분류는 지니·엔트로피, 회귀는 제곱오차 감소를 주로 사용한다. 탐욕적 분할은 각 단계의 최선만 선택하므로 전역 최적을 보장하지 않지만 빠르고 비선형·상호작용을 자연스럽게 표현한다.

복잡도와 가지치기

깊이를 제한하지 않은 나무는 잎에 매우 적은 사례를 남겨 학습 잡음을 외울 수 있다. 최대깊이, 최소 분할·잎 표본 수, 최대 잎 수로 사전 제어하거나 비용-복잡도 가지치기로 사후 단순화한다. 검증 오차가 최소인 복잡도를 선택하고 규칙 안정성도 확인한다.

배깅

배깅은 학습표본을 복원추출해 여러 모델을 독립적으로 적합하고 평균·투표한다. 불안정한 나무의 분산을 줄이는 데 특히 효과적이다. 각 트리가 보지 않은 out-of-bag 사례로 내부 성능을 추정할 수 있지만 최종 외부 평가를 완전히 대체하지 않는다.

랜덤포레스트

랜덤포레스트는 배깅에 더해 각 분할에서 변수의 무작위 부분집합만 검토한다. 강한 변수 하나가 모든 트리를 비슷하게 만드는 것을 막아 트리 간 상관을 줄인다. 트리 수, 최대 변수 수, 잎 크기가 주요 설정이며 확률 예측은 별도 보정이 필요할 수 있다.

부스팅

부스팅은 약한 학습기를 순차적으로 더해 이전까지의 오차 또는 손실의 음의 기울기를 보정한다. 학습률을 낮추고 트리 수를 늘리는 절충, 얕은 나무 깊이, 정규화가 일반화에 중요하다. 잡음·이상치와 과도한 튜닝에 민감할 수 있어 조기 종료와 교차검증을 사용한다.

중요도와 해석

불순도 기반 중요도는 분할 후보가 많은 연속·고카디널리티 변수에 편향될 수 있다. 순열 중요도는 검증 자료에서 변수 값을 섞었을 때 성능 하락을 측정하지만 상관 변수 사이 중요도가 분산된다. SHAP 같은 국소 설명도 모형 행동 설명이지 변수의 인과효과 증명은 아니다.

개념 비교표

개념핵심 역할함께 구분할 개념
재귀적 분할의사결정나무는 한 변수의 임계값으로 자료를 반복 분할해 잎의 결과를 균질하게 만든다.복잡도와 가지치기
복잡도와 가지치기깊이를 제한하지 않은 나무는 잎에 매우 적은 사례를 남겨 학습 잡음을 외울 수 있다.배깅
배깅배깅은 학습표본을 복원추출해 여러 모델을 독립적으로 적합하고 평균·투표한다.랜덤포레스트
랜덤포레스트랜덤포레스트는 배깅에 더해 각 분할에서 변수의 무작위 부분집합만 검토한다.부스팅
부스팅부스팅은 약한 학습기를 순차적으로 더해 이전까지의 오차 또는 손실의 음의 기울기를 보정한다.중요도와 해석
중요도와 해석불순도 기반 중요도는 분할 후보가 많은 연속·고카디널리티 변수에 편향될 수 있다.재귀적 분할

적용 조건과 진단

다음 조건은 공식을 대입하기 전에 확인한다. 하나라도 만족하지 않으면 결과를 버리기보다 원인을 기록하고 대안적 요약·변환·검증 설계를 선택한다.

  • 복잡도를 교차검증으로 정했는가
  • 중요도를 인과로 오해하지 않았는가
  • 여러 시드와 하위집단 성능을 확인했는가

개념 흐름

나무 복잡도는 학습오차와 검증오차를 함께 본다.

그림. 나무 복잡도는 학습오차와 검증오차를 함께 본다.

공식과 해석

지니 불순도는 G=1kpk2G=1-\sum_kp_k^2다.

계산 예제

양성 8·음성 2 노드는 G=0.32다. 자식 노드가 한 클래스에 가까우면 불순도가 작아진다.

Python 예제

실행 안내: 예제는 각 장의 핵심 API와 해석 순서를 보여준다. 별도 실습 환경에서 필요한 입력 데이터를 준비한 뒤 실행한다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_samples=400, n_features=8, n_informative=5,
    weights=[0.7, 0.3], random_state=20260721
)
X_train, X_valid, y_train, y_valid = train_test_split(
    X, y, test_size=0.25, stratify=y, random_state=20260721
)

model = RandomForestClassifier(n_estimators=300, min_samples_leaf=3, random_state=20260713)
model.fit(X_train, y_train)
pred = model.predict(X_valid)
print('F1:', f1_score(y_valid, pred))
print('중요도:', model.feature_importances_)
print('중요도는 인과효과가 아니다.')
# 복잡도는 교차검증으로 정한다.

장 요약

  • 재귀적 분할: 의사결정나무는 한 변수의 임계값으로 자료를 반복 분할해 잎의 결과를 균질하게 만든다.
  • 복잡도와 가지치기: 깊이를 제한하지 않은 나무는 잎에 매우 적은 사례를 남겨 학습 잡음을 외울 수 있다.
  • 배깅: 배깅은 학습표본을 복원추출해 여러 모델을 독립적으로 적합하고 평균·투표한다.
  • 랜덤포레스트: 랜덤포레스트는 배깅에 더해 각 분할에서 변수의 무작위 부분집합만 검토한다.
  • 부스팅: 부스팅은 약한 학습기를 순차적으로 더해 이전까지의 오차 또는 손실의 음의 기울기를 보정한다.
  • 중요도와 해석: 불순도 기반 중요도는 분할 후보가 많은 연속·고카디널리티 변수에 편향될 수 있다.

더 읽을거리