머신러닝을 처음 배울 때 결정 트리(Decision Tree)를 보고 이런 생각을 했습니다. "이게 진짜 AI 맞아?" 조건문을 순서대로 따라가는 구조가 너무 단순해 보였습니다. 그런데 이 단순한 트리가 어떤 기준으로 가지를 나누는지, 그 기준이 수학적으로 어떻게 계산되는지 알고 나니 생각이 바뀌었습니다. 단순해 보이는 구조 안에 엔트로피와 정보 이득이라는 탄탄한 수학이 있었습니다.
결정 트리를 여러 개 조합한 랜덤 포레스트(Random Forest)는 현재도 실무에서 가장 많이 쓰이는 알고리즘 중 하나입니다. 딥러닝이 대세가 된 지금도 표 형태 데이터에서는 랜덤 포레스트가 종종 딥러닝을 이깁니다. 오늘은 결정 트리의 분기 기준이 되는 수학부터 랜덤 포레스트가 정확한 이유까지 실제 숫자로 따라가 보겠습니다.

결정 트리란 무엇인가 — 질문으로 데이터를 나누기
결정 트리는 데이터를 질문으로 반복해서 나누면서 정답을 찾아가는 모델입니다. "나이가 30세 이상인가?", "소득이 5000만 원 이상인가?" 같은 조건을 순서대로 체크해서 최종 예측에 도달합니다. 스무고개와 구조가 같습니다.
신용점수 700 이상?
├── YES → 소득 4000만원 이상?
│ ├── YES → 승인 ✅
│ └── NO → 부채비율 40% 이하?
│ ├── YES → 승인 ✅
│ └── NO → 거절 ❌
└── NO → 거절 ❌
구성 요소:
루트 노드: 첫 번째 질문 (신용점수)
내부 노드: 중간 질문들
리프 노드: 최종 답 (승인/거절)
깊이(Depth): 질문의 단계 수
결정 트리가 강력한 이유는 해석이 쉽다는 겁니다. "왜 대출이 거절됐나요?"라는 질문에 "신용점수가 700 미만이어서"라고 명확하게 답할 수 있습니다. XAI 글에서 다룬 블랙박스 문제가 없습니다. 판단 근거가 트리 구조로 그대로 보입니다.
그런데 핵심 질문이 있습니다. 어떤 변수를 먼저 질문해야 할까요? 신용점수를 먼저 물어야 할지, 소득을 먼저 물어야 할지 어떻게 결정할까요? 이게 결정 트리 학습의 핵심이고, 여기서 엔트로피가 등장합니다.
분기 기준 — 엔트로피와 정보 이득
좋은 분기란 나눈 후에 각 그룹이 최대한 순수해지는 분기입니다. 승인 그룹에는 승인만, 거절 그룹에는 거절만 있으면 이상적입니다. 이 순수도를 측정하는 게 엔트로피입니다.
H = -Σ p(c) × log₂(p(c))
완전히 순수한 노드 (승인만 100%):
H = -(1.0 × log₂(1.0)) = 0 ← 불순도 최소
완전히 섞인 노드 (승인 50%, 거절 50%):
H = -(0.5 × log₂(0.5) + 0.5 × log₂(0.5))
= -(0.5 × (-1) + 0.5 × (-1)) = 1 ← 불순도 최대
승인 70%, 거절 30%인 노드:
H = -(0.7 × log₂(0.7) + 0.3 × log₂(0.3))
= -(0.7 × (-0.515) + 0.3 × (-1.737))
= -(-0.361 + (-0.521)) = 0.882
정보 이득(Information Gain)은 분기 전 엔트로피에서 분기 후 엔트로피를 뺀 값입니다. 정보 이득이 클수록 그 분기가 데이터를 더 잘 나눈다는 뜻입니다. 결정 트리는 모든 변수와 모든 기준값을 시도해서 정보 이득이 가장 큰 것을 선택합니다.
IG = H(부모) - Σ (n_자식/n_부모) × H(자식)
→ 분기 전 불순도 - 분기 후 가중 평균 불순도
→ 값이 클수록 좋은 분기
→ 모든 변수에 대해 계산해서 IG 최대인 것 선택
실제 숫자로 정보 이득 계산해보기
10명의 대출 신청 데이터가 있습니다. 6명은 승인(Y), 4명은 거절(N)입니다. 신용점수 기준으로 나눌지, 소득 기준으로 나눌지 어느 게 나은지 계산해 보겠습니다.
부모 엔트로피 H = -(0.6×log₂0.6 + 0.4×log₂0.4)
= -(0.6×(-0.737) + 0.4×(-1.322))
= -(-0.442 + (-0.529)) = 0.971
방법1. 신용점수 700 기준 분기:
700이상 그룹 (7명): 승인5, 거절2
H₁ = -(5/7×log₂(5/7) + 2/7×log₂(2/7)) = 0.863
700미만 그룹 (3명): 승인1, 거절2
H₂ = -(1/3×log₂(1/3) + 2/3×log₂(2/3)) = 0.918
IG(신용점수) = 0.971 - (7/10×0.863 + 3/10×0.918)
= 0.971 - (0.604 + 0.276) = 0.091
방법2. 소득 4000만원 기준 분기:
4000이상 그룹 (6명): 승인5, 거절1
H₁ = -(5/6×log₂(5/6) + 1/6×log₂(1/6)) = 0.650
4000미만 그룹 (4명): 승인1, 거절3
H₂ = -(1/4×log₂(1/4) + 3/4×log₂(3/4)) = 0.811
IG(소득) = 0.971 - (6/10×0.650 + 4/10×0.811)
= 0.971 - (0.390 + 0.324) = 0.257
결론: IG(소득) 0.257 > IG(신용점수) 0.091
→ 소득을 먼저 질문하는 게 더 좋은 분기
이 계산을 모든 변수, 모든 기준값에 대해 반복해서 정보 이득이 가장 큰 것을 루트 노드로 선택합니다. 그다음 각 하위 노드에서 같은 과정을 반복합니다. 이 과정이 결정 트리 학습 알고리즘(ID3, C4.5)의 핵심입니다.
지니 불순도 — 또 다른 분기 기준
엔트로피 외에 지니 불순도(Gini Impurity)도 자주 씁니다. 사이킷런(scikit-learn)의 결정 트리 기본값이 지니 불순도입니다. 계산이 로그를 쓰지 않아서 엔트로피보다 빠릅니다.
Gini = 1 - Σ p(c)²
완전히 순수한 노드 (승인만 100%):
Gini = 1 - (1.0²) = 0 ← 불순도 최소
완전히 섞인 노드 (50/50):
Gini = 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5 ← 최대
승인 70%, 거절 30%:
Gini = 1 - (0.7² + 0.3²) = 1 - (0.49 + 0.09) = 0.42
엔트로피 vs 지니 불순도:
엔트로피: 불균형 분포에 더 민감, 로그 계산 필요
지니: 계산 빠름, 대부분 비슷한 결과
실무: 둘 다 써보고 교차검증으로 선택
과적합 문제와 가지치기
결정 트리의 가장 큰 문제는 과적합입니다. 트리가 깊어질수록 훈련 데이터에 완벽하게 맞지만 새 데이터에는 틀립니다. 극단적으로 가면 데이터 하나하나를 외우는 트리가 만들어집니다.
훈련 정확도: 100%, 검증 정확도: 65% → 심각한 과적합
해결책 1 - 사전 가지치기 (Pre-pruning):
max_depth: 트리 최대 깊이 제한 (보통 3~10)
min_samples_split: 분기에 필요한 최소 샘플 수
min_samples_leaf: 리프 노드 최소 샘플 수
해결책 2 - 사후 가지치기 (Post-pruning):
트리를 완전히 키운 후 불필요한 가지 제거
검증 데이터 성능이 낮아지는 가지 제거
실무 기본값 (scikit-learn):
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(
max_depth=5,
min_samples_split=10,
min_samples_leaf=5
)
가지치기는 이 연재에서 다룬 L1·L2 규제와 같은 개념입니다. 모델이 너무 복잡해지지 않도록 제약을 거는 겁니다. 결정 트리에서는 깊이를 제한하는 방식으로 규제를 구현합니다.
랜덤 포레스트 — 약한 트리들의 강력한 조합
결정 트리 하나는 과적합에 취약하고 불안정합니다. 데이터가 조금만 바뀌어도 트리 구조가 크게 달라집니다. 랜덤 포레스트는 이 문제를 여러 트리를 만들어서 다수결로 해결합니다.
① 부트스트랩 샘플링 (Bagging):
원본 데이터 1000개에서 복원 추출로 1000개 샘플
→ 트리마다 다른 데이터로 학습 (약 63% 겹침)
② 랜덤 변수 선택:
각 분기마다 전체 변수 중 √p개만 무작위 선택
변수가 20개면 분기마다 약 4~5개만 고려
→ 트리 간 상관관계 낮춤
③ 다수결 앙상블:
트리 100개 각각 예측 → 다수결로 최종 결정
승인 67개, 거절 33개 → 최종: 승인
왜 더 정확한가:
트리 하나의 오차는 편향되어 있음
독립적인 트리 100개의 평균은 편향이 상쇄됨
→ 편향-분산 트레이드오프 개선
랜덤 포레스트가 강력한 수학적 이유는 중심극한정리와 연결됩니다. 독립적인 예측을 많이 평균할수록 분산이 줄어든다는 원리입니다. 각 트리가 약간씩 다른 오차를 가지고 있어서 평균을 내면 오차가 서로 상쇄됩니다.
또한 부트스트랩 샘플링에서 뽑히지 않은 약 37%의 데이터(OOB, Out-of-Bag 샘플)를 검증에 자동으로 활용합니다. 별도의 검증 세트 없이도 일반화 성능을 추정할 수 있습니다.
결정 트리 vs 랜덤 포레스트 vs 딥러닝
세 모델을 언제 써야 하는지 실무 기준으로 정리합니다.
| 기준 | 결정 트리 | 랜덤 포레스트 | 딥러닝 |
|---|---|---|---|
| 데이터 형태 | 표 형태 | 표 형태 | 이미지, 텍스트, 음성 |
| 해석 가능성 | 매우 높음 | 보통 (변수 중요도) | 낮음 (블랙박스) |
| 데이터 양 | 적어도 됨 | 적어도 됨 | 많이 필요 |
| 과적합 위험 | 높음 | 낮음 | 규제로 제어 |
| 학습 속도 | 빠름 | 보통 | 느림 (GPU 필요) |
| 전처리 필요성 | 거의 불필요 | 거의 불필요 | 표준화 필수 |
실무에서 표 형태 데이터라면 랜덤 포레스트를 먼저 시도합니다. 전처리가 거의 필요 없고, 하이퍼파라미터 튜닝도 간단하고, 변수 중요도(Feature Importance)로 어떤 변수가 예측에 중요한지도 알 수 있습니다. 딥러닝보다 해석이 쉬워서 의료, 금융 같은 고위험 분야에서 특히 선호됩니다.
이 연재에서 다룬 엔트로피와 정보 이득이 결정 트리의 분기 기준이 되고, 과적합과 규제 개념이 가지치기로 이어지고, 중심극한정리가 랜덤 포레스트의 앙상블 효과를 설명합니다. 단순해 보이는 조건문의 연속이 이 모든 수학 위에서 작동하고 있습니다.
'데이터 과학 수학' 카테고리의 다른 글
| 표본이 전체를 말한다. 정규분포와 중심극한정리의 수학적 원리 (0) | 2026.04.26 |
|---|---|
| 표본이 전체를 말한다. 정규분포와 중심극한정리의 수학적 원리 (0) | 2026.04.25 |
| 주성분 분석(PCA): 복잡한 데이터에서 핵심만 남기는 기술 (0) | 2026.04.24 |
| 넷플릭스는 어떻게 내 취향을 아는가, 특이값 분해(SVD)의 원리 (0) | 2026.04.22 |
| 마음을 읽는 행렬, 협업 필터링(Collaborative Filtering)과 유사도의 수학 (0) | 2026.04.21 |