규칙을 늘리면 학습 자료에는 맞아도 새 자료에는 틀릴 수 있습니다
의사결정나무는 조건에 따라 관측값을 나누고 마지막에 도착한 잎에서 예측합니다. 조건을 계속 늘려 회원 한 명씩 구분하면 학습 자료에는 잘 맞아도 새 회원에게 통한다는 보장은 없습니다.
아래는 가상 도서 대여 서비스의 다음 달 재이용 여부를 예측하는 예입니다. 학습 자료에 정답인 재이용 여부가 들어 있으므로, 정답 없이 회원을 묶는 군집분석과는 다릅니다.
뿌리에서 잎까지 조건을 따라갑니다
전체 학습 자료가 놓인 첫 지점을 뿌리 노드라고 합니다. 조건으로 자료를 나누는 중간 지점은 내부 노드, 더 나누지 않고 예측을 내리는 끝은 잎 노드입니다. 한 관측값은 조건을 차례로 통과해 하나의 잎에 도착합니다. 분류나무는 범주를, 회귀나무는 숫자를 예측합니다.
| 확인할 대상 | 분류나무 예 | 회귀나무 예 |
|---|---|---|
| 예측 목표 | 재이용함 또는 안 함 | 다음 달 대여 권수 |
| 잎에 모인 값 | 두 범주의 개수 | 실제 대여 권수들 |
| 대표적인 분할 기준 | 지니 불순도, 엔트로피 | 제곱오차 |
| 잎의 예측 예 | 가장 많은 범주 | 제곱오차 기준일 때 평균 |
CART는 이진 분할로 분류와 회귀에 사용하는 나무 방식입니다. 모든 의사결정나무 알고리즘의 세부 규칙이 같지는 않습니다. 분류 문제라도 알고리즘에 따라 분할 기준이 다를 수 있습니다. 문제에 주어진 기준부터 확인합니다. 여기서는 지니지수를 사용한 이진 분류와 제곱오차를 사용한 회귀 예를 살펴봅니다.
지니지수는 범주가 얼마나 섞였는지 읽는 값입니다
어떤 노드에서 범주 k의 비율을 pₖ라고 하면 지니지수는 1 − Σpₖ²입니다. 범주별 비율을 제곱해 모두 더한 뒤 1에서 빼는 계산입니다. 노드 안의 값이 모두 같은 범주라면 비율 하나가 1이고 나머지는 0이어서 지니지수는 0입니다. 두 범주가 반씩 있으면 1 − 0.5² − 0.5² = 0.5입니다.
이진 분류에서는 두 범주가 반씩 섞였을 때 최대인 0.5가 됩니다. 하지만 범주가 세 개이고 비율이 모두 같으면 지니지수는 1 − 3 × (1/3)² = 2/3입니다. 지니지수의 최댓값을 언제나 0.5라고 외우면 범주 수가 바뀐 문제에서 틀립니다. K개 범주가 균등하게 섞인 경우 최댓값은 1 − 1/K입니다.
한 종류로 모이면 0, 섞일수록 커진다고 기억하세요. 지니지수가 0이라고 새 자료의 예측 오류도 0이라는 뜻은 아닙니다. 학습 자료 한 개만 남은 잎도 지니지수는 0이지만, 그 한 개가 미래 전체를 대표하지는 못합니다.
두 자식 노드의 크기를 반영해 비교합니다
부모 노드에 재이용 회원 5명과 미이용 회원 5명이 있습니다. 부모의 지니지수는 0.5입니다. 분할 후보 A는 왼쪽에 재이용 4명만, 오른쪽에 재이용 1명과 미이용 5명을 보냅니다. 왼쪽 지니지수는 0이고 오른쪽은 1 − (1/6)² − (5/6)² = 10/36입니다.
두 자식의 지니지수를 단순히 반씩 더하면 안 됩니다. 왼쪽은 4명, 오른쪽은 6명이므로 전체 10명에 대한 비중을 반영합니다. 분할 후 가중 불순도는 (4/10) × 0 + (6/10) × (10/36) = 1/6, 약 0.1667입니다. 부모와의 차이인 불순도 감소량은 0.5 − 1/6 = 1/3, 약 0.3333입니다.
| 후보 | 왼쪽 구성 | 오른쪽 구성 | 분할 후 가중 지니지수 | 감소량 |
|---|---|---|---|---|
| A | 재이용 4, 미이용 0 | 재이용 1, 미이용 5 | 약 0.1667 | 약 0.3333 |
| B | 재이용 4, 미이용 1 | 재이용 1, 미이용 4 | 0.32 | 0.18 |
후보 B는 양쪽이 모두 5명이며 각 지니지수는 1 − 0.8² − 0.2² = 0.32입니다. 두 후보가 같은 부모를 나누고 다른 조건이 같다면 가중 불순도가 더 낮은 A를 선택합니다. 한쪽 잎의 순수함만 보고 고르지 않고 반대쪽에 몇 명이 어떻게 남는지도 계산하는 이유입니다.
숫자를 예측할 때는 잎 안의 오차를 봅니다
회귀나무에서는 범주별 비율 대신 실제 값과 예측값의 차이를 봅니다. 한 잎에 대여 권수 2, 4, 9가 들어 있다면 제곱오차를 최소로 만드는 상수 예측은 평균인 5입니다. 제곱오차의 합은 (2−5)² + (4−5)² + (9−5)² = 26입니다. 잎의 평균제곱오차는 26/3입니다.
여기서 지니지수를 구하려고 2, 4, 9를 세 범주로 바꾸면 원래의 숫자 예측 문제가 달라집니다. 반대로 숫자 코드 0과 1로 저장된 재이용 여부는 여전히 범주 예측일 수 있습니다. 자료가 숫자로 보이는지보다 목표가 무엇인지로 분류와 회귀를 구분하세요. 절대오차처럼 다른 손실 기준을 사용하면 잎의 대표값도 달라질 수 있으므로 평균 규칙의 적용 조건을 함께 기억합니다.
가지를 멈추거나 줄인 뒤 새 자료로 평가합니다
최대 깊이, 잎의 최소 표본 수 같은 조건으로 나무가 지나치게 커지는 것을 제한할 수 있습니다. 먼저 나무를 만든 뒤 복잡한 부분을 줄이는 가지치기도 사용합니다. 제한이 너무 강하면 필요한 관계를 놓치는 과소적합이, 너무 약하면 학습 자료의 우연한 패턴까지 따라가는 과적합이 생길 수 있습니다.
깊이를 선택할 때는 검증 자료나 교차검증 결과를 비교합니다. 최종 시험용 자료를 반복해서 보고 설정을 고르면 그 자료가 사실상 검증 자료로 쓰이게 됩니다. 불순도 감소는 학습 중 분할을 고르는 기준이고, 새 자료의 정확도나 재현율은 모델을 평가하는 기준입니다. 두 값은 같은 성능 점수가 아닙니다.
분할 계산 뒤에는 부모의 표본 수와 두 자식의 표본 수 합이 같은지 확인하세요. 새 자료에서의 분류 성능은 정확도, 정밀도, 재현율로 따로 평가합니다.
핵심 정리와 실수 점검
핵심 정리
- 분류나무의 지니지수는 범주의 혼합 정도이며 새 자료의 오답률이 아닙니다.
- 분할 후 불순도는 각 자식 노드의 표본 비중으로 가중평균합니다.
- 분할 기준을 잘 낮춘 모델도 별도 자료에서 과적합 여부를 확인해야 합니다.
놓치기 쉬운 지점
- 크기가 다른 자식 노드의 지니지수를 단순 평균하는 실수
- 범주가 세 개 이상인데 지니지수의 최댓값을 0.5로 고정하는 실수
- 회귀나무의 평균 예측은 여기서 사용한 제곱오차 기준에 해당합니다.
확인할 내용
- 각 노드의 전체 표본 수와 범주별 비율을 적는다.
- 부모 불순도에서 자식의 가중 불순도를 뺀다.
- 학습 중 분할 점수와 검증 자료의 성능을 구분한다.
이해한 내용 확인하기
직접 작성한 학습용 문항입니다. 공식 기출문제가 아닙니다.
Q1. 한 노드에 두 범주가 3개와 1개 있습니다. 지니지수는 얼마인가요?
생각한 뒤 해설 보기
1 − (3/4)² − (1/4)² = 6/16 = 0.375입니다. 숫자가 바뀌어도 비율을 먼저 구합니다.
Q2. 부모의 8개 자료를 2개와 6개인 자식으로 나눴습니다. 각 지니지수가 0과 0.5일 때 가중 불순도는 얼마인가요?
생각한 뒤 해설 보기
(2/8) × 0 + (6/8) × 0.5 = 0.375입니다. 단순 평균인 0.25가 아닙니다.
Q3. 세 범주가 같은 비율일 때 지니지수가 0.5보다 커도 계산 오류인가요?
생각한 뒤 해설 보기
오류가 아닙니다. 1 − 3 × (1/3)² = 2/3입니다. 0.5는 이진 분류일 때의 최댓값입니다.
Q4. 학습 자료 한 개가 들어 있는 잎의 지니지수가 0입니다. 이 모델은 새 자료에서도 오류가 없나요?
생각한 뒤 해설 보기
그렇게 결론 낼 수 없습니다. 지니지수 0은 그 잎의 학습 범주가 섞이지 않았다는 뜻일 뿐이며, 별도 자료의 예측 성능을 확인해야 합니다.
Q5. 제곱오차를 사용하는 회귀나무의 한 잎에 3, 6, 9가 있습니다. 상수 예측값은 무엇인가요?
생각한 뒤 해설 보기
세 값의 평균인 6입니다. 범주의 최빈값이나 지니지수를 계산하는 문제가 아닙니다.
더 궁금한 점
나무는 항상 분류 모델인가요?
아닙니다. 범주를 예측하면 분류나무, 숫자를 예측하면 회귀나무입니다. 목표와 손실 기준을 먼저 확인하세요.
참고 자료와 확인 범위
- scikit-learn 의사결정나무 설명 ↗
분류 불순도, 가중 분할 기준, 회귀 손실과 가지치기 개념을 확인했습니다. 회원 예제와 계산 문제는 자체 작성했습니다.
- scikit-learn 교차검증 안내 ↗
검증을 위한 데이터 분리와 설정 선택 시 시험 자료를 보존하는 원칙을 참고합니다.