미식가의 개발 일기

[머신러닝] LightGBM과 Gradient Boosting(광고 클릭 예측하기 with 캐글) 본문

ML, DL

[머신러닝] LightGBM과 Gradient Boosting(광고 클릭 예측하기 with 캐글)

대체불가 핫걸 2024. 7. 27. 16:11
캐글 -> DataSets -> Click Through Rate csv 파일 다운로드 후 실습 진행


Gradient Boosting이란?

앙상블 학습(여러 개의 모델을 결합해 더 나은 성능을 얻는 기법) 방법의 하나로 예측 정확도를 높이기 위해 여러 개의 약한 모델을 결합하여 강력한 모델을 만드는 방법이다.

이번 포스팅에서 다룰  LightGBM과 XGBoost 둘 다 Gradient Boosting 기반 알고리즘이다.

 

 

LightGBM

소개
  • GBDT(Gradient Boosting Decision Tree)라는 기계 학습 알고리즘 기반
  • 전체 데이터셋의 일부만 사용해 각 트리를 훈련시킬 수 있으며 고차원의 희소 특징을 효율적으로 처리 가능

 

특징
  • 시간 효율성과 메모리 효율성 높음
  • 정확도 높음
  • 결측치 자동 처리
  • 범주형 변수 자동 처리 → 자료형을 'catecory'로 변경 해줘야 함
  • 스케일링 필요 X

 

XGBoost와의 차이점

비교 LightGBM XGBoost
방식 Leaf-wise


-> 비대칭적 트리를 빠르게 성장 but 과적합 주의
Level-wise


-> 균형잡힌 트리로 과적합 방지 but  많은 메모리 사용
속도
(큰 데이터 처리)
 히스토그램 기반 분할:
모든 연속형 변수를 미리 정의된 구간으로 변환   시간, 메모리 최소화
병렬 처리: 동시에 트리 구축 -> 속도 향상
but 모든 특성 스캔 필요하므로
큰 데이터는 많은 시간과 비용 필요 
범주형 변수
처리
자료형을 'catecory'로 변환만 해주면
자동으로 학습
 수치형 데이터로 변환 필요
(Label Encoding, One-Hot Encoding)

*그림 출처: https://datascience.stackexchange.com/questions/26699/decision-trees-leaf-wise-best-first-and-level-wise-tree-traverse

 

 

LightBGM 실습

데이터 불러오기
import pandas as pd

data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/data/ad_click.csv')
data.head()

 

타겟 변수, 특성 분리 후 데이터 타입 확인
# 타겟 변수와 특성 분리
X = data.drop('Clicked on Ad', axis=1)
y = data['Clicked on Ad']

# 데이터 타입 확인
X.info()

object가 5개 존재

 

데이터 타입이 object인 컬럼 category로 변경하기
object_cols = [col for col in X.columns if X[col].dtype == 'object']

X[object_cols] = X[object_cols].astype('category')
X.info()

 

학습 데이터, 검증 데이터 분할
from sklearn.model_selection import train_test_split

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

 

LGBM 회귀 모델 생성 후 학습
  • 모델 초기화
    • n_estimators: 모델이 훈련할 트리 수
    • learning_rate: 예측을 얼마나 수행할지 결정, 높을수록 적은 수의 트리로 학습이 빠르게 이루어질 수 있지만 과적합이 발생할 수 있다.
    • max_depth: 결정 트리의 최대 깊이
  • 조기 종료 → early_stopping: 주어진 라운드 동안 성능 개선이 없으면 학습 중단
  • 로그 출력 콜백 -> log_evaluation: 지정된 주기마다 평가지표 출력
  • 모델 학습
    • eval_set: 모델 학습 중 성능 평가를 위한 검증 데이터셋 설정
    • eval_metrics: 평가 지표 지정 
    • callbacks: 학습 중 특정 작업으로 자동으로 수행할 함수들의 리스트
from lightgbm import LGBMRegressor
from lightgbm.callback import early_stopping, log_evaluation

# 모델 초기화
lgbm = LGBMRegressor(
    n_estimators=1000, 
    learning_rate=0.01, 
    max_depth=8,
    random_state=42
)

# 조기 종료 및 학습 로그 출력 콜백 정의
early_stop = early_stopping(stopping_rounds=15)
log_eval = log_evaluation(period=30)

# 모델 학습
lgbm.fit(
    X_train, y_train,
    eval_set=[(X_val, y_val)],
    eval_metric='rmse',
    callbacks=[early_stop, log_eval]
)

# 정확도 출력
print(lgbm.score(X_val, y_val))

 

 

평가지표 변화 확인
import lightgbm as lgb
import matplotlib.pyplot as plt

loss_plot = lgb.plot_metric(lgbm.evals_result_, metric='rmse')
plt.show()

 

 

피처 중요도 확인
# 최대 피처 수 -> 5개
importance_plot = lgb.plot_importance(lgbm.booster_, max_num_features=5)
plt.show()

반응형