같은 역할의 파라미터부터 맞추기
두 라이브러리는 이름은 달라도 비슷한 역할의 parameter를 갖는다. 원문이 정리한 대응은 다음과 같다.
| 조절 목적 | LightGBM | XGBoost | 확인할 현상 |
|---|
| tree 깊이 | max_depth | max_depth | 너무 깊을 때 train만 좋아지는가 |
| leaf 수 | num_leaves | max_leaves | 분기가 늘며 과적합하는가 |
| 행 sampling | bagging_fraction | subsample | 일부 행만 써도 validation이 유지되는가 |
| 열 sampling | feature_fraction | colsample_bytree | 특정 feature 의존이 줄어드는가 |
| boosting 횟수 | num_iterations | nrounds | 어느 반복부터 validation이 나빠지는가 |
| 학습률 | learning_rate | eta | 작은 step과 더 많은 반복이 필요한가 |
| booster | boosting | booster | 선택한 tree 방식이 목적과 맞는가 |
LightGBM의 booster 선택지로 원문은 gbdt, rf, dart, goss를, XGBoost는 gblinear, gbtree, dart를 적었다. 이름이 비슷해도 구현과 의미가 완전히 같다고 가정하지 말고, 선택한 옵션의 문서와 결과를 따로 확인해야 한다.
튜닝 순서는 다음처럼 좁히면 과정을 설명하기 쉽다.
- 먼저 얕은 tree와 제한된 leaf로 baseline을 만든다.
- train도 낮으면 depth, leaves를 조금 늘린다.
- train은 높은데 validation이 낮으면 복잡도를 줄이고 행, 열 sampling을 검토한다.
- learning rate를 낮췄다면 반복 횟수를 함께 늘려 비교한다.
- 가장 좋은 한 번이 아니라 여러 split에서 결과가 안정적인지 본다.
세부 parameter 설명은 원문이 참고한 LightGBM 파라미터 정리에서 이어서 볼 수 있다.
결국 LightGBM과 XGBoost 선택의 핵심은 “누가 더 유명한가”가 아니다. 동일한 데이터 분할과 metric 아래에서 복잡도와 sampling을 맞춘 뒤, validation 성능, 시간, 과적합 정도를 함께 비교했는가가 재현 가능한 선택을 만든다.