본문 바로가기
Data Science

그래디언트 부스팅 기반 모델 XGBoost, LightGBM, CatBoost 이해하기

by Lora Baek 2023. 11. 9.
300x250

며칠 동안은 Kaggle Playground의 Binary Prediction 문제를 풀어보려고 하는 중!

코드 탭에서 XGBoost+LightGBM+CatBoost 세 모델을 앙상블해서 좋은 스코어를 기록한 코드를 발견했다.

이를 기반으로 공부를 할 계획이다. 먼저 ChatGPT를 활용해 기초 개념을 간단히 정리해보았다.



그래디언트 부스팅을 이해하기 위해 먼저 의사결정트리와 부스팅을 알아보자.

 

의사결정트리 (Decision Tree)

의사결정트리는 데이터를 분류 또는 회귀 분석을 위해 사용되는 모델이다.

의사결정트리는 데이터의 특성(feature)을 기반으로 여러 가지 질문을 통해 데이터를 분류하거나 예측한다.

예를 들어, 스마트폰 구매 여부를 예측하는 문제에서 "배터리 수명이 10시간 이상인가?"라는 질문을 통해 데이터를 분류할 수 있다.

 

부스팅 (Boosting)

부스팅은 약한 학습기(weak learner)라 불리는 간단한 모델들을 결합하여 더 강력한 모델을 만드는 앙상블 학습 기법이다.

부스팅은 이전 모델들이 만든 오차를 보완하는 방식으로 동작하며, 각 모델은 이전 모델이 틀린 예측에 집중하여 새로운 모델을 학습시킨다.

 

그래디언트 부스팅 (Gradient Boosting)

부스팅 알고리즘 중의 하나가 그래디언트 부스팅이다. 즉, 이전 모델이 만든 오차를 보정하는 새로운 모델을 학습하는 방식.

그래디언트 부스팅에서는 이전 예측값과 실제값 간의 차이(오차)를 최소화하는 방향으로 새로운 모델을 학습한다.

이 때, 그래디언트(기울기)를 사용하여 오차를 줄이는 방향을 찾아내는 것이다.


XGBoost(eXtreme Gradient Boosting)

XGBoost는 그래디언트 부스팅 알고리즘을 기반으로 한 라이브러리라고 할 수 있다.

의사결정트리 기반의 앙상블 학습 방법을 사용하며, 대용량 데이터셋에 적용할 수 있다.

특히 구조적인 데이터(컬럼 간의 관계가 있는 데이터)에 적합하다.

XGBoost는 규제(regularization)와 트리 가지치기(pruning)를 통해 과적합을 방지하고, 다양한 하이퍼파라미터 튜닝 옵션을 제공한다.

 

*가지치기(pruning)이란?

의사결정트리에서는 가지치기(pruning)라는 개념이 있는데, 한 마디로 트리의 크기를 제어하여 과적합을 방지하는 것이다. 모델의 일반화 성능을 향상시키는 효과가 있다.

XGBoost에서는 가지치기를 효과적으로 하기 위해 아래 3가지의 규제(regularization)항을 사용한다.

  • max_depth: 트리의 최대 깊이를 제한
  • min_child_weight: 리프 노드(말단 노드)에 필요한 최소한의 자식 노드 가중치의 합을 지정
  • gamma: 트리의 리프 노드가 추가 분할되기 위한 최소한의 손실 감소를 지정

LightGBM

Microsoft에서 개발한 그래디언트 부스팅 라이브러리. 대용량 데이터셋에 대한 학습 속도를 향상시킨 것이 특징이다.

LightGBM은 히스토그램 기반의 분할 방법을 사용한다는 특징이 있는데, 덕분에 더 빠른 속도로 모델을 훈련시킬 수 있다.

범주형 피처를 자동으로 처리할 수 있으므로 따로 정수형 인코딩을 해주지 않아도 된다는 장점이 있다.

 

히스토그램 기반의 분할 방법?

LightGBM의 히스토그램 기반의 학습 방법을 사용한다는 게 무슨 말일까?

일반적으로 트리 기반의 알고리즘들은 데이터를 정렬하여 분할 지점을 찾는다. 하지만 정렬 작업은 매우 비용이 큰 연산 중 하나다.

히스토그램 기반의 분할 방법에서는 데이터를 정렬하지 않고 각 피처의 고유한 값들을 이용하여 히스토그램을 생성하기 때문에 속도가 더 빨라지게 된다. (병렬 계산도 가능하다!)

 

히스토그램은 피처의 값들을 몇 개의 구간(bin)으로 나눈 뒤, 각 구간에 속하는 데이터 포인트의 수를 기록한 것으로,

각 히스토그램의 구간을 이용하면 정확한 optima는 아니더라도 충분히 좋은 분할 지점을 찾을 수 있다. 

 

CatBoost

Yandex에서 개발한 그래디언트 부스팅 라이브러리. 범주형 피처를 다루는  특화되어 있다.

CatBoost도 자체적으로 범주형 변수를 처리할  있기 때문에, 별도의 전처리 과정 없이 바로 모델에 적용할  있다는 점이 장점이다.

기본적으로 최적의 하이퍼파라미터를 자동으로 탐색하는 기능을 제공한다.

 

 

코드를 공부하면서 공유할만한 내용이 더 생기면 추가로 공유할 예정 :)

 

Binary Prediction

Binary Prediction

댓글