ML

[머신러닝/사이킷런] 분류 모델: 결정 트리(Decision Tree)

helena1129 2025. 2. 16. 16:37

학습 자료: 파이썬 머신러닝 완벽 가이드(개정2판), 위키북스

 

개요

데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리(Tree) 기반의 분류 규칙을 만드는 것

룰 기반의 프로그램에 적용되는 if, else를 자동으로 찾아내 예측을 위한 규칙을 만드는 알고리즘

어떤 기준을 바탕으로 규칙을 만들어야 가장 효율적인 분류가 될 것인가가 알고리즘의 성능을 크게 좌우한다.

 

출처: https://www.ibm.com/kr-ko/think/topics/decision-trees

 

- 규칙 노드(Decision node, Internal node): 규칙 조건

- 리프 노드(Leaf node): 결정된 클래스 값

- 서브 트리(Sub Tree, Branch): 새로운 규칙 조건마다 새롭게 생성

 

주의할 점

데이터셋의 피처를 결합해 규칙 조건을 만들 때마다 규칙 노드가 만들어지고, 많은 규칙은 곧 분류를 결정하는 방식이 더욱 복잡해진다는 것을 뜻한다. 그리고 이는 과적합으로 이어지기 쉽다.

즉, 트리의 깊이(depth)가 깊어질수록 결정 트리의 예측 성능이 저하될 가능성이 높다.

 

가능한 한 적은 결정 노드로 높은 예측 정확도를 가지려면 데이터를 분류할 때 최대한 많은 데이터셋이 해당 분류에 속할 수 있도록 결정 노드의 규칙이 정해져야 한다.

이를 위해서는 트리가 최대한 균일한 데이터셋을 구성할 수 있도록 분할하는 것이 필요하다.

 

균일도

 

본 그림에서 가장 균일한 순서대로 데이터셋을 나열한다면, C > B > A 의 순서로 균일하다.

데이터셋의 균일도는 데이터를 구분하는 데 필요한 정보의 양에 영향을 미친다.

 

결정 트리에서 결정 노드는 정보 균일도가 높은 데이터셋을 먼저 선택할 수 있도록 규칙 조건을 만든다.

즉, 정보 균일도가 데이터셋으로 쪼개질 수 있도록 조건을 찾아 서브 데이터셋을 만들고, 다시 이 서브 데이터셋에서 균일도가 높은 자식 데이터셋을 쪼개는 방식을 반복한다.

 

이러한 정보의 균일도를 측정하는 대표적인 방법은 엔트로피를 이용한 정보 이득(Information Gain) 지수와 지니 계수가 있다.

- 정보 이득: 엔트로피는 주어진 데이터 집합의 혼잡도를 의미하는데, 서로 다른 값이 섞여 있으면 엔트로피가 높고 같은 값이 섞여 있으면 엔트로피가 낮다. 정보 이득 지수는 1 - 엔트로피 지수이다. 결정 트리는 정보 이득이 높은 속성을 기준으로 분할한다.

- 지니 계수: 0이 가장 평등하고 1로 갈수록 불평등하다. 결정 트리는 지니 계수가 낮을수록 데이터 균일도가 높은 것으로 해석해 지니 계수가 낮은 속성을 기준으로 분할한다.

 

특징

결정 트리의 가장 큰 장점은 정보의 '균일도'라는 룰을 기반으로 하고 있어서 알고리즘이 쉽고 직관적이라는 점이다.

또한 정보의 균일도만 신경 쓰면 되므로 특별한 경우를 제외하고는 각 피처의 스케일링과 정규화 같은 전처리 작업이 필요하지 않다.

 

반면, 결정 트리의 가장 큰 단점은 과적합으로 정확도가 떨어진다는 점이다. 이를 방지하기 위해서는 트리의 크기를 사전에 제한해야 한다.

 

사이킷런

DecisionTreeClassifier()

- min_samples_split: 노드를 분할하기 위한 최소한의 샘플 데이터 수. 디폴트는 2이고 작게 설정할수록 분할되는 노드가 많아져 과적합 가능성이 증가

- min_samples_leaf: 분할이 될 경우 왼쪽과 오른쪽의 브랜치 노드에서 가져야 할 최소한의 샘플 데이터 수

- max_features: 최적의 분할을 위해 고려할 최대 피처 개수. 디폴트는 None으로 데이터셋의 모든 피처를 사용해 분할 수행(auto=sqrt, log, None)

- max_depth: 트리의 최대 깊이 규정. 디폴트는 None. None으로 설정하면 완벽하게 클래스 결정 값이 될 때까지 깊이를 계속 키우며 분할하거나 노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가시킴. 깊이가 너무 깊어지면 과적합할 수 있으므로 적절한 값으로 제어 필요

- max_leaf_nodes: 말단 노드(Leaf)의 최대 개수

 

feature_importances_: 피처 중요도