🤖 AI/ML

LightGBM

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를 너무 크게 설정

num_leaves가 크면 트리가 깊어져 오버피팅이 발생합니다. 보통 2^max_depth보다 작게 설정해야 합니다.

올바른 설정

num_leaves는 31~127 사이로 시작하고, early_stopping을 반드시 사용하세요. 검증 데이터로 최적 반복 횟수를 자동으로 찾아야 합니다.

🔗 관련 용어

📚 더 배우기