Gradient Boosting 계열의 대표적인 모델인 XGBoost와 LightGBM은 분류(Classification)와 회귀(Regression) 모두에서 우수한 성능을 보여 많이 사용된다. 두 모델은 기본적인 구조와 개념이 유사하며 사용하는 하이퍼파라미터도 대부분 기능적으로 일치한다.
그래도 실제로 실험을 진행하다 보면 같은 기능을 다른 이름으로 제공하거나, 문제 유형(분류/회귀)에 따라 파라미터 해석이 달라지는 항목이 있다는 것을 알 수 있다.
이 글에서는 두 모델의 주요 하이퍼파라미터를 분류/회귀 상황 모두 고려하여 비교하고 실험 시 주의할 점들을 다루고 있다.
실제로 모델을 설계할 때 혼동했던 지점을 확실히 짚고 넘어가고자 한 것으로, 실험 설계 시 필요한 부분을 선택하여 참고할 수 있도록 용도별로 정리해 보았다.
기본값으로 설정된 하이퍼파라미터는 범용적인 상황에서 무난한 결과를 내도록 설계된 값이다.
하지만 실제 데이터는 항상 제각각이며 타깃의 분포, 변수의 스케일, 샘플 수, 클래스 불균형 여부 등 다양한 조건에 따라 모델이 민감하게 반응한다.
예를 들어 scale_pos_weight나 is_unbalance는 분류 문제에서 클래스 불균형을 반영하는 중요한 파라미터인데 이를 조정하지 않고 기본값을 그대로 두면 소수 클래스를 거의 예측하지 못하는 현상이 발생할 수 있다. 마찬가지로 learning_rate나 max_depth 같은 항목도 기본값이 데이터의 복잡도와 맞지 않으면 과적합 혹은 과소적합이 쉽게 일어난다.
문제에 맞게 하이퍼파라미터를 이해하고 조정하는 과정이 모델의 성능과 신뢰도를 결정짓게 된다.
학습률은 두 모델 모두 동일하게 learning_rate라는 이름으로 설정한다.
기본적으로는 작을수록 학습이 천천히 진행되지만 일반화 성능은 높아지는 경향이 있다. 따라서 학습률을 작게 설정할수록 n_estimators는 충분히 늘려야 하며, 조기 종료 조건과 병행해서 설정하는 것이 일반적이다.
트리의 개수를 지정하며 n_estimators가 너무 적으면 underfitting, 너무 많으면 과적합이 발생할 수 있다.
LightGBM은 기본값이 100, XGBoost는 100~500 사이로 실험하는 경우가 일반적이다. 학습률과 함께 조정되어야 한다.
early_stopping_rounds)을 설정하는 것이 과적합 방지에 효과적이다.트리의 최대 깊이를 제한하는 파라미터다.
깊이가 깊어질수록 모델의 복잡도가 증가한다. 너무 깊으면 학습 데이터에 과하게 적합(overfitting)되고, 너무 얕으면 충분한 학습이 이루어지지 않을 수 있다.
XGBoost와 LightGBM 두 모델은 리프 노드 분할을 제한하는 기준이 다르다.
XGBoost의 min_child_weight 는 최소한의 Hessian 값(2차 미분값)의 합을 기준으로 분할을 제한한다. 값이 높을수록 보수적으로 분할하며 클래스 불균형일 때 민감하게 반응한다.
LightGBM의 min_child_samples 는 리프 노드가 가져야 하는 샘플 수의 최소값이다. 값이 작으면 모델이 작은 노드를 생성하면서 과적합 가능성이 높아진다.
분류 문제에서 불균형 데이터일 경우 두 파라미터 모두 모델의 안정성 확보에 중요한 역할을 한다. 회귀에서도 noise가 많은 경우 분할을 완화하는 역할을 한다.
두 모델 모두 노드를 분할하기 위한 최소 손실 감소 기준을 설정한다.
XGBoost에서는 gamma, LightGBM에서는 min_split_gain이라는 이름으로 제공된다. 값이 클수록 분할에 신중해져 과적합을 방지할 수 있다.
전체 데이터에서 트리를 만들 때 사용할 샘플의 비율을 의미한다. 학습 데이터를 샘플링해 사용함으로써 과적합을 줄이고 일반화 성능을 높이는 데 효과적이다.
트리를 구성할 때 사용할 피처(feature)의 비율을 지정한다. 모든 피처를 다 사용하지 않고 일부만 사용하게 되면 모델이 특정 변수에 과하게 의존하는 것을 방지할 수 있다.
L1, L2 정규화를 위한 파라미터다.
reg_alpha: L1 정규화 (sparsity 유도)reg_lambda: L2 정규화 (가중치 크기 제한)정규화는 과적합 방지에 효과적이며 피처 수가 많거나 피처 간 상관관계가 높은 경우 안정적인 모델링에 도움을 준다.
이 항목은 분류 문제에서만 사용하는 파라미터이며, 클래스 불균형 문제를 조정하는 데 필수적이다.
XGBoost의 scale_pos_weight 는 양성 클래스의 가중치를 조정한다.
e.g., 클래스 비율이 1:10이라면 scale_pos_weight=10 정도로 조정
LightGBM은 is_unbalance=True 로 자동 조정하거나 scale_pos_weight 를 수동으로 설정할 수 있다.
회귀 문제에서는 클래스 자체가 존재하지 않기 때문에 이 파라미터는 사용하지 않아야 한다. 적용할 경우 오류나 경고가 발생할 수 있다.
모델 평가 지표를 설정하는 파라미터다.
auc, logloss, f1, accuracy 등rmse, mae, rmsle 등XGBoost에서는 eval_metric, LightGBM에서는 metric이라는 이름으로 지정한다. 적절한 지표를 설정하지 않으면 기본값이 자동 적용되기 때문에 실험 목적에 맞게 명시하는 것이 좋다.
최적화할 손실 함수(loss function)를 지정하는 파라미터다.
'binary:logistic' (XGB), 'binary' (LGBM)'multi:softprob', 'multiclass' 등'reg:squarederror', 'reg:logistic', 'regression' 등문제 유형에 따라 꼭 알맞은 objective를 설정해야 한다. 다중 분류에서는 클래스 수(num_class) 설정도 함께 필요하다.
검증 데이터의 성능이 더 이상 향상되지 않으면 학습을 조기 종료하는 설정이다.
XGBoost는 early_stopping_rounds 파라미터를 직접 설정하며, LightGBM은 같은 이름으로 사용하거나 callbacks를 활용할 수도 있다.
eval_set 또는 valid_sets와 함께 설정해야 의미가 있다.LightGBM에서만 사용되는 파라미터로, 초기 예측값을 타겟 평균으로 시작할지를 설정한다.
클래스 불균형이 심한 경우에는 True로 설정하는 것이 좋다. 회귀 문제에서 로그 변환된 타깃을 사용할 경우에는 False로 바꾸는 것이 유리한 경우가 있다.
XGBoost에서만 사용하는 분류 전용 파라미터로, LabelEncoder를 자동으로 사용할지를 결정한다.
현재는 기본값이 True인데 이를 그대로 두면 불필요한 경고 메시지와 함께 평가 지표가 비정상적으로 출력되는 경우가 많기 때문에 False로 지정하는 것이 일반적이다.
회귀에서는 이 파라미터가 필요하지 않다.
지금까지 구조적으로 유사한 XGBoost와 LightGBM 모델에서 세부적인 하이퍼파라미터의 이름과 작동 방식에 어떤 차이가 있는지 정리해 보았다.
분류와 회귀는 목적 자체가 다르기 때문에 같은 파라미터라도 역할이 달라지거나 완전히 배제해야 할 경우도 있었다.
적절한 하이퍼파라미터를 선택하는 것으로 모델의 성능이 결정될 수 있으므로 문제 유형과 데이터 상황에 맞게 적절한 실험을 수행할 수 있어야 한다. 파라미터 하나하나가 결과에 어떤 영향을 줄 수 있는지 이해하고 문제에 맞게 조정해 나가는 과정이 필요하다.