의사결정나무는 한 번에 한 질문씩 데이터를 나눕니다: 소득이 기준을 넘는가? 계정이 1년 이상 되었는가? 각 답에 따라 데이터를 해당 가지(branch)로 내려보내고, 위 그림처럼 리프 노드에서 최종 예측이 이루어집니다.
Note
실제 분기 예시
트리를 이해하는 가장 쉬운 방법은 실제로 하나를 따라가 보는 것입니다. 대출 승인 여부를 결정하는 트리를 살펴보겠습니다:
연봉 > 5,000만원?
├─ 아니오 -> 대출 거절
└─ 예
신용점수 > 700?
├─ 예 -> 승인
└─ 아니오 -> 거절모든 신청자는 맨 위에서 아래로 하나의 경로를 따라 결정에 이릅니다. 이렇게 예측 규칙을 명확히 확인할 수 있다는 점 때문에 대출이나 의료처럼 규제가 엄격한 분야에서 의사결정나무가 많이 쓰입니다.
구조: 루트·내부·리프 노드
- 루트 노드(Root Node): 트리 맨 위의 첫 분기
- 내부 노드(Internal Node): 중간에 이어지는 추가 분기
- 리프 노드(Leaf Node): 더 분기하지 않는 끝점으로, 예측 결과를 담고 있음
이 용어를 알아두면 다른 문서나 교재, 그리고 각종 그림을 이해하기가 한결 수월해집니다.
분기는 어떻게 선택되나
각 노드에서 의사결정나무는 모든 특성과 임계값을 시도해 클래스를 가장 효과적으로 분리하는 분기를 선택합니다. '가장 효과적'인지는 불순도로 측정합니다: 분기 전후로 집단이 얼마나 섞여 있는지를 나타냅니다.
- 지니 불순도: 노드에서 무작위로 뽑은 것을 잘못 분류할 확률
- 엔트로피 / 정보 이득: 분기로 줄어드는 무질서
- 회귀 나무에서는 대신 분산을 최소화
특성 중요도 이해하기
실무에서는 많은 사람이 트리를 예측 자체보다 어떤 변수가 중요한지 파악하는 용도로 씁니다. 모든 분기가 불순도를 줄이는데, 이 감소량을 특성별로 합하면 특성 중요도 점수가 됩니다.
| 변수 | 중요도 |
|---|---|
| Income | 0.42 |
| Age | 0.31 |
| Credit Score | 0.18 |
| Region | 0.09 |
이 표는 Income이 예측에 가장 큰 영향을 미치는 변수이고 Region의 영향은 크지 않다는 뜻으로 읽으면 됩니다. 실제로 이 표 하나가 의사결정나무가 주는 가장 실용적인 결과인 경우가 많습니다.
과적합의 함정
계속 나누다 보면 거의 모든 데이터마다 리프 노드가 생길 만큼 트리가 커집니다. 이런 트리는 학습 데이터에서는 완벽하지만 새로운 데이터에서는 성능이 떨어집니다. 여기서 핵심 조절 변수는 최대 깊이로, 너무 얕으면 과소적합, 너무 깊으면 과적합됩니다.
- 최대 깊이나 리프 노드당 최소 표본 수 제한
- 검증 성능을 개선하지 않는 가지 치기
- 깊은 트리 하나보다 랜덤 포레스트나 부스팅 같은 앙상블을 선호
Watch out
가지치기: 키운 뒤 잘라내기
가지치기(Pruning)는 지나치게 커진 트리를 다루는 대표적인 방법입니다. 먼저 큰 트리를 만든 뒤 검증 성능을 개선하지 않는 가지를 제거해, 실제로 도움이 되는 분기만 남깁니다. 그 결과 더 작고 일반화가 잘 되는 트리가 되어 노이즈까지 학습하는 것을 막아 줍니다.
Tip
한 그루에서 숲으로
단일 트리는 불안정해서, 데이터가 조금만 바뀌어도 분기가 달라집니다. 랜덤 포레스트는 무작위 부분집합으로 여러 트리를 학습한 뒤 그 결과를 평균합니다. 해석성은 다소 낮아지지만 정확도와 안정성이 크게 향상됩니다. 부스팅은 트리를 순차적으로 학습해 성능을 한층 더 끌어올립니다.
SKARI Model Lab의 의사결정나무
Model Lab에서는 코드 없이 의사결정나무와 랜덤 포레스트를 학습합니다. 목표 변수를 선택하면 SKARI가 모델을 적합하고 특성 중요도를 보여주며, 일반화 성능을 확인할 수 있도록 검증 지표를 함께 제공합니다.
단일 트리가 가장 좋은 모델인 경우는 드물기 때문에, SKARI의 Auto Compare가 같은 데이터에 트리 기반 모델 전체를 학습해 성능을 비교합니다:
Decision Tree -> Random Forest -> XGBoost -> LightGBM -> CatBoost -> 성능 비교
- 의사결정나무·랜덤 포레스트·부스팅 모델을 나란히
- 무엇이 예측을 이끄는지 보는 특성 중요도
- 과적합을 짚어주는 학습/검증 지표
Takeaway
자주 묻는 질문
지니와 엔트로피 중 무엇을 쓰나요?
대개 결과가 비슷합니다. 지니가 조금 더 빠르고 흔히 쓰는 기본값입니다. 어느 쪽을 고르느냐가 트리를 크게 바꾸는 경우는 드뭅니다.
트리에 스케일링이 필요한가요?
필요 없습니다. 분기가 임계값을 기준으로 이뤄지기 때문에, 회귀나 군집과 달리 특성의 척도에 영향을 받지 않습니다.
단일 트리와 랜덤 포레스트 중 무엇을 쓰나요?
해석성이 가장 중요하면 단일 트리를, 정확도가 가장 중요하면 랜덤 포레스트나 부스팅을 쓰면 됩니다.
CART가 뭔가요?
CART(Classification and Regression Trees)는 scikit-learn을 포함한 대부분의 트리 구현이 쓰는 알고리즘입니다. 지니 불순도(분류)나 분산 감소(회귀)를 기준으로 이진 분기를 만듭니다.
결론
의사결정나무는 직관적이고 투명하지만, 깊이가 지나치게 커지면 과적합되기 쉽습니다. 깊이를 제한하고 가지치기를 하며 앙상블을 활용하면, 과적합 없이 해석 가능성을 유지할 수 있습니다.
Takeaway
그래디언트 부스팅 & XGBoost
순차적으로 학습되는 트리
분류 모델 비교
여러 모델 사이에서 트리의 자리
과적합과 정규화
편향-분산 관점