P4-14.1 결정트리(decision tree)¶
Section ID:
P4-14.1Version:v2026.07.20
P4-11에서는 경계(boundary)를 직선처럼 그어 보는 관점을 보았고, P4-12에서는 가까운 이웃을 보는 방식을 보았으며, P4-13에서는 더 좋은 경계의 기준으로 margin을 보았습니다. 이제 같은 지도학습(supervised learning) 문제를 전혀 다른 방식으로 다시 읽습니다.
P4-13.2에서 같은 데이터를 다른 표현 공간(feature space)에서 다시 볼 수 있다는 점을 붙잡았다면, 여기서는 같은 표 형식 데이터를 어떤 질문 순서로 나누어 읽을 것인가라는 관점으로 다시 정리합니다. 즉, 지금 바꾸는 것은 문제 자체가 아니라 같은 문제를 요약하는 단위입니다.
직선 하나를 그리는 대신 질문을 차례로 나누어 가면 어떨지 생각해 보면, 결정트리(decision tree)의 출발점이 더 잘 보입니다. 결정트리는 데이터를 한 번에 설명하려 하지 않고, yes/no 질문을 반복해 점점 더 비슷한 사례끼리 나누어 예측합니다. 즉, 결정트리는 경계선 하나보다 질문 흐름에 더 가깝습니다.
이 절은 결정트리(decision tree), 분기(split), 노드(node), 잎(leaf)의 기본 뜻을 설명합니다. 뒤 절에서는 이 손잡이를 바탕으로 현재 맥락의 판단을 이어 가고, 질문을 이어 붙여 예측하는 기본 감각은 이 절과 개념사전을 기준으로 다시 연결합니다.
결정트리(decision tree)에서 닫을 질문¶
이 절은 다음 질문에 답합니다.
- 결정트리는 어떤 방식으로 예측하는가?
분기(split),노드(node),잎(leaf)은 무엇인가?- 트리는 왜 사람에게 비교적 읽기 쉬운 모델로 여겨지는가?
- 학습할 때는 어떤 질문 후보를 비교하는가?
- 분류(classification)와 회귀(regression) 모두에 왜 쓸 수 있는가?
그 내용은 P4-14.2, P4-15, P4-16에서 이어서 다룹니다. 즉, 이번 절은 결정트리를 질문을 나누어 예측하는 모델로 먼저 읽고, 복잡도와 앙상블 문제는 뒤 절로 넘기는 자리입니다.
결정트리(decision tree)에서 남길 판단 기준¶
- 결정트리를
질문을 나누어 예측하는 모델이라고 설명할 수 있습니다. - 분기, 노드, 잎, 임계값(threshold)의 의미를 말할 수 있습니다.
- 결정트리가 분류와 회귀에 모두 쓰일 수 있다는 점을 이해할 수 있습니다.
- 학습 과정이
좋아 보이는 질문을 고르는 반복이라는 점을 설명할 수 있습니다. 읽기 쉬움과과하게 깊어질 위험이 함께 있다는 점을 구분할 수 있습니다.
학습 배경¶
앞 장들에서 본 대표 모델들은 대체로 이런 인상을 줍니다.
- 선형회귀(linear regression): 직선이나 평면으로 관계를 본다.
- 로지스틱 회귀(logistic regression): 경계 확률을 본다.
- k-NN: 가까운 이웃을 본다.
- SVM: 여유 있는 경계를 본다.
결정트리는 여기서 질문 자체를 바꿉니다.
| 앞 절의 관점 | 결정트리에서 바뀌는 질문 |
|---|---|
| 하나의 경계를 잘 그릴 수 있는가? | 어떤 질문으로 데이터를 나누는 것이 좋은가? |
| 거리나 마진이 중요한가? | 지금 분기하면 label이 더 정리되는가? |
| 수식으로 경향을 표현하는가? | 조건문 흐름처럼 사례를 나눌 수 있는가? |
즉, 결정트리는 공간에 선을 긋는 모델에서 질문을 이어 붙이는 모델로 시야를 바꿔 줍니다. 이 관점은 뒤의 랜덤포레스트와 부스팅을 이해하는 데도 바로 이어집니다.
여기에 한 가지를 더 붙이면 결정트리 절이 지금까지 정리한 비교 기록 구조와 직접 이어집니다. 결정트리를 후보로 올릴 때는 첫 분기가 무엇인가만 남기는 것이 아니라, 어떤 사례가 분기 근처에 남는가, baseline이나 다른 후보보다 무엇이 더 읽기 쉬운가, 다음에 어떤 분기 질문을 더 검토할 것인가를 함께 적어 둡니다. 같은 점수처럼 보여도 어떤 트리는 특정 leaf 안에 다른 class가 더 많이 섞여 있을 수 있으므로, 분기 뒤에 남는 패턴 차이도 따로 읽습니다.
| 같이 남길 기록 | 왜 필요한가 |
|---|---|
| baseline과 결정트리 비교 | 규칙형 질문 흐름이 실제로 무엇을 더 설명하는지 보기 위해서입니다. |
| 첫 분기 근처 사례 | 어떤 사례가 질문 경계 근처에서 애매한지 다시 보기 위해서입니다. |
| leaf에 모인 대표 사례 | 분기 결과가 실제로 어떤 묶음을 만들었는지 확인하기 위해서입니다. |
| 다음 질문 | 깊이를 더 늘릴지, 다른 특징으로 분기할지 정하기 위해서입니다. |
언제 결정트리를 먼저 후보로 올리면 좋은가¶
결정트리는 질문 흐름 자체가 설명이 되는 문제에서 특히 강한 첫 후보가 됩니다.
| 현재 문제 상태 | 결정트리를 먼저 올릴 이유 | 먼저 확인할 점 |
|---|---|---|
| 조건문 형태의 설명이 중요하다 | 분기 흐름을 사람 언어에 가깝게 읽을 수 있기 때문 | 첫 분기가 도메인 상식과 크게 어긋나지 않는지 |
| 표 형식(tabular) 특징이 중심이다 | 숫자/범주 특징을 기준값 질문으로 나누기 쉽기 때문 | 어떤 특징이 분기를 지배하는지 |
| 선형 경계나 거리 기준보다 질문 순서가 자연스럽다 | 전체 공간보다 단계적 구분이 더 설명적일 수 있기 때문 | leaf별로 사례가 너무 섞이지 않는지 |
| 분류와 회귀를 같은 구조로 비교하고 싶다 | leaf 출력만 바꿔 같은 구조를 재사용할 수 있기 때문 | 문제 유형에 맞는 평가 지표를 쓰는지 |
| 이후 랜덤포레스트/부스팅으로 확장할 가능성이 있다 | 트리 계열 전체의 출발 구조를 먼저 잡을 수 있기 때문 | 깊이와 leaf 크기 손잡이를 이해했는지 |
이 표의 핵심은 결정트리를 읽기 쉬운 모델이라고만 두지 않고, 질문 흐름이 실제 설명 단위가 되는 문제에서 먼저 써 볼 후보로 위치시키는 데 있습니다.
주요 학습내용¶
결정트리는 어떤 모델인가¶
scikit-learn 사용자 가이드는 결정트리(decision tree)를 분류와 회귀에 쓰이는 비모수적(non-parametric) 지도학습 방법으로 소개합니다. 같은 문서는 이 모델의 목표를 데이터 특징(feature)으로부터 추론한 단순한 의사결정 규칙(simple decision rules)을 학습해 목표값(target value)을 예측하는 것으로 설명합니다. 또 이 구조를 piecewise constant approximation으로도 볼 수 있다고 덧붙입니다.
이 설명은 다음처럼 더 쉽게 옮길 수 있습니다.
결정트리는 입력 특징을 보고, 어떤 기준값보다 큰지 작은지 같은 질문을 차례로 던지면서 입력 공간을 여러 조각으로 나누고, 각 조각마다 대표 예측값을 두는 모델이다.
예를 들어 고객 이탈(churn) 예측을 생각합니다.
| 특징(feature) | 질문 예시 |
|---|---|
| 최근 30일 접속 수 | 접속 수가 3회 이하인가? |
| 결제 지연 여부 | 최근 결제 지연이 있었는가? |
| 고객센터 문의 횟수 | 문의가 2회 이상인가? |
결정트리는 이런 질문 중 하나를 먼저 고르고, 그 답에 따라 데이터를 두 갈래 이상으로 나눕니다. 그리고 각 갈래에서 다시 질문을 이어 갈 수 있습니다.
작은 흐름으로 보기¶
결정트리를 아직 학습기로 보지 말고, 질문을 따라 내려가는 의사결정 흐름으로 봅니다.
flowchart TD
A["새 입력 사례<br/>새 고객 케이스"]
B["질문 1<br/>최근 방문 수가 3 이하인가?"]
C["질문 2<br/>연체 결제가 있었는가?"]
D["리프 노드<br/>이탈 가능성이 높음"]
E["리프 노드<br/>유지 가능성이 높음"]
F["리프 노드<br/>검토 또는 다른 레이블 필요"]
A --> B
B -->|예| C
B -->|아니오| E
C -->|예| D
C -->|아니오| F
이 도식은 결정트리를 질문을 따라 내려가며 leaf에 도달하는 흐름으로 읽게 해 줍니다. 경계선을 한 번에 긋는 모델과 달리, 트리는 중간 질문을 차례로 거치며 점점 더 비슷한 사례 묶음으로 좁혀 간다는 점이 핵심입니다.
이 그림에서 핵심은 다음입니다.
- 중간의 질문 상자가 노드(node)입니다.
- 질문에 따라 갈라지는 지점이 분기(split)입니다.
- 더 이상 질문하지 않고 예측을 내놓는 끝점이 잎(leaf)입니다.
즉, 결정트리는 질문 node를 따라 내려가 leaf에 도달하는 구조라고 읽을 수 있습니다.
프로젝트 메모 형식으로 줄이면 다음처럼 적을 수 있습니다.
| 기록 항목 | 예 |
|---|---|
| first split | visits <= 3 |
| near-split cases | 고객 C, 고객 D |
| current leaf prediction | churn 또는 stay |
| review 필요 여부 | 경계 근처 고객은 다시 확인 |
| 다음 질문 | late_payment를 다음 분기로 둘 것인가 |
이 표가 있으면 결정트리 소개가 비교 후보 -> 분기 근처 사례 -> 다음 질문 구조로 읽힙니다. 이때 분기 근처 사례와 leaf 구성을 함께 봐야, 같은 정확도처럼 보여도 어떤 트리가 더 읽기 쉽고 어떤 트리가 더 불안정한지 구분할 수 있습니다.
node, split, leaf를 어떻게 이해하면 좋은가¶
이 절에서는 용어를 짧고 분명하게 끊어 주는 것이 중요합니다.
| 용어 | 쉬운 설명 | 이 절에서의 역할 |
|---|---|---|
| 노드(node) | 질문이 놓이는 지점 | 데이터를 나눌 기준을 둔다 |
| 분기(split) | 질문 결과에 따라 갈라지는 일 | 데이터를 더 비슷한 묶음으로 나누려 한다 |
| 잎(leaf) | 마지막 예측이 적히는 끝점 | class 또는 수치를 낸다 |
| 임계값(threshold) | 숫자를 자르는 기준값 | x <= 3.5 같은 질문을 만든다 |
이 용어들은 뒤의 하이퍼파라미터 절과도 바로 연결됩니다.
max_depth는 트리를 얼마나 깊게 허용할지와 연결됩니다.min_samples_split은 한 node를 더 나눌 만큼 사례가 충분한지와 연결됩니다.
하지만 이 절에서는 아직 깊이를 어디까지 허용할까보다 질문을 나누는 구조 자체가 무엇인가에 집중합니다.
세부 학습내용¶
왜 비교적 읽기 쉬운 모델이라고 하는가¶
결정트리는 Part 4에서 처음 만나는 모델들 중 비교적 규칙처럼 읽기 쉬운 편에 속합니다. scikit-learn 사용자 가이드는 이를 white box model 관점으로 설명합니다. 즉, 어떤 상황이 모델 안에서 관찰된다면 그 조건을 비교적 불리언 논리(boolean logic)로 설명하기 쉽다는 뜻입니다. 앞 절들에서 본 선형 모델의 가중치(weight)나 SVM의 margin보다, 질문을 따라가면 예측이 나온다는 구조가 사람에게 더 익숙하기 때문입니다.
예를 들어 다음 두 설명을 비교해 보면 감이 더 분명해집니다.
- 선형 모델: 여러 특징의 가중합이 기준보다 크면 positive
- 결정트리: 최근 접속 수가 적고, 결제 지연이 있으면 churn 가능성 높음
둘 다 모델이지만, 후자는 사람이 업무 규칙을 읽는 방식과 더 닮아 있습니다.
실무에서도 이 장점은 자주 언급됩니다.
| 상황 | 결정트리가 주는 장점 |
|---|---|
| 고객 이탈 분석 | 어떤 질문 순서로 이탈을 가른 것인지 보기 쉽다 |
| 대출 심사 보조 | 어떤 조건이 먼저 분기를 만든 것인지 설명하기 쉽다 |
| 설비 이상 탐지 | 특정 센서 값 범위가 어떤 분기를 만들었는지 읽기 쉽다 |
다만 여기서 바로 주의할 점도 있습니다.
읽기 쉬운 것과 항상 좋은 일반화를 주는 것은 같은 말이 아니다.
이 위험은 바로 다음 절 P4-14.2에서 다룹니다.
분류와 회귀에 모두 쓸 수 있다는 말은 무슨 뜻인가¶
결정트리는 분류(classification)에도, 회귀(regression)에도 쓸 수 있습니다. 달라지는 것은 leaf에서 무엇을 내놓는가입니다.
| 문제 유형 | leaf에서 내놓는 것 |
|---|---|
| 분류 | 가장 많은 class, 또는 class 비율 |
| 회귀 | 그 leaf에 들어온 값들의 평균처럼 대표 수치 |
예를 들어:
- 고객 이탈 예측:
이탈,유지 - 주택 가격 예측:
예상 가격 5.2억
즉, 트리 구조는 비슷하고 마지막 출력의 성격이 달라집니다. scikit-learn의 predict_proba 설명도 분류 트리에서 예측 확률을 해당 leaf에 들어온 같은 class 샘플의 비율로 읽습니다. 이 때문에 Part 4의 평가 지표 절에서 강조했듯이, 알고리즘 이름보다 먼저 이 문제가 분류인가 회귀인가를 확인해야 합니다.
학습은 어떻게 질문을 고르는가¶
결정트리 학습의 핵심은 좋아 보이는 질문 후보를 비교하는 일입니다.
- 여러 feature를 본다.
- 각 feature에서 잘라 볼 수 있는 threshold 후보를 만든다.
- 나누기 전보다 나눈 뒤가 label을 더 정리해 주는지 계산한다.
- 가장 좋은 질문을 현재 node에 둔다.
- 필요하면 각 가지에서 다시 반복한다.
이를 간단히 그리면 다음과 같습니다.
flowchart TD
A["학습 데이터"]
B["질문 후보를 만든다<br/>특징 + 임계값"]
C["불순도 감소나<br/>다른 분할 점수를 비교한다"]
D["가장 좋은 분할을 고른다"]
E["행을 각 가지로 보낸다"]
F["필요하면 반복한다"]
A --> B --> C --> D --> E --> F
이 도식은 결정트리 학습이 결국 좋은 첫 질문과 다음 질문을 고르는 반복이라는 점을 보여 줍니다. 특징과 threshold 후보를 비교해 impurity를 더 잘 줄이는 split을 고르고, 각 가지에서 같은 절차를 다시 반복하는 구조입니다.
여기서 impurity는 node 안이 얼마나 섞여 있는지를 보는 말입니다. API 문서 기준으로는 분류 트리에서 criterion으로 gini, entropy, log_loss 같은 기준을 둘 수 있습니다. 아직 수식을 길게 외우기보다, 한 node 안에 class가 섞여 있으면 impurity가 높고, 한쪽 class로 정리되면 impurity가 낮다는 감각을 먼저 잡으면 됩니다.
impurity를 직관으로 읽기¶
분류 트리에서는 질문을 던졌더니 label이 더 정리되었는가?를 보고 싶습니다.
예를 들어 node 안에 고객 10명이 있는데:
- 5명은 churn
- 5명은 stay
라면 꽤 섞여 있습니다.
반면 어떤 질문으로 나눈 뒤:
- 왼쪽 가지는 churn 4명, stay 1명
- 오른쪽 가지는 churn 1명, stay 4명
이 되었다면, 두 가지 모두 전보다 더 정리된 상태라고 읽을 수 있습니다.
즉, 좋은 split은 대체로 섞인 node를 덜 섞인 node들로 바꾸는 질문입니다.
사례 및 예시¶
사례 1. 고객 이탈을 한 번에 설명하지 않고 질문으로 좁혀 가고 싶을 때¶
구독 서비스 팀이 고객 이탈 예측 모델을 만들고 있습니다. 사람이 먼저 보던 기준은 최근 방문 수가 적은가, 결제 지연이 있었는가, 고객센터 문의가 잦은가 같은 질문들이었습니다.
이 팀은 선형 모델처럼 한 번에 점수를 계산하는 방식보다, 현업이 읽을 수 있는 질문 흐름이 필요합니다. 그래서 최근 방문 수가 3회 이하인가?를 묻고, 그다음 결제 지연이 있었는가?를 묻는 식으로 조건을 나누면, 비슷한 행동을 보인 고객끼리 점점 더 같은 가지로 모이기 시작합니다. 이때 결정트리는 경계선 하나보다 좋은 질문 순서를 찾는 모델로 읽습니다.
flowchart TD
A["고객 기록"]
B["방문 횟수 임계값을 묻는다"]
C["연체 여부를 묻는다"]
D["리프: 이탈 가능성 높음"]
E["리프: 유지 가능성 높음"]
F["리프: 섞인 사례라 검토 필요"]
A --> B
B --> C
C --> D
B --> E
C --> F
이 장면에서 중요한 것은 질문 자체가 데이터로부터 선택된다는 점입니다. 아무 조건이나 쓰는 것이 아니라, 현재 node 안의 label을 더 잘 정리해 주는 feature와 threshold를 비교해 첫 분기를 고르고, 그다음 같은 절차를 반복합니다. 그래서 결정트리는 사람이 규칙을 임의로 적는 모델이 아니라, 데이터를 더 정리해 주는 질문을 누적하는 모델입니다.
확인 가능한 결과는 첫 split 후보를 비교한 점수와 최종 작은 트리 구조에서 드러납니다. visits <= 3이 다른 질문보다 더 잘 분리된다면, 왜 그 질문이 첫 node에 놓였는지 설명할 수 있고, 각 leaf에 어떤 고객이 모였는지 보면 트리가 어떻게 규칙처럼 읽히는지도 확인할 수 있습니다.
실무 장면에서 어떻게 읽을 수 있는가¶
결정트리는 특히 표 형식 데이터(tabular data)에서 자주 떠오르는 모델입니다. 이유는 숫자와 범주 특징을 기준값이나 조건으로 나누는 방식이 비교적 자연스럽기 때문입니다.
| 업무 장면 | 결정트리식 질문 예시 |
|---|---|
| 고객 이탈 | 최근 방문 수가 적은가? 결제 지연이 있었는가? |
| 대출 심사 보조 | 소득이 일정 기준 이상인가? 연체 기록이 있는가? |
| 설비 이상 탐지 | 온도가 기준을 넘었는가? 진동이 특정 범위 밖인가? |
| 마케팅 반응 예측 | 최근 구매가 있었는가? 할인 메시지 반응률이 높은가? |
이런 장면에서는 선형 모델보다 결정트리가 더 직관적으로 느껴질 수 있습니다. 반대로 데이터가 매우 매끄러운 연속 관계를 가지거나, 작은 흔들림에도 구조가 크게 바뀌는 상황에서는 주의가 필요합니다. 또한 API 문서가 경고하듯 기본 크기 제어값을 두지 않으면 트리가 fully grown and unpruned 상태로 매우 커질 수 있습니다. 이 지점이 바로 다음 절의 과적합 논의와 이어집니다.
연습 및 예제¶
Python 예제로 좋은 첫 질문 찾기¶
이번 예제는 scikit-learn 학습기를 바로 쓰기보다, 결정트리가 첫 split을 고르는 느낌을 직접 확인하는 작은 실습입니다.
- 문제 상황: 고객 이탈(churn) 분류의 첫 질문을 고른다.
- 입력(input):
visits,late_payment - 정답(label):
stay,churn - 확인할 개념:
- feature와 threshold를 바꾸면 split 점수가 달라진다.
- 더 잘 정리되는 질문이 더 좋은 첫 질문이 될 수 있다.
- 결정트리는 결국 이런 질문 선택을 반복한다.
실행 결과 예시는 다음과 같습니다.
이 출력에서 읽어야 할 것은 세 가지입니다.
- 아무 질문이나 같은 품질을 주지 않습니다.
visits <= 3.0이 현재 데이터에서는 가장 잘 정리되는 첫 질문으로 보입니다.- 트리 학습은 이런 비교를 반복하면서 구조를 만듭니다.
즉, 결정트리는 사람이 직감으로 질문을 쓰는 모델이 아니라, 데이터를 더 정리해 주는 질문을 찾아 누적하는 모델입니다.
여기서 한 걸음 더 나가면, 좋은 첫 질문은 데이터가 조금만 바뀌어도 달라질 수 있다는 점도 함께 봐야 합니다. 예를 들어 고객 F의 label이 stay가 아니라 churn이었다면 late_payment 쪽 질문이 더 강한 후보처럼 보일 수 있습니다. 즉 첫 split은 절대적인 규칙이 아니라, 현재 학습 데이터가 어떤 묶음을 만들고 있는지에 기대는 선택입니다.
값 하나 바꿔 보며 첫 split이 흔들리는지 확인하기¶
같은 예제를 그대로 두고 값 하나만 바꾸면 첫 질문이 얼마나 민감하게 달라지는가를 확인할 수 있습니다.
- 바꿔 볼 값: 고객
F의label - 바꾸는 이유:
late_payment가 더 강한 신호처럼 보이는 상황을 일부러 만든다 - 확인할 개념:
- split 점수는 데이터 구성이 바뀌면 함께 바뀐다.
- 결정트리의 질문 흐름은
현재 데이터가 더 잘 정리되는 방향에 따라 달라진다. - 첫 split을 읽을 때는 점수와 함께
어떤 사례가 기준을 바꾸는가도 같이 봐야 한다.
실행 결과 예시는 다음과 같습니다.
이 비교에서 봐야 할 핵심은 처음에는 visits가 더 좋아 보였지만, 데이터 한 건의 label을 바꾸자 late_payment가 첫 질문으로 올라왔다는 점입니다. 이 결과는 결정트리를 불안정한 모델이라고 단정하자는 뜻이 아니라, 분기 구조를 읽을 때 현재 데이터가 어떤 사례를 어디에 두고 있는가를 함께 확인해야 한다는 뜻입니다.
같은 비교를 짧은 기록 언어로 먼저 묶어 보면 다음처럼 읽을 수 있습니다.
| 비교 포인트 | 원래 데이터 | label 변경 뒤 |
|---|---|---|
| 첫 split | visits <= 3.0 | late_payment <= 0.5 |
| 구조를 흔든 사례 | F는 첫 split을 바꾸지 않음 | F의 label 변경이 첫 split을 바꿈 |
| 먼저 다시 볼 것 | visits 기준에서 C가 왜 함께 묶였는가 | late_payment 기준에서 F가 왜 구조를 밀었는가 |
이 표의 목적은 무엇이 달라졌는가를 요약하는 데서 끝나지 않습니다. 초심자 기준에서는 어떤 사례가 질문 선택을 실제로 바꾸었는가를 이렇게 한 번 적어 두어야, 다음 절에서 깊이와 leaf 크기가 구조를 왜 더 흔들 수 있는지도 자연스럽게 이어집니다.
초심자 기준에서는 이 두 실행을 나란히 두고 아래 질문에 답해 보는 것이 좋습니다.
- 어떤 사례 하나가 첫 split 선택을 바꿨는가
- split 점수 차이가 작을 때는 어떤 질문이 더 읽기 쉬운지 사람 해석도 함께 봐야 하는가
- 이 민감도가 다음 절의 깊이, leaf 크기, 과적합 위험과 어떻게 이어질 것 같은가
가능하면 여기서 한 줄 더 적어 봅니다. 현재 데이터에서는 visits가 첫 질문이었지만, F의 label 하나가 바뀌자 late_payment가 더 좋은 첫 질문이 되었다. 이런 문장 하나를 직접 써 보면, 결정트리가 고정 규칙 암기가 아니라 현재 데이터가 더 잘 정리되는 질문 선택이라는 점이 더 분명해집니다.
아주 작은 트리를 직접 적용해 보기¶
방금 찾은 첫 split을 바탕으로, 사람이 읽을 수 있는 작은 트리를 손으로 적으면 다음처럼 읽을 수 있습니다.
이 코드는 학습기 전체가 아니라, 학습 결과를 사람이 읽는 모습을 단순화한 것입니다. 결정트리가 비교적 설명 가능해 보인다는 말은 보통 이런 모습에서 옵니다.
같은 구조를 Python으로 아주 짧게 실행해 보면 더 분명합니다.
문제 상황:
- 결정트리의 분기 규칙은 그림으로만 보지 말고 실제 입력을 넣어 결과가 어떻게 나오는지 확인하는 편이 이해에 도움이 된다
입력(input):
- 간단한 트리 규칙
predict - 고객 예시 목록
examples
기대 출력(output):
- 각 고객 예시에 대한 예측 결과
확인할 개념:
- 결정트리는 if-else 형태의 분기 규칙으로 읽을 수 있다
- 설명 가능성이 높다는 말은 이런 분기 과정을 사람이 따라갈 수 있다는 뜻에 가깝다
실행 결과 예시는 다음과 같습니다.
이 예제는 결정트리의 중요한 성격을 보여 줍니다.
- 예측 경로를 따라가며 읽을 수 있습니다.
- 어떤 질문에서 갈라졌는지 설명하기 쉽습니다.
- 하지만 질문을 계속 추가하면 구조가 빠르게 커질 수 있습니다.
마지막 항목이 바로 다음 절의 주제입니다.
연습: 직접 작은 트리 기록 남기기¶
위 두 예제를 실행했다면, 이제 결과를 그냥 보는 데서 멈추지 말고 짧은 기록으로 남겨 봅니다.
- 원래 데이터에서 첫 split이 무엇이었는지 적습니다.
- label 하나를 바꾼 뒤 첫 split이 무엇으로 바뀌었는지 적습니다.
- 두 경우 모두에서
가장 애매한 사례를 1건씩 고릅니다. - 마지막으로
이 트리를 바로 깊게 키우고 싶은가, 아니면 다음 절에서 깊이 제한을 먼저 보고 싶은가를 한 문장으로 적습니다.
가능하면 아래 형식으로 직접 채워 봅니다.
| 기록 항목 | 원래 데이터 | label 변경 뒤 |
|---|---|---|
| first split | visits <= 3.0 | late_payment <= 0.5 |
| 가장 애매한 사례 | C | F |
| leaf에서 가장 많이 섞인 지점 | visits <= 3.0 왼쪽 묶음 | late_payment > 0.5 오른쪽 묶음 |
| 다음 질문 | late_payment를 다음 분기로 둘 것인가 | 깊이를 더 늘리기 전에 leaf를 먼저 점검할 것인가 |
이 연습의 핵심은 정답을 외우는 것이 아니라, 결정트리를 점수 하나가 아니라 질문 구조와 사례 묶음으로 읽는 습관을 만드는 데 있습니다.
처음에는 아래처럼 아주 짧게 적어도 충분합니다.
| 기록 예시 | 원래 데이터 | label 변경 뒤 |
|---|---|---|
| first split | visits <= 3.0 | late_payment <= 0.5 |
| 가장 애매한 사례 | C | F |
| 다음 질문 | late_payment를 다음 분기로 둘 것인가 | 깊이를 더 늘리기 전에 leaf를 먼저 점검할 것인가 |
체크리스트¶
- 지금 문제에서 직선 경계보다 질문 흐름 설명이 더 자연스러운가?
- 첫 분기와 leaf 구성이 어떤 사례 묶음을 만들었는지 다시 볼 수 있는가?
- 읽기 쉬움과 일반화 성능을 같은 말처럼 섞지 않고 있는가?
- 결정트리가
질문을 나누어 예측하는 모델이며, node는 질문, split은 분기, leaf는 최종 예측이라는 점을 설명할 수 있는가 - 좋은 split이 대체로 label을 더 덜 섞인 묶음으로 바꾸는 이유를 설명할 수 있는가
- 결정트리는 분류와 회귀 모두에 쓸 수 있지만, 읽기 쉬움이 곧 일반화 보장을 뜻하지는 않는다는 점을 설명할 수 있는가
출처와 참고 자료¶
- scikit-learn developers,
1.10. Decision Trees, scikit-learn User Guide, 확인 날짜: 2026-06-27. https://scikit-learn.org/stable/modules/tree.html - scikit-learn developers,
DecisionTreeClassifier, scikit-learn API Reference, 확인 날짜: 2026-06-27. https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html - Leo Breiman, Jerome Friedman, Richard Olshen, Charles Stone, Classification and Regression Trees, Routledge, 1984. 확인 날짜: 2026-07-19. https://doi.org/10.1201/9781315139470