의사결정나무: 분할 기준부터 가지치기까지
의사결정나무의 분할 기준(정보 이득·지니 불순도)과 ID3·C4.5·CART 알고리즘, 가지치기 기법과 금융·의료·마케팅 적용 사례, sklearn 구현 예제를 정리한다.
2026-08-13 · 최초 발행 2025-05-23
의사결정나무는 머신러닝 알고리즘 중 가장 직관적이고 해석하기 쉬운 모델로, 분류와 회귀 문제에 모두 활용 가능한 범용성 높은 기법이다. 데이터 내 패턴을 트리 구조로 표현해 복잡한 의사결정 과정을 단순화하고 시각화할 수 있다.
뿌리에서 잎까지, 노드가 하는 일
의사결정나무는 루트 노드에서 시작하여 데이터 속성에 따라 가지를 분기하며 최종적으로 리프 노드에서 결정을 내리는 형태로 작동한다.
- 루트 노드(Root Node): 트리의 시작점으로 전체 데이터셋이 위치
- 내부 노드(Internal Node): 데이터 특성에 따른 테스트를 수행하는 중간 단계
- 리프 노드(Leaf Node): 최종 결정(분류 또는 예측값)을 나타내는 종단점
- 분기(Split): 특정 기준에 따라 데이터를 두 개 이상의 하위 집합으로 나누는 과정
분할 기준을 고르는 잣대: 정보 이득과 지니 불순도
의사결정나무 알고리즘이 효과적으로 작동하려면 데이터를 가장 잘 구분할 수 있는 분할 기준을 선택해야 한다. 주요 분할 기준은 엔트로피 감소량을 측정하는 정보 이득(Information Gain), 무작위로 선택된 요소가 잘못 분류될 확률인 지니 불순도(Gini Impurity), 회귀 문제에서 쓰는 분산 감소(Variance Reduction)다.
엔트로피는 데이터 집합의 무질서도(불확실성)를 측정하는 지표다. 엔트로피 계산식은 H(S) = -Σ(p(i) × log₂(p(i)))이며, p(i)는 클래스 i의 비율이다.
정보 이득은 특정 속성으로 분할했을 때 감소하는 엔트로피의 양으로, 값이 클수록 해당 속성은 좋은 분할 기준이 된다. 정보 이득 계산식은 IG(S, A) = H(S) - Σ((|Sv|/|S|) × H(Sv))이며, S는 전체 데이터셋, A는 속성, Sv는 속성 A의 값 v를 갖는 S의 부분집합이다.
지니 불순도는 CART(Classification and Regression Trees) 알고리즘에서 주로 사용되는 분할 기준이다. 계산식은 Gini(S) = 1 - Σ(p(i)²)이며, 불순도가 낮을수록(순도가 높을수록) 해당 노드의 데이터는 단일 클래스에 집중되어 있다.
ID3에서 CART까지, 알고리즘이 갈라진 지점
**ID3(Iterative Dichotomiser 3)**는 정보 이득 기반 알고리즘으로, 범주형 변수만 처리할 수 있고 과적합 방지 메커니즘이 없다.
C4.5는 ID3의 확장으로, 연속형 변수를 처리할 수 있고 정보 이득 비율(Information Gain Ratio)을 사용하며 가지치기(pruning) 기능을 제공한다.
**CART(Classification and Regression Trees)**는 지니 불순도를 사용하고, 이진 분할만 생성하며(각 노드는 두 개의 자식 노드만 가짐), 분류와 회귀 문제를 모두 처리할 수 있다.
잘 보이는 모델이 잘 흔들리는 이유
의사결정나무의 장점은 트리 구조가 직관적이어서 비전문가도 이해할 수 있는 해석 용이성, 정규화나 표준화가 필요 없는 전처리 요구 최소화, 특성에 결측치가 있어도 처리할 수 있는 결측치 처리, 복잡한 비선형 관계도 캡처하는 비선형 관계 포착, 모델 자체에서 특성 중요도를 추출할 수 있는 특성 중요도 파악이다.
반면 제한 없이 성장하면 트리가 복잡해지고 과적합이 발생하는 과적합 위험, 데이터 변화에 민감하게 반응해 학습 데이터가 바뀌면 트리 구조가 크게 달라질 수 있는 불안정성, 특정 클래스가 지배적인 불균형 데이터셋에서 성능이 떨어지는 편향된 학습, 최적의 의사결정나무를 찾는 것이 NP-완전 문제라는 최적 트리 찾기의 어려움이 단점으로 따라온다.
과적합을 막는 가지치기와 앙상블로의 확장
**가지치기(Pruning)**는 과적합을 방지하기 위해 트리의 복잡도를 줄이는 기법이다. 트리 성장 과정에서 최대 깊이, 최소 샘플 수 같은 특정 기준에 도달하면 성장을 중단하는 사전 가지치기(Pre-pruning), 완전히 성장한 트리에서 검증 데이터셋을 기반으로 불필요한 노드를 제거하는 **사후 가지치기(Post-pruning)**로 나뉜다.
여러 의사결정나무를 결합하는 앙상블 기법도 성능 향상에 쓰인다. 부트스트랩 샘플링으로 다양한 데이터셋을 생성해 여러 트리를 학습하는 배깅(Bagging, 예: 랜덤 포레스트), 이전 모델의 오류에 가중치를 두어 순차적으로 모델을 개선하는 부스팅(Boosting, 예: AdaBoost, Gradient Boosting), 여러 모델의 예측을 입력으로 사용하는 메타 모델을 학습하는 스태킹(Stacking)이 대표적이다.
금융·의료·마케팅에서 실제로 쓰이는 곳
금융 분야에서는 고객의 대출 상환 가능성을 예측하는 신용 평가, 이상 거래 패턴을 식별하는 사기 탐지, 주식 시장 트렌드를 분석해 투자 전략을 수립하는 투자 결정에 쓰인다.
의료 분야에서는 증상과 검사 결과를 바탕으로 질병 가능성을 평가하는 질병 진단, 환자 특성에 따른 최적 치료법을 선택하는 치료 계획, 특정 질병의 위험 인자를 식별하는 위험 인자 분석에 활용된다.
마케팅 분야에서는 구매 행동에 따라 고객 그룹을 분류하는 고객 세분화, 고객의 서비스 이탈 가능성을 예측하는 이탈 예측, 마케팅 캠페인의 성공 요인을 분석하는 캠페인 효과 분석에 쓴다.
붓꽃 데이터로 보는 학습부터 특성 중요도까지
# 필요 라이브러리 임포트
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import pandas as pd
# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.3, random_state=42)
# 의사결정나무 모델 생성 및 학습
dt_classifier = DecisionTreeClassifier(max_depth=3, random_state=42)
dt_classifier.fit(X_train, y_train)
# 예측 및 평가
y_pred = dt_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy:.4f}")
# 특성 중요도 시각화
feature_importance = pd.DataFrame({
'feature': iris.feature_names,
'importance': dt_classifier.feature_importances_
}).sort_values('importance', ascending=False)
plt.figure(figsize=(10, 6))
plt.bar(feature_importance['feature'], feature_importance['importance'])
plt.title('특성 중요도')
plt.xlabel('특성')
plt.ylabel('중요도')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
하이브리드 모델과 인과추론으로 가는 길
의사결정나무의 해석 가능성과 딥러닝의 성능을 결합한 하이브리드 모델 개발, 단순 상관관계를 넘어 인과관계를 파악하는 방향의 인과관계 추론, 복잡한 모델의 결정 과정을 의사결정나무로 근사해 설명력을 높이는 설명 가능한 AI, 실시간 데이터 스트림에서 지속적으로 학습하는 온라인 학습 개선, 예측의 불확실성을 명시적으로 모델링하는 불확실성 처리가 발전 방향으로 꼽힌다.
단독으로 쓸 때는 과적합 등의 한계가 있지만, 실무에서는 랜덤 포레스트나 그래디언트 부스팅 같은 앙상블 모델의 기반 학습기로 자주 활용된다. 데이터 기반 의사결정 과정을 명확하게 시각화할 수 있다는 점은 머신러닝에 대한 이해가 부족한 이해관계자에게도 모델의 결정 과정을 쉽게 설명할 수 있는 실무적 장점으로 이어진다.