관리 메뉴

TEAM EDA

[Machine Learning Advanced] 5강. 머신러닝 강의 - 기본 ML 모델 (의사결정 나무) 본문

EDA Study/Machine Learning Advanced

[Machine Learning Advanced] 5강. 머신러닝 강의 - 기본 ML 모델 (의사결정 나무)

김현우 2023. 8. 12. 01:20

 

이번 강의에서는 머신러닝 모델 중에서 Non-Linear 모델 중 첫번째인 의사 결정 나무(Decision Tree)에 대해 살펴보도록 하겠습니다. 

Tree 모델이란 무엇이고 왜 알아야 하는 것일까요? 

트리 구조의 모델은 스무고개처럼 여러 개의 분기를 통해 데이터 내의 규칙을 찾아 Tree 구조로 데이터를 분류 / 회귀하는 모델입니다. 

오른쪽 이미지 출처 : https://www.javatpoint.com/machine-learning-decision-tree-classification-algorithm

 

선형 모델과 달리 비선형 데이터의 패턴을 파악할 수 있다는 장점이 있으며, 최근 경진대회에서 사용되는 모델들인 LightGBM이 Tree 기반의 모델입니다. 

이러한 Tree 모델들의 경우 의사결정 나무(Decision Tree)를 시작으로 Random Forest, AdaBoost, GBM 등 많은 확장을 가졌으며 현업에서 굉장히 중요한 모델 중 하나입니다. 실제 LightGBM이나 Catboost는 현재 대회뿐만 아니라 현업에서도 많이 활용되는 글들을 볼 수 있습니다. 

 

제 경험상 성능의 문제나 여러 효율성때매 현업에서는 LightGBM과 Catboost 만을 위주로 사용하지만, 해당 개념을 이해하기 위해서는 앞단의 개념들을 이해하는 것이 좋은 것 같습니다. 그렇기에, 이번 강의에서는 가장 기본이 되는 Decision Tree에 대해서 배워보고 최종적으로는 Random Forest, GBM, LightGBM, CatBoost까지 이해해보는 것을 목표로 해보겠습니다. 

 

Decision Tree란 무엇인가요? 

의사결정 나무는 트리 구조의 분류 및 회귀 모델로 여러 가지 규칙을 순차적으로 적용하면서 독립 변수 공간을 분할합니다. Classification과 Regression을 동시에 할 수 있다는 장점이 있으며, 알고리즘에 따라서 ID3, CART, C4.5, C5.0 등 많은 모델이 있습니다. 하지만, 이를 다 알 필요성은 없고 가장 대표적인 CART (Classification And Regression Tree)에 대해서만 살펴보겠습니다. 

 

이러한 의사결정 나무는 직관적인 해석이 가장 큰 장점입니다. 날씨, 온도, 습도, 바람이라는 4개의 독립 변수를 가지고 골프 진행 여부라는 종속 변수를 맞추는 문제가 있을때 이를 통해 만들어진 오른쪽 의사결정 나무를 한번 봐보겠습니다. 이때, 위의 그림에서 박스친 부분의 해석은 아래와 같이 할 수 있습니다. 

 

해석1. 날씨가 흐린 (Overcast) 경우에는 모두 골프를 쳤다. 

 

해석2. 날씨가 화창하고 (Sunny) 바람이 불지 않은 (False) 경우에는 모두 골프를 쳤다. 

 

와 같이 변수들의 조합을 통해서 해석을 할 수 있습니다. 이렇게 되게 트리가 분기되는 과정을 시각적으로 표현할 수 있기에, 직관적으로 패턴을 파악하기 쉽습니다. 그리고, 위에서는 독립변수와 종속변수 모두 범주형 데이터에 대해서 보여줬지만 연속형 변수로 바뀌어도 상관없이 처리할 수 있다는 장점이 있습니다. 마지막으로, 선형 회귀 모델과 다르게 비선형적인 특성을 파악할 수 있고 다중 공선성 등 여러가지 가설들을 고려하지 않아도 된다는 장점이 있습니다. 

 

Decision Tree의 학습은 어떻게 진행되나요? 

의사결정 나무의 학습 순서는 크게 4가지로 이루어집니다. 

의사결정 나무 학습 순서

 

1. 분할 종료 조건 확인

분할의 종료조건이란 무엇일까요? 의사결정나무는 불순도(Impurity)를 최소화하는 방향으로 학습합니다. 불순도는 단어 그대로의 뜻으로 얼마나 섞여있냐는 의미입니다. 반대되는 용어로 순수하다라는 의미가 있습니다. 아래의 예시를 보면 알겠지만, 분홍색으로만 혹은 주황색으로만 있는 1, 3번의 경우가 순도가 100%으로 불순하지 않고, 반대로 2번 경우가 분홍색과 주황색이 섞여서 불순도가 높다고 합니다. 

이런 관점에서 분홍색을 Yes, 주황색을 No라고 생각했을때 모델은 Yes는 Yes끼리, No는 No끼리 묶기를 희망합니다. 즉, 불순도를 최소화하는 방향으로 학습하기를 희망합니다. 그런 관점에서 해당 순도가 100%가 되었는지를 지점에서 분할을 종료합니다. (참고 : 하지만, 순도가 100% 되는 지점에서 분할을 종료하는건 비용도 많이 들고 너무 분할을 여러번해야해서 과적합의 문제가 있습니다. 실제 의사결정 나무의 한계점이 과적합의 문제인데 이러한 과적합을 방지하는 부분은 뒤에서 다시 설명하겠습니다) 

 

이런 불순도는 머신러닝 분야에서는 2가지 지표인 지니 계수 (Gini coefficient)와 엔트로피(Entropy) 두가지로 측정할 수 있습니다. 

 

이제 의사결정 나무의 학습 과정에 대해 살펴보겠습니다. 의사결정 나무는 마디를 분할할 때마다 선택된 분할 기준으로 불순도가 최대한 감소하는 방향으로 학습을 진행합니다. 여기서 불순도는 Yes 2개, No 3개처럼 섞인 형태보다는 Yes 5개 혹은 No 5개처럼 안섞이게 만든다는 의미입니다.

 

처음 날씨로 분할하기 전루트 노드로 들어가기 전의 상황을 생각해보겠습니다. 이때의 지니계수와 엔트로피의 경우는 

공식에 따라서 위와 같이 계산할 수 있고, 이는 순도가 100%가 아닌 불순도가 존재하는 상황입니다. 그렇기에, 트리의 분할을 진행하는 2번단계로 넘어갑니다. 

 

 

2. 분할 기준 선택 

종료조건을 만족하지 못했다면, 분할을 할 변수를 선택해야합니다. 분할 기준은 모든 변수에 대해 불순도를 계산하고 해당 불순도가 가장 낮은 값을 기준으로 진행됩니다. 날씨를 예시로 하면, 

 

Gini(날씨) 혹은 Entropy(날씨)의 경우는 위와 같이 Rainy의 확률 * Gini(Rainy) + Overcast 확률 * Gini(Overcast) + Sunny 확률 * Gini(Sunny)로 계산이 가능합니다. 그리고, 각각의 경우에 대한 Gini 혹은 Entropy 값은 아래와 같이 계산할 수 있습니다. 

 

분할 기준은 모든 변수에 대해 불순도를 계산하고 해당 불순도가 가장 낮은 값을 기준으로 진행됩니다. 

 

  • E(PlayGolf, 날씨) = 0.693
  • E(PlayGolf, 온도) = 0.911
  • E(PlayGolf, 습도) = 0.788
  • E(PlayGolf, 바람) = 0.892 

이때, 날씨의 불순도가 가장 낮으니 날씨가 첫번째 분할 기준이 됩니다. 

 

3. 분할

날씨의 경우 Rainy / Overcast / Sunny 로 나뉠 수 있습니다. 

4. 반복 

Sunny - Overcast - Rainy에 대해서 1번부터 과정을 반복합니다. Overcast는 종료조건을 만족했기에 분할을 멈추고, Sunny와 Rainy에 대해서 다시 분할을 진행하게 됩니다. 

 

Decision Tree의 모델 평가와 결과 해석 

의사결정 나무의 가장 큰 장점은 학습 과정을 눈으로 확인할 수 있다는 점입니다. 

의사결정 나무 결과 시각화

코드 혹은 계산을 통해서 위와 같이 어떤식으로 학습되는지 그려볼 수 있기에 결정 경계와 트리 분할 과정을 시각화해서 바로 확인이 가능합니다.  

 

혹은 변수 자체의 중요도도 계산할 수 있습니다.

이러한 변수 중요도는 트리 분기 과정에서 불순도를 많이 낮출 수 있는 중요한 변수로 변수 선택의 기준으로 활용되기도 합니다. 

 

Decision Tree에서 주의해야할 점은 무엇인가요? 

의사결정 나무를 학습할때 주의해야할 점은 과적합 (Overfitting)입니다. 이전 분할조건에서 해당 순도가 100%가 되었는지를 지점에서 분할을 종료하고 이때, 순도가 100% 되는 지점에서 분할을 종료하는건 비용도 많이 들고 너무 분할을 여러번해야해서 과적합의 문제가 있다는 언급을 했습니다. 그렇기에, 이러한 문제를 해결하기 위해 Decision Tree는 여러가지 방안을 제안하고 있습니다. 

 

위의 그래프에서 4개의 하이퍼파리미터의 역할을 보면, 

 

1. max_depth 

트리의 최대 깊이를 제한하여 트리가 더 깊어지지 않도록 합니다. 계속 깊어질 수록 조건이 많아진다는 의미이니 과적합 가능성이 높기에 max_depth의 크기를 줄일 수록 과적합을 피할 수 있습니다. 

 

2. min_samples_split

내부 노드를 분할하기 위해 필요한 최소 샘플 수입니다. samples = 14인 경우는 분할 되겠지만, 2와 같이 작은 값이 분할되게 되면 과적합의 가능성이 높습니다. 그렇기에, 해당 값을 키울 수록 과적합을 피할 수 있습니다. 


3. min_samples_leaf:
리프 노드가 되기 위해 필요한 최소 샘플 수를 지정합니다. 만약 해당 값이 1처럼 작으면 리프 노드가 굉장히 많이 생길 수 있습니다. 즉, 분할을 더 해서 최대한 리프 노드를 많이 만들려고 할 것입니다. 그렇기에, 해당 값을 키울 수록 리프의 수는 줄어들고 과적합을 피할 수 있습니다. 

 

4. max_leaf_nodes:
생성될 수 있는 최대 리프 노드의 수를 제한합니다. min_samples_leaf와 유사하게 제한 없이 많은 리프 노드가 생성되면 과적합의 위험이 있고, 해당 값을 줄일 수록 과적합을 피할 수 있습니다. 

 

참고자료 

https://kindsonthegenius.com/blog/how-to-build-a-decision-tree-for-classification-step-by-step-procedure-using-entropy-and-gain/

평생 데이터 분석 하고픈 꽁냥이, 의사결정나무에 대해서 알아보자 with Python

데이터 사이언스 스쿨

https://medium.com/data-science-in-your-pocket/how-feature-importance-is-calculated-in-decision-trees-with-example-699dc13fc078

https://stackoverflow.com/questions/49170296/scikit-learn-feature-importance-calculation-in-decision-trees