파이썬에서 제공하는 lightgbm 패키지를 사용하기 위해서는 그에 맞는 형태로 데이터를 변경해 주어야 합니다. 그런 다음, 하이퍼 파라미터를 정의한 후 알고리즘을 수행하면 됩니다.
## lightgbm 알고리즘 적용을 위한 train 및 validation 데이터 환경 설정 dtrain = lgb.Dataset(trainFinalDataSet.iloc[:,:-1], label=trainFinalDataSet.iloc[:,-1]) dtest = lgb.Dataset(valFinalDataSet.iloc[:,:-1], label=valFinalDataSet.iloc[:,-1])
## lightgbm 주요 하이퍼 파라미터 설정하기 ## 주요 하이퍼 파라미터에 대한 설명은 여기를 참고 ## 연습 삼아 그냥 세팅하고 실행 param = { 'learning_rate': 0.03, 'max_depth': 3, 'boosting': 'gbdt', 'objective': 'binary', 'metric': 'auc', 'num_leaves' : 5, 'feature_fraction': 0.5, 'bagging_fraction': 0.5, 'num_class': 1 } num_round = 10
## lightgbm 알고리즘을 활용한 학습 수행 lgbmbst = lgb.train(params = param, train_set = dtrain, num_boost_round = num_round, valid_sets = dtest)
XGBoost와 동일하게 학습을 10번 수행하도록 세팅했기 때문에
(num_boost_round = 10) 10번 반복된 결과에 대한 검증 데이터의
측정지표의 변화를 보여줍니다.
Step 4) 확률 값 산출 및 모형 성능 확인
이제 위에서 산출된 모형을 활용해서
모든 observation에 대한 확률 값을 산출한 후에, 모형의 성능을 비교해 보겠습니다.
## train set에 대한 이벤트 발생 확률 값 산출 trainPred = lgbmbst.predict(trainFinalDataSet, predict_disable_shape_check = True) valPred = lgbmbst.predict(valFinalDataSet, predict_disable_shape_check = True)
## train 및 validation data set에 저장 trainFinalDataSet['dtrainPred'] = trainPred valFinalDataSet['dtestPred'] = valPred
## train set에 대한 KS 통계량 산출하기 ## 사용자 정의 함수(저만 실행되고, 실행되지 않으실 거예요.) ## train set에 대한 KS 통계량 산출하기 ks_stat(trainFinalDataSet['dtrainPred'], trainFinalDataSet['target']) ## test set에 대한 KS 통계량 산출하기 ks_stat(valFinalDataSet['dtestPred'], valFinalDataSet['target'])
확률 값을 기반으로 하여 산출된 모형의 성능 지표 KS통계량의 결과를 보면, train set 0.6214이고, validation set 0.5563으로 개발 데이터와 검증 데이터의 변별력에 대한 변동성이
다소 존재함을 알 수 있네요.
실제 업무를 진행하면서 두 개(XGBoos, lightgbm)의
알고리즘을 자주 사용하는데요.
속도는 lightgbm이 상대적으로 빠르지만,
XGBoost보다 Overfitting이 좀 더 심하더라고요.
실제 적용을 위해서는 하이퍼 파라미터 튜닝이 많이 필요해 보입니다.
Step5) 모델에 사용된 feature의 중요도 산출
마지막으로 모형에 활용된 feature들의 중요도(feature importance)를 그림으로 표현해 보겠습니다.
## 변수 중요도 산출하기 fig, ax = plt.subplots(figsize=(20, 24)) plt.rc('font', size=20) # 기본 폰트 크기 plt.rc('axes', labelsize=20) # x, y축 label 폰트 크기 plt.rc('xtick', labelsize=20) # x축 눈금 폰트 크기 plt.rc('ytick', labelsize=20) # y축 눈금 폰트 크기 plt.rc('legend', fontsize=20) # 범례 폰트 크기 plt.rc('figure', titlesize=50) # figure title 폰트 크기 lgb.plot_importance(lgbmbst, ax=ax)
모형에서 가장 중요하게 작용한 상위 2개의 feature는 'duration'과 'pdays'임을 확인할 수 있습니다.
이는 XGboost와 동일한 결과이지만,
3번째부터는 feature importance가 달라집니다.
이번 포스팅에서는
lightgbm에 대한 매우 간단한 이진 분류 예측 모형 적합을 해봤습니다.
그 결과를 XGBoost와 비교해 보는 것에 중점을 두었습니다. 이상 포스팅을 마치도록 하겠습니다!
댓글