Julie의 Tech 블로그

Kaggle Case Study - (2) LightGBM 모델 본문

Tech/ML, DL

Kaggle Case Study - (2) LightGBM 모델

Julie's tech 2021. 5. 13. 11:26
728x90

오늘은 Santender Customer Transaction Prediction 모델에서 우승팀 중 하나가 사용했던 lightGBM 모델의 논문을 살펴본 결과를 공유할 것이다.

모델이 뿌리를 두고 있는 앙상블 기법과 GBT 모델에 대해 간단히 살펴보고,

lightGBM이 새로 도입한 두 가지 기법에 대해 알고리즘적으로 살펴볼 것이다.

이 모델의 근간이 되는 GBM과 앙상블에 대해 정리된 글은 아래 링크에 있다.

https://blog.naver.com/ilovelatale/222320553535

 

앙상블과 GBM(Gradient Boosting) 알고리즘

Kaggle 필사를 하다 보면 가장 흔하게 사용되는 모델들이 있다.예를 들어 XGBoost와 lightGBM 모델...

blog.naver.com


논문 링크 : https://papers.nips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf


앙상블

모델을 앙상블하게 되면 긍정적인 효과를 볼 수 있다.

앙상블에는 대표적으로 두 가지 기법이 있는데, 배깅과 부스팅이다.

앙상블은 의사결정나무(Decision Tree)에 주로 활용되는 기법이다.

- 배깅은 Bootstrap Aggregation의 약자로, 여러 모델을 합쳐 Voting(다수결 투표)을 통해 결과를 산출한다.

즉 독립적인 모델들을 결합하여 결과를 내는 것이다.

- 반면 부스팅의 경우 배깅과는 달리 모델간의 연결고리를 만든다.

이전 모델의 결과를 활용하여 다음 모델의 Input으로 주게 되는데, '가중치를 둔다'라는 표현으로 말하기도 한다.

모델들을 독립적으로 분리하는 것이 아니기 때문에, 학습에 오랜 시간이 걸리고, 오버피팅이 될 확률이 높다.

GBM

GBM은 Gradient Boosting Machine의 약자이다.

즉 부스팅 모델에서 사용하는 '가중치'를 경사도(Gradient)로 사용한 기법이다.

* 경사하강법(Gradient Descent)와 손실함수를 미분한 값을 음의 방향으로 이동하여 다음 모델을 만들어낸다는 점에서 유사하지만, 전자는 잔차를 예측하는 새로운 모델을 만든다는 것과, 후자는 파라미터를 업데이트한다는 점에서 다르다.

데이터 정규화나 아웃라이어 별도 처리가 없어도 범용적으로 사용할 수 있어 매우 인기를 끄는 모델이다.

XGBoost가 그 대표적인 모델 중 하나이다.

LightGBM은 GBM 모델 중에서도 efficiency, scalability 두 측면에서 뛰어난 성능을 보이는 모델이다.

lightGBM의 신기술

기존 모델들은 데이터 dimension, size가 커질 때 그 단점이 두드러진다.

예비 분할점들을 찾기 위해 그 큰 데이터를 모두 뒤져봐야하기 때문이다.

하지만 LightGBM은 두 가지 기능을 채택함으로써 그 단점을 극복할 수 있었다.

1. GOSS - Gradient-based One-side Sampling : low gradient 데이터 배제함으로써 size 줄임

2. EFB - Exclusive Feature Bundling : 서로 배타적인 feature들만 골라 사용함으로써 dimension 줄임

이 각각의 기술들에 대해 살펴보도록 할 것이다.

적절한 분할점을 찾기 위해 두 가지 approach가 대표적인데,

1) pre-sorted algorithm

2) histogram-based algorithm

1)은 주먹구구식으로 모든 feature를 순서대로 정렬하여 split구간을 찾는 것이다.

제일 비효율적이지만 가장 쉬운 방법이다.

2)는 연속된 값을 지닌 변수들을 bin에 나누어 bucket화 하는 것인데, 메모리와 속도 측면에서 효율적이다.

따라서 lightGBM은 2) 방법의 알고리즘을 채택하게 되었다.

GOSS 기법

시간 복잡도를 낮추기 위해서는 데이터 dimension/size 중 하나를 줄여야한다.

이 기법은 size를 낮추는 기법이다. 즉 데이터를 학습과정에서 덜어낸다.

경사도를 가중치로 사용한다고 앞서 살펴보았는데, 경사도가 낮다는 것은 잘 학습이 된 데이터라고 유추할 수 있다.

다시 말하면, 경사도가 낮은 데이터는 잔차도 작을 것이고, 이 데이터는 다음 학습 때 줄여도 무방할 것이다.

하지만 일정치 이하의 경사도를 지닌 데이터를 다 없애버린다는 것은 데이터 분포를 흔드는 것이다.

이에 따라 GOSS는 일정치 이하의 잔차를 지닌 데이터를 random sampling하고, multiplier를 곱해준다.

예시로, gradient 값에 따라 데이터를 정렬하고, 상위 a% 만큼을 모두 다음 데이터로 활용한다.

남은 데이터 중 b%를 랜덤으로 추출하게 되고, 이 데이터는 1-a / b 만큼 곱하여 amplify해준다.

논문에 기재된 GOSS 알고리즘

EFB 기법

데이터 feature 수를 낮추는 방법이다.

서로 배타적인(exclusive)한 feature들을 묶음으로써 수를 줄이는데, 이 때 두 가지 문제를 생각해볼 수 있다.

1) 어떤 변수들을 묶을 것이고, 2) 어떻게 묶을 것인가?

변수별로 서로 상호간의 충돌(conflict)가 발생하는 수 만큼 정렬하여 나누는 것이 방법인데, 이는 변수 수에 따라 복잡도가 증가함으로, 0이 아닌 값들의 수만큼 정렬하여 묶는 것으로 대체하였다. (0이 아닌 값들이 많을 수록 상호 conflict를 일으킬 확률이 높다고 판단)

앞서 histogram-based algorithm을 채택했는데, 이 histogram에 상호 배타적인 변수들은 다른 bin에 속하도록 구성할 수 있다. 예를 들어 서로 비슷한 구간의 값을 지닌 변수 두 개가 있을 경우, 서로 배타적이기 때문에 한 변수에 상수값을 더하여(offset) 구간이 겹치지 않도록 구성한 뒤 각 범위에 맞게끔 bin에 나눠담는 것이다.

논문에 기재된 EFB 알고리즘

적용 / 구현

이 건에 대해서는 앞선 글을 살펴보길 바란다.

https://blog.naver.com/ilovelatale/222284131107

Kaggle Case Study - (1) Santander Customer Transaction Prediction

본 카테고리는 Kaggle Case study를 통해 학습데이터 구성부터 모델 빌딩까지의 cycle 경험을 늘려보려고...

blog.naver.com

 

반응형