학습목표
- 트리와 앙상블의 대상·가정·산출물을 설명한다.
- 공식 또는 절차를 작은 계산 사례에 적용하고 해석한다.
- Python으로 재현 가능한 점검의 출발점을 만든다.
핵심 용어
의사결정나무 · 지니 불순도 · 가지치기 · 배깅 bagging · 랜덤포레스트 · 부스팅
한·영 정의와 약어는 통합 용어집을 함께 참조한다.
개념 설명
나무는 규칙을 반복 적용해 더 균질한 부분으로 나눈다. 깊은 나무는 학습 자료를 외워 일반화가 나빠질 수 있다. 배깅은 분산을 줄이고, 랜덤포레스트는 변수 무작위화도 쓰며, 부스팅은 앞 모델 오류에 순차 집중한다.
상세 이론
재귀적 분할
의사결정나무는 한 변수의 임계값으로 자료를 반복 분할해 잎의 결과를 균질하게 만든다. 분류는 지니·엔트로피, 회귀는 제곱오차 감소를 주로 사용한다. 탐욕적 분할은 각 단계의 최선만 선택하므로 전역 최적을 보장하지 않지만 빠르고 비선형·상호작용을 자연스럽게 표현한다.
복잡도와 가지치기
깊이를 제한하지 않은 나무는 잎에 매우 적은 사례를 남겨 학습 잡음을 외울 수 있다. 최대깊이, 최소 분할·잎 표본 수, 최대 잎 수로 사전 제어하거나 비용-복잡도 가지치기로 사후 단순화한다. 검증 오차가 최소인 복잡도를 선택하고 규칙 안정성도 확인한다.
배깅
배깅은 학습표본을 복원추출해 여러 모델을 독립적으로 적합하고 평균·투표한다. 불안정한 나무의 분산을 줄이는 데 특히 효과적이다. 각 트리가 보지 않은 out-of-bag 사례로 내부 성능을 추정할 수 있지만 최종 외부 평가를 완전히 대체하지 않는다.
랜덤포레스트
랜덤포레스트는 배깅에 더해 각 분할에서 변수의 무작위 부분집합만 검토한다. 강한 변수 하나가 모든 트리를 비슷하게 만드는 것을 막아 트리 간 상관을 줄인다. 트리 수, 최대 변수 수, 잎 크기가 주요 설정이며 확률 예측은 별도 보정이 필요할 수 있다.
부스팅
부스팅은 약한 학습기를 순차적으로 더해 이전까지의 오차 또는 손실의 음의 기울기를 보정한다. 학습률을 낮추고 트리 수를 늘리는 절충, 얕은 나무 깊이, 정규화가 일반화에 중요하다. 잡음·이상치와 과도한 튜닝에 민감할 수 있어 조기 종료와 교차검증을 사용한다.
중요도와 해석
불순도 기반 중요도는 분할 후보가 많은 연속·고카디널리티 변수에 편향될 수 있다. 순열 중요도는 검증 자료에서 변수 값을 섞었을 때 성능 하락을 측정하지만 상관 변수 사이 중요도가 분산된다. SHAP 같은 국소 설명도 모형 행동 설명이지 변수의 인과효과 증명은 아니다.
개념 비교표
| 개념 | 핵심 역할 | 함께 구분할 개념 |
|---|---|---|
| 재귀적 분할 | 의사결정나무는 한 변수의 임계값으로 자료를 반복 분할해 잎의 결과를 균질하게 만든다. | 복잡도와 가지치기 |
| 복잡도와 가지치기 | 깊이를 제한하지 않은 나무는 잎에 매우 적은 사례를 남겨 학습 잡음을 외울 수 있다. | 배깅 |
| 배깅 | 배깅은 학습표본을 복원추출해 여러 모델을 독립적으로 적합하고 평균·투표한다. | 랜덤포레스트 |
| 랜덤포레스트 | 랜덤포레스트는 배깅에 더해 각 분할에서 변수의 무작위 부분집합만 검토한다. | 부스팅 |
| 부스팅 | 부스팅은 약한 학습기를 순차적으로 더해 이전까지의 오차 또는 손실의 음의 기울기를 보정한다. | 중요도와 해석 |
| 중요도와 해석 | 불순도 기반 중요도는 분할 후보가 많은 연속·고카디널리티 변수에 편향될 수 있다. | 재귀적 분할 |
적용 조건과 진단
다음 조건은 공식을 대입하기 전에 확인한다. 하나라도 만족하지 않으면 결과를 버리기보다 원인을 기록하고 대안적 요약·변환·검증 설계를 선택한다.
- 복잡도를 교차검증으로 정했는가
- 중요도를 인과로 오해하지 않았는가
- 여러 시드와 하위집단 성능을 확인했는가
개념 흐름

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