나무 구조로 분류하고 예측한다
의사결정나무(Decision Tree)는 데이터를 조건에 따라 계속 나누어 나무 모양의 규칙을 만드는 모델이다. “날씨가 좋으면 나간다, 비가 오면 나가지 않는다”처럼 사람이 판단하는 방식과 비슷하다. 차이가 있다면 조건과 판단 기준을 사람이 정하지 않고 데이터에서 자동으로 찾아낸다는 점이다.
분류(Classification)와 회귀(Regression) 모두에 쓸 수 있어서 CART(Classification And Regression Trees)라고도 부른다. Random Forest부터 XGBoost·LightGBM 같은 부스팅 계열까지, 트리 기반 알고리즘 대부분이 의사결정나무를 기본 단위로 확장한 것이다.
가지는 불순도가 가장 낮아지는 방향으로 나뉜다
나무는 한 마디(Node)를 자식 마디로 쪼갤 때마다 불순도(Impurity)가 가장 많이 줄어드는 기준을 찾는다. 불순도는 한 마디 안에 서로 다른 클래스가 얼마나 섞여 있는지를 뜻한다.
연속형 변수는 기준값보다 작으면 왼쪽 자식 마디, 크면 오른쪽 자식 마디로 나뉜다.
범주형 변수는 전체 범주를 두 부분집합으로 나누는 방향을 찾는다.
더 이상 분리해도 불순도가 줄지 않으면(정지규칙) 나무 성장을 멈춘다.
성장이 끝난 뒤에도 오분류 위험이 큰 가지는 가지치기(Pruning)로 잘라내 모델을 일반화한다.
Gini 지수와 Entropy로 불순도 재보기
불순도를 측정하는 대표적인 두 지표가 Gini 지수와 Entropy다. 둘 다 0에 가까울수록 한 마디 안 데이터가 한 클래스로 순수하다는 뜻이다. scikit-learn의 DecisionTreeClassifier는 이 둘과 log_loss(Entropy와 동치) 중 하나를 criterion 값으로 고를 수 있다.
한 마디 안에 10개의 데이터가 있고 클래스별로 2개, 3개, 5개씩 섞여 있다고 하자(비율 0.2, 0.3, 0.5).
import numpy as np
p = np.array([2, 3, 5]) / 10
gini = 1 - np.sum(p ** 2)
entropy = -np.sum(p * np.log2(p))
print(round(gini, 3))
print(round(entropy, 3))
0.62
1.485
만약 한 마디가 한 클래스로만 채워져 있다면(예: 10개 모두 같은 클래스) Gini와 Entropy는 둘 다 0이 되어, “더 나눌 필요 없이 순수하다”는 뜻이 된다. 반대로 두 클래스가 정확히 반반이면 값이 가장 커진다.
Feature Importance는 어떻게 나오나
한 변수가 나무 전체에서 몇 번 분할 기준으로 쓰였는지, 그 분할마다 불순도를 얼마나 줄였는지를 모두 더하면 변수 중요도(Feature Importance)가 된다.
Root(뿌리) 마디처럼 전체 샘플을 대상으로 한 분할일수록 가중치가 크다.
중요도가 높다는 것은 “불순도를 많이 줄인 정도 × 그 분할이 적용된 데이터 수”의 합이 크다는 뜻이지, 단순히 나무 위쪽에 있어서가 아니다.
트리는 상관관계만 보여줄 뿐 인과관계를 증명하지 않는다는 점은 항상 주의해야 한다.
장점과 한계
구분 | 내용 |
|---|---|
장점 — 해석 | 분류 규칙(if-then)이 그대로 읽히고, 시각화로 비전문가에게도 설명하기 쉽다. |
장점 — 전처리 | 표준화·정규화가 필요 없고, 범주형·연속형 데이터를 모두 다룰 수 있다. |
장점 — 소규모 데이터 | 데이터가 적어도 비교적 잘 동작하고 학습이 빠르다. |
한계 — 과적합 | 나무가 깊어질수록 훈련 데이터의 노이즈까지 외워 과적합되기 쉽다. |
한계 — 불안정성 | 데이터가 조금만 바뀌어도 완전히 다른 나무가 만들어질 수 있다. |
한계 — 일반화 성능 | 단일 트리는 변수 간 복잡한 상호작용을 반영하는 데 한계가 있다. |
이 불안정성을 보완하기 위해 나온 것이 여러 트리를 함께 쓰는 앙상블 기법(Random Forest, Boosting)이다. 다음 글에서 이어서 다룬다.
정리
의사결정나무는 불순도(Gini·Entropy)가 가장 많이 줄어드는 조건을 찾아 데이터를 반복해서 나누는 모델이다. 해석이 쉽고 전처리 부담이 적다는 장점이 있지만, 나무 하나만으로는 과적합과 불안정성에 취약하다. 그래서 실무에서는 단일 트리보다 Random Forest나 부스팅 계열로 확장해 쓰는 경우가 많다.
참고 자료
1.10. Decision Trees — scikit-learn 공식 문서 — CART 구조와 Gini·Entropy 분할 기준 수식 (2026-08-07 확인)
DecisionTreeClassifier — scikit-learn 공식 문서 — criterion 파라미터(gini/entropy/log_loss)와 기본값 (2026-08-07 확인)
댓글 0
댓글을 불러오는 중…