본문 바로가기
C.W.K.
Stream
Lesson 07 of 07 · published

Gradient Boosting과 Tabular Champion

~32 min · gradient-boosting, lightgbm, xgboost

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

앞선 실수를 다음 나무가 고쳐

그래디언트 부스팅은 많은 나무를 독립적으로 만든 뒤 평균내지 않아. 첫 약한 나무의 예측에서 남은 손실 기울기나 잔차를 다음 나무가 맞히고, 그 뒤의 남은 오류를 또 다음 나무가 줄여. 작은 보정을 차례로 더해 강한 예측기를 만드는 방식이야. 복잡한 비선형 관계와 특성 상호작용을 표 자료에서 잘 잡는 이유지.

표 자료에서 강한 기본 후보야

LightGBM, XGBoost, CatBoost는 수치와 범주, 결측, 비선형 경계를 효율적으로 다루어 대회와 기업 점수 시스템에서 널리 쓰여. 같은 표 자료에서는 깊은 신경망보다 적은 자료와 계산으로 좋은 성능을 내는 경우가 많아. 그래도 로지스틱 회귀와 무작위 숲 기준선을 먼저 세워야 추가 복잡성이 실제 가치를 주는지 알 수 있어.

학습률과 나무 수는 한 쌍이야

learning_rate는 각 나무의 보정을 전체 앙상블에 얼마나 크게 더할지 정해. 작게 잡으면 한 단계의 실수를 줄일 수 있지만 같은 구조를 배우려면 더 많은 나무가 필요해. 0.01~0.05의 작은 학습률, 큰 최대 나무 수, 조기 종료를 함께 쓰는 게 안정적인 출발점이야. 학습률만 낮추고 나무 수를 고정하면 과소적합이 될 수 있어.

나무 하나의 용량을 제한해

LightGBM의 num_leaves나 XGBoost의 max_depth는 한 나무가 표현할 상호작용의 복잡도를 바꿔. 잎이 많고 깊을수록 학습 자료를 세밀하게 맞추지만 잡음까지 쫓기 쉬워. min_data_in_leafmin_child_samples로 잎에 충분한 사례를 요구하고, 행·특성 부분표본과 L1·L2 규제를 필요에 따라 비교해.

조기 종료는 검증 자료의 역할이야

n_estimators를 허용하고 독립 검증 자료의 점수가 정한 횟수 동안 나아지지 않으면 학습을 멈춰. 최적 반복 수를 저장하고 재현해야 해. 같은 자료로 수십 설정을 고르고 조기 종료까지 반복하면 검증 자료에 맞춰질 수 있으니 교차검증이나 별도 조기 종료 묶음을 설계해.

범주 처리의 구현 차이를 알아

CatBoost는 범주형 특성의 순서 기반 통계를, LightGBM은 자체 범주 분할을 지원하지만 입력 형식과 누출 방지 방식이 다르게 작동해. 미리 전체 목표 평균으로 인코딩한 값을 넣으면 라이브러리의 장점을 잃고 누출을 만들 수 있어. 사용하는 구현의 공식 입력 계약에 맞춰 원시 범주와 미지 범주 동작을 시험해.

성능뿐 아니라 간격과 비용을 기록해

교차검증 평균과 표준편차, 학습·검증 차이, 최적 나무 수를 함께 봐. 학습 점수만 계속 좋아지고 검증이 멈추면 나무 용량을 줄이거나 잎 최소 표본과 규제를 늘려. 로지스틱 회귀 대비 PR-AUC가 조금 높은 정도라면 메모리, 응답 시간, 설명과 감시 비용까지 합쳐 선택해야 해.

결과물을 원래 형식으로 보존해

학습된 부스터를 JSON이나 라이브러리의 안정된 기본 형식으로 저장하고 코드, 라이브러리 버전, 입력 스키마, 최적 반복 수를 함께 남겨. 다시 불러 같은 원시 행에서 같은 점수와 범주 순서를 내는지 새 프로세스에서 확인해. 특성 중요도는 홀드아웃 순열이나 SHAP으로 검토하되 원인으로 읽지 마.

Code

조기 종료와 교차검증 방식 학습을 둔 LightGBM·python
import lightgbm as lgb

model = lgb.LGBMClassifier(
    n_estimators=2000, learning_rate=0.03,
    num_leaves=63, min_child_samples=30,
    subsample=0.8, colsample_bytree=0.8,
    class_weight="balanced", random_state=7
)
model.fit(
    X_tr, y_tr, eval_set=[(X_val, y_val)],
    eval_metric="average_precision",
    callbacks=[lgb.early_stopping(50), lgb.log_evaluation(100)]
)
히스토그램 방식을 쓰는 XGBoost·python
import xgboost as xgb

model = xgb.XGBClassifier(
    n_estimators=2000, learning_rate=0.03, max_depth=6,
    subsample=0.8, colsample_bytree=0.8,
    tree_method="hist", eval_metric="aucpr",
    early_stopping_rounds=50, random_state=7
)
model.fit(X_tr, y_tr, eval_set=[(X_val, y_val)])
범주형 열이 핵심일 때 CatBoost·python
from catboost import CatBoostClassifier, Pool

cat_idx = [X_tr.columns.get_loc(c) for c in categorical_cols]
model = CatBoostClassifier(
    iterations=2000, learning_rate=0.03, depth=8,
    auto_class_weights="Balanced", random_seed=7, verbose=200
).fit(Pool(X_tr, y_tr, cat_features=cat_idx), eval_set=Pool(X_val, y_val, cat_features=cat_idx), early_stopping_rounds=50)

External links

Exercise

데이터셋에 조기 종료를 둔 LightGBM 분류기를 학습해 로지스틱 회귀 기준선과 PR-AUC, 보정, 응답 시간, 결과물 크기를 비교해. 향상이 5%를 넘는다면 추가 감시와 배포 비용을 계획하고, 작다면 단순한 모델을 선택할지 정당화해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.