Gradient Boosting Machine (GBM)
CTR 예측을 통해 개인화된 추천 시스템을 만들 수 있는 또 다른 대표적인 모델이다.
Boosting
[출처] Wikipedia, Sirakorn
앙상블(ensemble) 기법의 일종이며, 앙상블은 모델의 편향에 따른 예측 오차를 줄이기 위해 여러 모델을 결합하여 사용하는 기법이다.
의사결정 나무(Decision Tree)로 된 weak learner(정확도와 복잡도가 비교적 낮은 분류기)들을 연속적으로 학습하여 결합하는 방식이다.
연속적으로 학습한다는 것은 이전 단계의 weak learner가 취약했던 부분을 위주로 데이터를 샘플링하거나 가중치를 부여해 다음 단계의 learner를 학습한다는 의미이다.
Boosting 기반 모델
AdaBoost(Adaptive Boosting), Gradient Boosting Machine(GBM), XGBoost, LightGBM, CatBoost 등이 있다.
Gradient Boosting
Gradient Descent를 사용하여 loss function이 줄어드는 방향(negative gradient)으로 weak learner들을 반복적으로 결합함으로써 성능을 향상시키는 boosting 알고리즘이다.
그러나 Gradient Descent를 구할 때 학습 파라미터가 아니라 학습하는 learner 자체로 미분한다.
그래서 이 미분 값을 예측하는 새로운 weak learner를 학습하게 된다.
즉, loss function이 줄어드는 방향(negative gradient)을 예측해서 weak learner를 생성하는 것이다.
[출처] https://orbi.uliege.be/bitstream/2268/163521/1/slides.pdf, Gradient Boosted Regression Trees
통계학적 관점에서 Gradient Boosting은 실제값과 예측값인 잔차(residual)를 적합(fitting)하는 것으로 이해할 수 있다.
이전 단계의 weak learner까지의 residual을 계산하고, 이를 예측하는 다음 weak learner를 학습한다.
회귀 문제에서는 예측값으로 residual을 그대로 사용하고, 분류 문제에서는 0과 1 사이의 실수로 예측하여 표현하는 것이 어려우므로 log(odds) 값을 사용한다.
Gradient Boosting을 사용하여 회귀 트리를 구하는 과정을 예시로 들면 다음과 같다.
다음과 같은 유저 데이터를 바탕으로 Weight을 추천하는 의사 결정 트리를 학습해 나간다고 가정한다.
Gender |
Age |
Height |
Weight |
Male |
20 |
174 |
72 |
Male |
33 |
173 |
75 |
Male |
47 |
170 |
73 |
Male |
59 |
168 |
71 |
Female |
24 |
161 |
55 |
Female |
38 |
160 |
57 |
Female |
43 |
157 |
58 |
Female |
53 |
154 |
58 |
우선 몸무게의 평균값(64.875)을 초기 예측값으로 설정한다.
실제 유저의 몸무게와 몸무게의 평균값의 차이인 잔차(residual)를 구한다.
Gender |
Age |
Height |
Weight |
Weight predict |
residual |
Male |
20 |
174 |
72 |
64.875 |
7.125 |
Male |
33 |
173 |
75 |
64.875 |
10.125 |
Male |
47 |
170 |
73 |
64.875 |
8.125 |
Male |
59 |
168 |
71 |
64.875 |
6.125 |
Female |
24 |
161 |
55 |
64.875 |
-9.875 |
Female |
38 |
160 |
57 |
64.875 |
-7.875 |
Female |
43 |
157 |
58 |
64.875 |
-6.875 |
Female |
53 |
154 |
58 |
64.875 |
-6.875 |
위에서 구한 잔차를 사용하여 이 잔차를 예측하는 첫 번째 트리를 학습한다.
Gender |
Age |
Height |
Weight |
residual |
residual predict |
Male |
20 |
174 |
72 |
7.125 |
8.458 |
Male |
33 |
173 |
75 |
10.125 |
8.458 |
Male |
47 |
170 |
73 |
8.125 |
8.458 |
Male |
59 |
168 |
71 |
6.125 |
6.125 |
Female |
24 |
161 |
55 |
-9.875 |
-9.875 |
Female |
38 |
160 |
57 |
-7.875 |
-7.208 |
Female |
43 |
157 |
58 |
-6.875 |
-7.208 |
Female |
53 |
154 |
58 |
-6.875 |
-7.208 |
이렇게 모델로 예측한 잔차를 구하면 처음에 구한 몸무게의 평균에서 잔차를 더하여 각 유저별로 예측한 몸무게를 구한다.
Gender |
Age |
Height |
Weight |
Weight predict |
residual |
Male |
20 |
174 |
72 |
73.333 |
-1.333 |
Male |
33 |
173 |
75 |
73.333 |
1.667 |
Male |
47 |
170 |
73 |
73.333 |
-0.333 |
Male |
59 |
168 |
71 |
71 |
0 |
Female |
24 |
161 |
55 |
55 |
0 |
Female |
38 |
160 |
57 |
57.667 |
-0.667 |
Female |
43 |
157 |
58 |
57.667 |
0.333 |
Female |
53 |
154 |
58 |
57.667 |
0.333 |
또 위에서 나온 잔차를 가지고 두 번째 트리를 학습한다.
Gender |
Age |
Height |
Weight |
Weight predict |
residual |
Male |
20 |
174 |
72 |
73.333 |
-1.333 |
Male |
33 |
173 |
75 |
73.333 |
1.667 |
Male |
47 |
170 |
73 |
73.333 |
-0.333 |
Male |
59 |
168 |
71 |
71 |
0 |
Female |
24 |
161 |
55 |
55 |
0 |
Female |
38 |
160 |
57 |
57.667 |
-0.667 |
Female |
43 |
157 |
58 |
57.667 |
0.333 |
Female |
53 |
154 |
58 |
57.667 |
0.333 |
이렇게 계속 잔차를 통한 트리 학습을 반복해 가면서 손실 함수 값이 일정 수준 이하로 떨어지거나 leaf node에 속하는 데이터의 수가 적으면 학습을 멈춘다.
Gradient Boosting 장단점
장점
대체로 random forest보다 나은 성능을 보인다.
단점
느린 학습 속도와 과적합 문제(prediction shift)가 있다.
Gradient Boosting을 보완하는 모델
Gradient Boosting의 문제점을 해결하기 위한 대표적인 모델 또는 라이브러리는 다음과 같다.
XGBoost(Extreme Gradient Boosting)
병렬 처리 및 근사 알고리즘을 통해 학습 속도를 개선한 라이브러리이다.
LightGBM
Microsoft에서 제안했으며, 병렬 처리 없이도 빠르게 Gradient Boosting을 학습할 수 있도록 한 라이브러리이다.
CatBoost
범주형 변수에 효과적인 알고리즘 등을 구현하여 학습 속도를 개선하고 과적합을 방지하고자 한 라이브러리이다.
출처
1. 네이버 부스트캠프 AI Tech 추천시스템 Stage 2 기초 강의