지니계수와 엔트로피, 의사결정나무 불순도 완전정복
교재에서 지니계수랑 엔트로피 공식 보자마자 책을 덮었어요.
수험생 단톡방에 흔히 올라오는 하소연입니다. 시그마 기호, 로그2, 확률 p… 처음 보면 암호처럼 느껴지는 게 당연합니다. ‘공식은 외웠는데 문제에 숫자만 바뀌어 나오면 또 틀린다’는 말도 정말 많이 듣습니다. 그런데 막상 뜯어보면 두 지표가 하는 일은 딱 하나예요. ‘이 노드 안에 클래스가 얼마나 뒤섞여 있는가’를 숫자 하나로 표현하는 것. 이 글 하나로 그 숫자가 어떻게 만들어지고, 왜 두 가지 버전(지니계수·엔트로피)이 존재하는지, 시험에서 어떤 식으로 물어보는지까지 한 번에 정리해 드리겠습니다. 공식을 통째로 외우기보다 왜 1에서 빼는지, 왜 하필 로그2를 쓰는지를 이해하고 나면, 숫자가 바뀌어도 흔들리지 않습니다.
1. 불순도란 무엇인가 — 나무는 왜 이 숫자를 보고 쪼개는가
의사결정나무는 데이터를 계속 '이 조건이 참이면 왼쪽, 거짓이면 오른쪽'으로 쪼개면서 자라나는 모델입니다. 그런데 대체 어떤 조건으로 쪼개야 '잘' 쪼갠 걸까요? 여기서 나오는 기준이 바로 불순도(Impurity)입니다.
비유를 하나 들어볼게요. 상자 안에 공 10개가 들어 있다고 생각해 보세요. 상자 A에는 보라색 공 10개만 들어 있고, 상자 B에는 보라색 5개와 초록색 5개가 정확히 반반 섞여 있습니다. 눈을 감고 상자에서 공 하나를 꺼냈을 때 '무슨 색일지' 맞히기 쉬운 쪽은 어디일까요? 당연히 상자 A입니다. 어차피 다 보라색이니까요. 상자 B는 반반이라 색을 맞히기가 가장 어렵습니다. 이때 상자 A는 '순수(pure)'하다고 하고, 상자 B는 '불순도가 최대'라고 말합니다.
의사결정나무는 데이터를 분할할 때마다 '분할 후 자식 노드들이 분할 전 부모 노드보다 더 순수해지는가'를 확인합니다. 이 순수한 정도(정확히는 불순한 정도)를 숫자로 측정하는 대표적인 두 가지 지표가 바로 지니계수(Gini Index)와 엔트로피(Entropy)입니다. 두 지표 모두 값이 0이면 완전히 순수한 노드(한 클래스만 존재), 값이 클수록 여러 클래스가 뒤섞여 있는 노드라는 뜻입니다.
이게 왜 중요할까요? 의사결정나무는 결국 맨 끝에 있는 리프 노드(leaf node)의 '다수결'로 예측값을 정합니다. 리프 노드가 상자 B처럼 반반 섞여 있다면 '승인일까 거절일까?'를 예측해도 사실상 동전 던지기와 다를 게 없습니다. 반대로 리프 노드가 상자 A처럼 한 클래스로만 채워져 있다면 예측 정확도가 훨씬 높아지겠죠. 그래서 나무를 학습시키는 과정은 사실상 '매 단계마다 가장 불순도를 많이 줄여주는 질문(분할 조건)을 찾아내는 과정'이라고 봐도 무방합니다. 스무고개 게임에서 '가장 정보량이 많은 질문부터 던지는 것'과 원리가 똑같습니다.
시험에 자주 나오는 함정 '불순도가 낮을수록 좋은 분할이다'라는 문장을 '지니계수나 엔트로피 값이 클수록 좋은 분할이다'로 착각하게 만드는 문제가 자주 나옵니다. 반대입니다. 의사결정나무는 분할 후 불순도가 최대한 많이 '감소'하는 조건을 선택합니다. 값 자체가 큰 게 좋은 게 아니라, 부모보다 자식이 얼마나 더 순수해졌는지(감소폭)가 중요합니다.
2. 지니계수 — CART가 쓰는 불순도 지표
공식과 직관
지니계수는 원래 경제학에서 소득 불평등을 측정하던 지표인데, 의사결정나무에서는 '한 노드에서 데이터 하나를 뽑아 무작위로 라벨을 붙였을 때, 실제 라벨과 다를 확률'로 씁니다. 노드 t에 클래스가 k개 있고 각 클래스의 비율이 p₁, p₂, …, p_k라고 하면 공식은 다음과 같습니다.
Gini(t) = 1 − Σ(pᵢ²)
직관적으로 풀어보면: 만약 어떤 클래스가 100% 비율이라면(p=1), Gini = 1 − 1² = 0. 완전히 순수하니 불순도가 0이 되는 게 맞죠. 반대로 이진 분류에서 두 클래스가 정확히 반반(0.5, 0.5)이라면 Gini = 1 − (0.5² + 0.5²) = 1 − 0.5 = 0.5로, 이진 분류에서 나올 수 있는 최댓값이 됩니다.
공식이 '1 − Σpᵢ²'인 이유를 조금 더 풀어보면 이렇습니다. Σpᵢ²은 '같은 노드에서 두 개를 무작위로 뽑았을 때 우연히 같은 클래스일 확률'입니다. 여기서 1을 빼면 자연스럽게 '서로 다른 클래스일 확률'이 되고, 이 값이 바로 지니계수입니다. 즉 지니계수가 크다는 건 '아무렇게나 두 개를 뽑아도 클래스가 다를 가능성이 높다' = '그만큼 여러 클래스가 뒤섞여 있다'는 뜻이죠. 참고로 파이썬 scikit-learn의 DecisionTreeClassifier도 기본 불순도 지표(criterion)로 지니계수를 사용합니다. 계산에 로그가 없어 제곱 연산만으로 끝나기 때문에 엔트로피보다 계산 속도가 살짝 빠르다는 점도 실무에서 지니계수가 기본값으로 많이 쓰이는 이유 중 하나입니다.
계산 예시 — 대출 승인 데이터로 직접 계산해 보기
말로만 하면 감이 안 오니, 직접 숫자로 계산해 보겠습니다. 대출 심사 데이터 20건이 있고, 그중 승인 10건·거절 10건이라고 해봅시다(부모 노드는 최악의 불순도 상태네요). 여기에 '신용점수 우수 여부'라는 조건으로 분할했더니, 신용점수가 우수한 10건 중에는 승인 8건·거절 2건이, 나머지 10건 중에는 승인 2건·거절 8건이 나왔습니다.
- 부모 노드: 승인10, 거절10 → Gini = 1 − (0.5² + 0.5²) = 0.50
- 왼쪽 자식(신용 우수): 승인8, 거절2 → Gini = 1 − (0.8² + 0.2²) = 1 − 0.68 = 0.32
- 오른쪽 자식(신용 보통·미흡): 승인2, 거절8 → Gini = 1 − (0.2² + 0.8²) = 0.32
- 분할 후 가중평균 Gini = (10/20)×0.32 + (10/20)×0.32 = 0.32
- 개선 정도(불순도 감소량) = 0.50 − 0.32 = 0.18
이 계산은 실제로 파이썬으로 검증한 값입니다. CART(Classification And Regression Trees) 알고리즘은 후보가 될 수 있는 모든 분할 조건에 대해 이런 식으로 '분할 후 가중평균 Gini가 얼마나 줄어드는지'를 전부 계산해 보고, 감소량이 가장 큰 조건을 선택합니다.
시험에 자주 나오는 함정
① 'Gini = Σ(pᵢ²)'까지만 쓰고 앞의 '1 −'을 빼먹는 계산 실수가 정말 많습니다. 반드시 1에서 빼는 것까지가 지니계수입니다.
② 지니계수는 CART 알고리즘이 분류나무에서 쓰는 지표라는 것, 그리고 CART는 회귀나무에서는 지니계수 대신 분산(또는 오차제곱합, SSE) 감소량을 기준으로 쓴다는 점도 자주 출제됩니다. 'CART는 항상 지니계수를 쓴다'는 문장은 회귀 상황에서는 틀린 문장이 됩니다.
3. 엔트로피와 정보이득 — ID3·C4.5가 쓰는 불순도 지표
공식과 직관
엔트로피는 정보이론에서 온 개념으로, '이 노드의 클래스를 알아맞히기 위해 평균적으로 몇 비트(bit)의 정보가 더 필요한가'를 뜻합니다. 노드가 이미 순수하다면(클래스가 하나뿐이면) 더 물어볼 필요가 없으니 엔트로피는 0입니다. 반대로 클래스가 반반 섞여 있으면 '동전 던지기'만큼이나 예측하기 어려운 상태이므로 엔트로피가 최댓값(이진 분류 기준 1.0)이 됩니다. 공식은 다음과 같습니다.
Entropy(t) = − Σ pᵢ × log₂(pᵢ)
지니계수와 마찬가지로 각 클래스 비율 pᵢ를 이용하지만, 제곱 대신 로그를 쓴다는 점이 다릅니다. 이 로그 때문에 엔트로피 곡선은 지니계수보다 더 '뾰족하고 넓게' 벌어진 종 모양이 됩니다. 실제로 p=0부터 1까지 값을 넣어 두 곡선을 그려보면 아래와 같습니다(직접 계산해 검증한 값입니다).
정보이득 — 엔트로피 버전의 '개선량'
지니계수를 쓸 때 '부모 Gini − 자식 가중평균 Gini'로 개선량을 봤듯이, 엔트로피를 쓸 때는 이 개선량에 특별히 정보이득(Information Gain)이라는 이름을 붙입니다.
Information Gain = Entropy(부모) − Σ (자식 노드 크기 비율 × Entropy(자식))
아까 대출 승인 예시를 그대로 엔트로피로 계산해 보면, 부모 Entropy = 1.00, 왼쪽·오른쪽 자식 모두 Entropy ≈ 0.72이므로 가중평균 Entropy = 0.72, 따라서 Information Gain = 1.00 − 0.72 = 0.28입니다(파이썬으로 계산한 정확한 값은 0.2781). ID3와 C4.5 알고리즘은 이 정보이득이 가장 큰 속성을 분할 기준으로 선택합니다.
CART vs ID3 vs C4.5 — 알고리즘별로 뭐가 다른가
시험에서 지니계수·엔트로피만큼 자주 헷갈리는 부분이 '어떤 알고리즘이 어떤 지표를 쓰는가'입니다. 세 알고리즘을 표로 정리하면 다음과 같습니다.
C4.5가 ID3를 개선하며 정보이득 대신 정보이득비(Gain Ratio)를 쓰는 이유도 자주 나옵니다. 정보이득은 '속성값의 종류가 많을수록'(예: 회원번호처럼 거의 모든 값이 유일한 속성) 무조건 유리해지는 편향이 있습니다. 극단적으로 모든 행이 서로 다른 값을 갖는 속성으로 분할하면 자식 노드마다 데이터가 1건씩 남아 엔트로피가 0이 되어버리기 때문입니다. C4.5는 이 편향을 보정하기 위해 정보이득을 '속성 자체가 갖는 정보량(SplitInfo)'으로 나눈 정보이득비를 사용합니다.
수식으로 쓰면 Gain Ratio = Information Gain ÷ SplitInfo이고, SplitInfo는 '그 속성이 몇 개의 자식 노드로 데이터를 얼마나 고르게 쪼개는지'를 엔트로피와 같은 방식(− Σ (nᵢ/n) log₂(nᵢ/n))으로 계산한 값입니다. 자식 노드 수가 많고 크기가 고를수록 SplitInfo가 커지므로, 분모가 커져 정보이득이 상대적으로 '할인'되는 구조입니다. 참고로 C4.5 이후에는 속도와 메모리 효율을 개선한 C5.0도 등장했는데, 기본 불순도 계산 원리(엔트로피·정보이득비)는 C4.5와 크게 다르지 않습니다.
그렇다면 지니계수와 엔트로피 중 어느 쪽으로 계산하느냐에 따라 '최선의 분할'이 실제로 달라지는 경우는 없을까요? 이진 분류에서는 두 곡선 모두 p=0.5에서 최댓값을 갖고 0과 1에서 0이 되는 대칭적인 종 모양이라, 후보 분할들의 순위가 거의 항상 같게 나와 대부분의 경우 두 지표가 같은 분할을 최선으로 선택합니다. 다만 후보 분할들의 불순도 감소량이 미세하게 근접한 상황에서는, 엔트로피가 극단적인 비율 차이에 로그 함수 특성상 더 민감하게 반응하기 때문에 아주 드물게 두 지표의 '1등 속성'이 달라지는 사례가 보고됩니다. 시험에서는 이런 미세한 차이보다 아래 세 가지 구조적 차이를 훨씬 더 많이 묻습니다. (1) 클래스가 3개 이상인 다범주 문제에서는 두 지표의 민감도 차이가 더 크게 드러날 수 있고, (2) 속성값 종류가 매우 많은 속성일수록 정보이득이 편향되기 쉬우며, (3) CART는 항상 이진 분할만 하는 반면 ID3·C4.5는 다지 분할이 가능하다는 구조적 차이 때문에 실제 나무의 모양 자체가 달라질 수 있습니다.
시험에 자주 나오는 함정
'지니계수와 엔트로피는 계산식이 다르니 항상 서로 다른 분할 결과를 낸다'는 선지는 함정입니다. 이진 분류에서는 두 지표가 대체로 같은 결론을 내립니다. 오히려 시험에서 자주 노리는 포인트는 ① CART=지니계수/이진분할, ID3·C4.5=엔트로피/다지분할 이라는 알고리즘-지표 매칭, ② C4.5가 ID3의 다범주 속성 편향 문제를 정보이득비로 보정했다는 것, 이 두 가지입니다.
5. 시험 직전에 이것만
불순도는 값이 클수록 나쁜 게 아니라, 분할 전후 감소폭이 클수록 좋은 분할입니다.
- 지니계수는 '1에서 확률 제곱의 합을 빼는 것', 엔트로피는 '로그2를 이용한 정보량 계산'이라는 계산 방식의 차이만 다를 뿐, 둘 다 '얼마나 순수한가'를 재는 지표라는 목적은 같습니다.
- CART=지니계수·이진분할, ID3=엔트로피·다지분할, C4.5=정보이득비(다범주 속성 편향 보정)라는 알고리즘-지표 매칭을 헷갈리지 않는 것이 배점 포인트입니다.
6. 책에서는 이렇게 다룹니다
『빠르게 따는 빅데이터분석기사(필기)』에서는 이 내용을
<<의사결정나무·지니계수·엔트로피 관련 장/절/페이지>>에서 다루고 있습니다. 1권/2권 구성에 따라 개념 설명과 문제풀이가 나뉘어 있으니, 처음 공부할 때는 개념서로 공식의 의미(왜 1에서 빼는지, 왜 로그2를 쓰는지)를 먼저 익히고, 그다음 문제풀이서로 넘어가는 순서를 추천드립니다.
특히 이 파트는 공식을 외우는 것보다 '오답 노트' 방식이 훨씬 효율적입니다. 위 실전 문제에서 보셨듯, 이 단원의 함정은 대부분 '1 빼기를 빠뜨렸다', '지니계수와 엔트로피 값을 서로 바꿔치기했다', 'CART·ID3·C4.5의 지표를 뒤섞었다' 같은 패턴이 반복됩니다. 틀린 문제를 그냥 넘기지 말고 '어떤 패턴의 함정에 걸렸는지'를 한 줄로 적어두면, 비슷한 유형이 또 나왔을 때 훨씬 빠르게 걸러낼 수 있습니다.
계산 문제가 나올 때는 손으로 직접 대입해 보는 연습이 특히 중요합니다. 공식을 눈으로만 읽으면 '1 − Σpᵢ²'과 '− Σpᵢlog₂pᵢ'가 비슷비슷해 보이지만, 실제로 숫자를 넣어 계산해 보면 두 값의 스케일 자체가 다르다는 걸 몸으로 익히게 됩니다. 특히 클래스가 3개 이상인 문제는 계산 과정이 한 줄 더 늘어나기 때문에 실수가 잦은데, 이 글의 실전 문제 1번처럼 '비율을 먼저 다 적어두고, 제곱(또는 로그) 계산을 하나씩 순서대로 처리하는' 습관을 들이면 실수를 크게 줄일 수 있습니다.
오늘의 학습, 이렇게 이어가 보세요
CBT로 실전 감각 익히기: goldenrabbit.co.kr/tests/cbt에서 실제 시험과 비슷한 환경으로 문제를 풀어보세요.
다가오는 시험 일정 확인: 정확한 회차·접수 일정은 변동될 수 있으니 goldenrabbit.co.kr/tests에서 최신 정보를 확인하세요.
『빠르게 따는 빅데이터분석기사』 교재 보기: goldenrabbit.co.kr/books
궁금한 점이 있다면 카카오톡 질문방에서 편하게 물어보세요. 다른 수험생들과 함께 공부하면 훨씬 덜 외롭습니다.
