move84

지니 계수(Gini Impurity) 완벽 분석: 머신러닝 필수 개념 본문

머신러닝

지니 계수(Gini Impurity) 완벽 분석: 머신러닝 필수 개념

move84 2025. 4. 14. 07:54
반응형

지니 계수는 머신러닝, 특히 의사결정 트리(Decision Tree) 모델에서 중요한 역할을 수행한다. 데이터 집합의 불순도를 측정하는 데 사용되며, 의사결정 트리가 데이터를 어떻게 분할할지 결정하는 데 핵심적인 지표로 활용된다. 이 글에서는 지니 계수의 기본 개념부터 계산 방법, 그리고 실제 머신러닝 모델에서의 활용 예시까지 자세히 알아본다.


🤔 지니 계수란? (What is Gini Impurity?)
지니 계수는 데이터 집합 내에서 특정 클래스에 속하는 샘플들이 얼마나 섞여 있는지를 나타내는 지표이다. 다시 말해, 데이터 집합의 불순도(impurity)를 측정하는 데 사용된다. 지니 계수가 낮을수록 데이터 집합이 순수하며, 특정 클래스의 샘플들로 잘 구성되어 있음을 의미한다. 반대로 지니 계수가 높을수록 데이터 집합이 불순하며, 여러 클래스의 샘플들이 섞여 있음을 의미한다.

지니 계수의 값은 0과 1 사이의 값을 가지며, 0은 완전한 순수 상태(모든 샘플이 동일한 클래스에 속함)를 나타내고, 1은 완전한 불순 상태(모든 클래스의 샘플이 동일한 비율로 섞여 있음)를 나타낸다. 의사결정 트리에서는 각 노드에서 데이터를 분할할 때, 분할 후의 지니 계수가 가장 낮아지는 방향으로 분할을 수행하여 정보 획득(Information Gain)을 최대화한다.


🧮 지니 계수 계산 방법 (How to Calculate Gini Impurity)
지니 계수는 다음과 같은 수식으로 계산된다.

지니 계수 = 1 - Σ (각 클래스에 속하는 샘플의 비율)^2

여기서 Σ는 모든 클래스에 대한 합을 의미한다. 예를 들어, 데이터 집합이 두 개의 클래스(A, B)로 구성되어 있고, 클래스 A에 속하는 샘플의 비율이 p이고, 클래스 B에 속하는 샘플의 비율이 (1-p)라면, 지니 계수는 다음과 같이 계산된다.

지니 계수 = 1 - (p^2 + (1-p)^2)

예시를 통해 지니 계수를 더 쉽게 이해해 보자.

  1. 예시 1: 순수한 데이터 집합
    만약 데이터 집합이 클래스 A에 속하는 샘플 10개로만 구성되어 있다면, 클래스 A의 비율은 1이고, 클래스 B의 비율은 0이다. 따라서 지니 계수는 다음과 같이 계산된다.

    지니 계수 = 1 - (1^2 + 0^2) = 0

    이 경우, 지니 계수는 0이 되며, 데이터 집합이 완전히 순수함을 나타낸다.

  2. 예시 2: 불순한 데이터 집합
    만약 데이터 집합이 클래스 A에 속하는 샘플 5개와 클래스 B에 속하는 샘플 5개로 구성되어 있다면, 클래스 A의 비율은 0.5이고, 클래스 B의 비율은 0.5이다. 따라서 지니 계수는 다음과 같이 계산된다.

    지니 계수 = 1 - (0.5^2 + 0.5^2) = 0.5

    이 경우, 지니 계수는 0.5가 되며, 데이터 집합이 불순함을 나타낸다.


🌲 의사결정 트리에서의 활용 (Usage in Decision Tree)
의사결정 트리는 데이터를 분할하여 예측 모델을 생성하는 알고리즘이다. 각 노드에서 데이터를 분할할 때, 어떤 기준으로 분할해야 가장 효과적인 예측 모델을 만들 수 있을까? 이 질문에 대한 답을 제공하는 것이 바로 지니 계수이다.

의사결정 트리는 각 노드에서 데이터를 분할할 때, 분할 후의 지니 계수가 가장 낮아지는 방향으로 분할을 수행한다. 즉, 분할 후에 각 자식 노드의 데이터 집합이 최대한 순수해지도록 분할하는 것이다. 이렇게 함으로써 의사결정 트리는 정보 획득(Information Gain)을 최대화하고, 더 정확한 예측 모델을 생성할 수 있다.

다음은 의사결정 트리에서 지니 계수를 활용하는 간단한 Python 코드 예시이다.

import numpy as np

# 지니 계수 계산 함수
def gini_impurity(y):
    """
    지니 계수를 계산하는 함수

    Args:
        y (array-like): 클래스 레이블 배열

    Returns:
        float: 지니 계수
    """
    prob = np.bincount(y) / len(y)
    return 1 - np.sum(prob**2)

# 예시 데이터
y = np.array([0, 0, 1, 1, 0, 1, 0, 1])

# 지니 계수 계산
gini = gini_impurity(y)
print(f"지니 계수: {gini}")

위 코드에서는 gini_impurity 함수를 사용하여 주어진 데이터의 지니 계수를 계산한다. np.bincount 함수는 각 클래스에 속하는 샘플의 개수를 세는 데 사용되며, 이를 통해 각 클래스의 비율을 계산할 수 있다. 그런 다음, 지니 계수 계산 수식에 따라 지니 계수를 계산한다.


💡 지니 계수의 장점과 단점 (Pros and Cons of Gini Impurity)
지니 계수는 의사결정 트리 알고리즘에서 널리 사용되는 불순도 측정 지표이지만, 장점과 단점을 모두 가지고 있다.

장점:

  • 계산이 간단하고 빠르다.
  • 정보 획득(Information Gain)을 최대화하는 데 효과적이다.
  • 이해하기 쉽고 직관적이다.

단점:

  • 클래스 분포에 민감하게 반응할 수 있다.
  • 정보 획득량이 높은 특성을 선택하는 경향이 있다.

이러한 단점을 보완하기 위해, 엔트로피(Entropy)와 같은 다른 불순도 측정 지표와 함께 사용되기도 한다.


📝 핵심 용어 정리

  • 지니 계수 (Gini Impurity): 데이터 집합의 불순도를 측정하는 지표
  • 불순도 (Impurity): 데이터 집합 내에서 다른 클래스의 샘플들이 섞여 있는 정도
  • 정보 획득 (Information Gain): 의사결정 트리에서 데이터를 분할하여 얻는 정보량
  • 엔트로피 (Entropy): 정보 이론에서 정보의 불확실성을 나타내는 지표
  • 의사결정 트리 (Decision Tree): 데이터를 분할하여 예측 모델을 생성하는 알고리즘
  • 클래스 (Class): 데이터 샘플이 속하는 범주
반응형