본문 바로가기
Machine Learning/개념 정리

Tree Model 정리

by W_log 2023. 11. 29.

최근 Tree Model에 대해서 공부하고 실제 프로젝트 진행하면서 나중을 위해 직관적인 의미에 대해서 정리하는 블로그를 쓰려고 한다.

이전까지는 딥러닝 모델만 공부해왔다보니까, 딥러닝과 비교하면서 이 글을 정리해보려고 한다.

 

 

사실 모델 자체에 대한 설명은 아래 블로그에 잘 나와있어서 나중을 위해 기본적인 개념만 정리하는 글입니다.

1. 의사결정나무 :  https://ratsgo.github.io/machine%20learning/2017/03/26/tree/

 

의사결정나무(Decision Tree) · ratsgo's blog

이번 포스팅에선 한번에 하나씩의 설명변수를 사용하여 예측 가능한 규칙들의 집합을 생성하는 알고리즘인 의사결정나무(Decision Tree)에 대해 다뤄보도록 하겠습니다. 이번 글은 고려대 강필성

ratsgo.github.io

2. Gradient Boosting : https://zephyrus1111.tistory.com/224

 

20. Gradient Boosting 알고리즘에 대해서 알아보자 with Python

이번 포스팅에서는 Gradient Boosting의 개념과 알고리즘을 소개하며 이를 응용한 Gradient Tree Boosting의 개념과 알고리즘도 소개한다. 그리고 Gradient Tree Boosting 알고리즘을 파이썬으로 직접 구현하는

zephyrus1111.tistory.com

3. XGBoost : https://zephyrus1111.tistory.com/232

 

21. XGBoost에 대해서 알아보자

이번 포스팅에서는 부스팅 계열에 떠오르는 샛별 XGBoost에 대해서 알아보려고 한다. 여기에서는 XGBoost의 개념, 알고리즘 동작 원리를 예제와 함께 알아보고자 한다. - 목차 - 1. XGBoost란 무엇인가?

zephyrus1111.tistory.com

4. ChatGPT와 대화한 내용 : https://chat.openai.com/share/4f782b7d-bcdf-4025-95c6-6543f0807054

 

 

 

 

Tree Model이란?

 

 

트리모델은 우리가 컴퓨터에게 "변수"를 던지고, 컴퓨터가 알아서 위와 같이 전체 데이터셋을 나누는 트리를 만드는 방식이다. 변수가 3개라고 하면, 3개의 변수의 값을 다 대입해가면서 어떻게 트리를 구성할지 정한다.

 

이 때, 트리를 구분하는 기준은 결론적으로 우리가 원하는 target을 잘 나눌 수 있는가를 기준으로 살펴본다. 사실 한번에 모든 target을 나눌 수 없기 때문에 트리에서는 Gini, 엔트로피와 같은 정보를 측정하는 함수를 활용한다.

 

딥러닝이 알아서 수렴하도록 연산을 시키듯이 트리모델도 비슷하게 그 과정을 컴퓨터가 연산하면서 작업한다.

 

여기서, 하나 문제가 발생한다. 정말 정교하게 다 맞추는 트리를 만들려면 데이터 갯수만큼 트리를 만들면 된다. 하지만 이렇게 되면 딥러닝에서와 동일하게 오버피팅이 발생할 수밖에 없다. 

 

또한 결국 최적점을 찾으려면 모든 변수를 탐색할 수밖에 없는데 이건 연산이 많이 들고 overfitting이 발생할 수 있다는 점이 문제다. 

변수 한개한개를 다 살펴보기 때문에도 오버피팅이 발생할 수 있고 변수의 영향도가 크다는 단점도 있다.

 

 

Random Forest 모델이란?

위 문제를 해결하기 위해서 랜덤 포레스트 기법이 나온다. tree가 모여서 Forest가 된다는 의미로 여러개의 Tree를 만들어서 그 tree들이 내는 결과값을 종합해서 답을 내린다는 의미이다.

 

랜덤포레스트는 아래와 같은 방식으로 작동한다.

1. [Bootstrap Sampling] 우선, 트레이닝 데이터셋을 무작위로 샘플을 추출한다.(중복 허용 추출)

2. 각각의 결정 트리를 구축하되, 특성을 무작위로 선택합니다.(모든 특성을 활용하지 않음)

3. [Aggregating] 그렇게 학습된 결정트리가 내는 값을 결합하여 최종 답을 도출합니다.

- 회귀 문제면 예측값의 평균, 분류는 다수결 방식

4. 마지막 단계에서는 모델의 성능을 평가하고 여기서 파라미터를 조정합니다.

 

Bagging은 Bootstrap Aggregating을 의미한다. 결국 다양한 데이터를 학습하고 여러개의 트리를 활용해 과적합을 방지한다는 점에서 오버피팅 감소와 모델 안정성을 높여준다.

 

 

Gradient Boosting Model

또다른 해결책으로 Gradient Boosting Model이 나오는데, 이건 접근 방식이 좀 다르다. 랜덤포레스트는 target 변수를 맞추려는 트리를 여러개 만들었다면, Gradient Boosting Model은 어떤 하나의 모델만이 Target 변수를 예측하고, 그 모델이 내놓는 예측값과 실제 결과값의 차이를 줄이기 위한 트리를 순서대로 만든다고 보면 된다. (그만큼 잘 못맞추는 것에 가중치를 줘서 더 잘 학습시킴)

*각 예측값이 내놓는 값들에 가중치(Learning rate)를 곱한만큼만 더해줘서 overfitting을 방지해준다.

 

일반적으로 Random Forest보다 성능이 좋은데 이는 단순히 비슷한 트리모델을 여러 개 활용하는게 아니라 전체 특성을 다 고려한다는 점, 순차적으로 오류를 개선한다는 점에서 주로 예측 성능이 높은 편이다.

 

GBM에는 LGBM, CATBoost, XGBoost가 있는데 아래와 같은 특성을 가진다.

  1. XGBoost (eXtreme Gradient Boosting):
    • XGBoost는 분할을 찾을 때 정규화된 이득을 계산합니다. 이는 과적합을 방지하고 모델의 일반화 성능을 향상시킵니다.
    • 대규모 데이터 세트를 위해 설계되었으며, 병렬 처리와 분산 컴퓨팅을 지원합니다.
    • XGBoost는 결측치 처리와 자동적인 특성 선택에 강점을 가지고 있습니다.
  2. LightGBM (Light Gradient Boosting Machine):
    • LightGBM은 분할 방식에서 차이를 보입니다. 이는 '리프 중심 트리 분할(Leaf-wise tree growth)' 방식을 사용합니다. 이 방식은 더 깊은 트리를 생성하지만, 데이터 세트가 작을 경우 과적합의 위험이 있습니다.
    • 적은 메모리 사용과 빠른 학습 속도로 큰 데이터 세트에 적합합니다.
    • 카테고리형 특성을 자동으로 변환하고 최적으로 처리할 수 있습니다.
  3. CatBoost (Categorical Boosting):
    • CatBoost는 특히 카테고리형 데이터를 처리하는 데 강점을 가지고 있습니다. 별도의 전처리 없이 카테고리형 데이터를 처리할 수 있으며, 이를 위한 특수한 알고리즘을 사용합니다.
    • 과적합을 방지하기 위해 '순서 부스팅(Ordered Boosting)' 방식을 사용합니다.
    • 사용자 친화적인 기본 설정을 가지고 있어, 초기 설정 없이도 좋은 성능을 낼 수 있습니다.

 

딥러닝과 트리모델의 비교

 

공통점

 

1. 결국 연산은 컴퓨터가 하기 때문에 연산비용이 중요하다.

2. 최적화가 가장 중요하며 어떻게 빠르게 목적변수에 도달하는지가 중요하다.

3. 동일하게 실험에서 변경하는 것은 Hyperparameter 대입이다.

 

 

차이점

 

1. 트리모델은 주어진 특성을 기반으로 예측을 한다면, 딥러닝은 우선 Neuron들을 무작위로 배치해서 알아서 학습하게 한다.

- 실제로 캐글에서 Feature Engineering이 중요한데, 주어진 특성을 재조합해서 만든다. 딥러닝에서는 input으로 들어가는 특성은 똑같은데 이걸 기계가 이해할 수 있는 차원으로 representation해서 학습할 수 있도록 한다. 이 부분에서 차이가 있다. (기계가 알아서 특성을 재조합함)

 

2. 트리모델은 적어도 어떤 변수가 어떤 영향을 주는지 설명할 수 있지만, 딥러닝 모델은 어떤 변수가 영향을 주는지 알 수 없다. 하지만 트리모델도 트리가 다수인 앙상블 방식을 사용하는 LGBM, CATBoost로 모델이 복잡해질수록 설명력이 떨어지긴 하다. 그래도 Feature Importance를 제공한다는 점에서 상대적으로는 설명력이 있다.