LightGBM
Light Gradient Boosting Machine
Microsoft의 그래디언트 부스팅. 대용량 데이터에 효율적.
Light Gradient Boosting Machine
Microsoft의 그래디언트 부스팅. 대용량 데이터에 효율적.
LightGBM(Light Gradient Boosting Machine)은 Microsoft에서 개발한 고성능 그래디언트 부스팅 프레임워크입니다. 의사결정 트리 기반의 앙상블 학습 알고리즘으로, XGBoost와 함께 Kaggle 등 ML 경진대회에서 가장 많이 사용되는 알고리즘입니다.
2017년 NIPS 논문으로 발표된 LightGBM은 기존 GBDT(Gradient Boosting Decision Tree)의 느린 학습 속도를 해결하기 위해 개발되었습니다. 히스토그램 기반 알고리즘과 Leaf-wise 성장 전략을 도입하여 속도와 메모리 효율성을 크게 개선했습니다.
LightGBM의 핵심 기술은 GOSS(Gradient-based One-Side Sampling)와 EFB(Exclusive Feature Bundling)입니다. GOSS는 그래디언트가 큰 샘플을 우선 학습하고, EFB는 희소 피처들을 묶어 차원을 줄입니다. 이를 통해 1억 건 이상의 대용량 데이터도 빠르게 학습할 수 있습니다.
실무에서 LightGBM은 CTR 예측, 사기 탐지, 추천 시스템 등 테이블 데이터 기반 ML 문제에서 핵심적으로 사용됩니다. GPU 학습 지원, 범주형 피처 자동 처리, 병렬/분산 학습 기능으로 기업 환경에서도 널리 활용됩니다.
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score, roc_auc_score
# 데이터 로드
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.2, random_state=42
)
# LightGBM 데이터셋 생성
train_data = lgb.Dataset(X_train, label=y_train)
valid_data = lgb.Dataset(X_test, label=y_test, reference=train_data)
# 하이퍼파라미터 설정
params = {
'objective': 'binary',
'metric': 'auc',
'boosting_type': 'gbdt',
'num_leaves': 31,
'learning_rate': 0.05,
'feature_fraction': 0.8,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'verbose': -1
}
# 모델 학습 (Early Stopping 적용)
model = lgb.train(
params,
train_data,
num_boost_round=1000,
valid_sets=[valid_data],
callbacks=[lgb.early_stopping(50), lgb.log_evaluation(100)]
)
# 예측 및 평가
y_pred = model.predict(X_test)
y_pred_binary = [1 if p > 0.5 else 0 for p in y_pred]
print(f"Accuracy: {accuracy_score(y_test, y_pred_binary):.4f}")
print(f"AUC: {roc_auc_score(y_test, y_pred):.4f}")
# 피처 중요도 확인
importance = model.feature_importance(importance_type='gain')
print(f"Top 5 Features: {sorted(zip(data.feature_names, importance), key=lambda x: -x[1])[:5]}")
"이번 CTR 예측 모델은 LightGBM으로 개발했습니다. 1억 건 학습 데이터를 30분 만에 처리했고, AUC 0.82를 달성했습니다. 피처 중요도 분석 결과 사용자 세션 길이가 가장 중요한 변수로 나왔습니다."
"LightGBM은 Leaf-wise 트리 성장 방식을 사용해서 XGBoost의 Level-wise보다 더 깊은 트리를 효율적으로 만들 수 있습니다. 다만 오버피팅 위험이 있어서 num_leaves와 max_depth를 적절히 조절해야 합니다."
"범주형 피처가 많은 데이터는 LightGBM의 categorical_feature 옵션을 쓰는 게 좋습니다. 원핫 인코딩보다 학습 속도도 빠르고 메모리도 덜 씁니다. GOSS 샘플링으로 대용량 데이터 처리 속도도 XGBoost보다 2-3배 빠릅니다."
num_leaves가 크면 트리가 깊어져 오버피팅이 발생합니다. 보통 2^max_depth보다 작게 설정해야 합니다.
num_leaves는 31~127 사이로 시작하고, early_stopping을 반드시 사용하세요. 검증 데이터로 최적 반복 횟수를 자동으로 찾아야 합니다.