XGBoost 파라미터 튜닝
XGBoost 파라미터 튜닝 (Parameter Tuning)
파라미터 튜닝은 머신러닝의 고전적인 어려운 문제예요. 모델의 최적 파라미터는 상황에 따라 천차만별이라 완벽한 가이드를 만들 수 없어요. 이 문서는 XGBoost의 파라미터에 대한 지침을 몇 가지 제시해요.
편향-분산 트레이드오프 이해하기
머신러닝·통계 수업을 들었다면 가장 중요한 개념으로 뽑힐 만한 게 이거예요. 모델을 더 복잡하게 하면(예: 깊이 증가) 모델이 학습 데이터를 더 잘 맞출 수 있어서 편향(bias)이 적은 모델이 되지만, 그만큼 더 많은 데이터가 필요해요. XGBoost 파라미터 대부분은 편향-분산 트레이드오프와 관련돼 있어요. 최고의 모델은 모델 복잡도를 예측력과 신중하게 맞바꿔요.
과적합 제어하기
학습 정확도는 높은데 테스트 정확도가 낮다면 과적합(overfitting)이 의심돼요. XGBoost에서 과적합을 제어하는 방법은 크게 두 가지예요.
- 모델 복잡도를 직접 제어하기:
max_depth,min_child_weight,gamma,max_cat_threshold같은 정규화 파라미터를 조정해요. 기준에 맞는 상수base_score를 설정할 수도 있어요. - 무작위성 추가로 학습을 노이즈에 강하게 만들기:
subsample과colsample_bytree를 쓰고, 부스팅 RF(num_parallel_tree)와 함께 사용할 수 있어요. 스텝 크기eta를 줄이고 그에 맞춰num_round를 늘리는 방법도 있어요.
불균형 데이터셋 다루기
광고 클릭 로그처럼 데이터셋이 극단적으로 불균형한 경우가 흔해요. 이때 XGBoost 학습을 개선하는 방법은 두 가지예요.
- 전체 성능 지표(AUC)만 신경 쓴다면:
scale_pos_weight로 양성·음성 가중치를 균형 맞추고, 평가에 AUC를 써요. - 올바른 확률 예측이 중요하다면: 이 경우 데이터셋을 재균형하면 안 되고,
max_delta_step을 유한한 값(예: 1)으로 설정해 수렴을 돕는 게 좋아요.
하이퍼파라미터 최적화(HPO) 프레임워크 사용하기
모델 튜닝은 정교한 작업이라 고급 프레임워크의 도움을 받을 수 있어요. 예를 들어 scikit-learn의 HalvingGridSearchCV 같은 메타 추정기가 탐색 과정을 도와주고, Optuna도 훌륭한 선택지예요.
데이터를 이해하기
좋은 모델을 얻으려면 데이터를 이해하는 것이 때로는 전부예요. 많은 솔루션이 대규모 튜닝 없이 단순한 XGBoost 트리 모델을 쓰고 데이터 전처리 단계에 집중해요. XGBoost는 전역 피처 중요도 점수와 SHAP 값으로 샘플 피처 중요도를 제공해 피처 선택을 도와줘요. 범주형 피처, 생존·랭킹 작업을 위한 파라미터도 있으니 탐색해 보는 걸 추천해요.
메모리 사용 줄이기
GridSearchCV 같은 HPO 라이브러리를 쓸 땐 스레드 수를 제어하는 게 좋아요. GridSearchCV가 여러 실험을 동시에 실행하게 하는 대신 XGBoost가 병렬로 돌게 두는 게 좋죠. 데이터를 복사하는 작업이 예상보다 많은 메모리를 먹곤 해요.
train_test_split은 데이터셋 복사본을 만들어X,X_train이 동시에 메모리에 있어요.GridSearchCV를n_jobs1보다 크게 실행하면 스레드마다 이런 일이 벌어져요.df.drop(...)은inplace파라미터를 지정해도 데이터프레임 새 복사본을 만들어요.np.array(...).astype(np.float32)는 데이터 복사본을 만들 수도 있어요.- NumPy는 기본적으로 double을 쓰는데, 정말 필요한지 점검해 보세요.
메모리 절약 사례는 Dask를 통한 분산 학습과 GPU 지원 문서에서도 찾을 수 있어요.
더 알아보기
- XGBoost 파라미터 — 전체 파라미터 문서
- Introduction to Boosted Trees — 모델 이론
- XGBoost GPU 지원 — GPU 학습