본문 바로가기

Machine Learning Models/Classic

LightGBM feature importance

반응형

Feature Selection - XGBoost

Feature Selection - Random Forest (1)

Feature Selection - Random Forest (2)


최근 XGBoost, LightGBM, Random Forest, Factorization Machine 등 여러 알고리즘을 이용해 회귀 모델을 구성한 적이 있습니다. MAE, R2 등의 정확도는 비슷했지만 feature importance를 측정하니 LightGBM 모델에 대해서만 feature importance가 다른 양상을 나타냈습니다. Figure 1을 보면 LightGBM 모델의 경우 feature importance 합이 1이 되지도 않고 A부터 H까지의 feature가 균등한 importance를 가지고 있었습니다.

  • Feature importance는 boosted model 패키지에서 제공하는 "model.feature_importances_" 속성을 이용했습니다.

Figure 1

원인은 간단했습니다. LightGBM 경우에는 XGBoost와 달리 디폴트 feature importance 타입이 "gain"이 아닌 "split" 방식이었습니다. "gain" 방식은 지난 포스트에서 살펴본 Mean Decrease in Impurity (MDI) 기반으로 각 feature로 분기되었을 때 감소한 impurity를 전체 ensemble tree에 걸쳐 평균을 취한 값입니다. 말 그대로 각 feature로 분기함으로써 얻은 이득 (gain) 이죠.

 

Feature importance with LightGBM

I have trained a model using several algorithms, including Random Forest from skicit-learn and LightGBM. and these model performs similarly in term of accuracy and other stats. The issue is the

stackoverflow.com

반면에 "split" 방식은 각 feature가 노드를 분기했을 때 얼마만큼 사용되었는지 횟수 (count)를 재는 방식입니다. 따라서 데이터를 구분하는데 큰 특징을 가지는 강한 feature가 있다면 tree 상위 레벨에서 상대적으로 적게 사용될 것이기 때문에 "split" 방식으로는 단순히 분기될 때 덜 사용되었다는 이유만으로 importance가 과소평가되게 됩니다.

 

Feature Importance Measures for Tree Models — Part I

An Incomplete Review

medium.com

따라서 다음처럼 디폴트 feature importance 속성을 사용하는 대신 다음처럼 feature importance 방식을 "gain" 으로 지정해주면, LightGBM 모델에서도 "gain" 방식의 feature importance를 얻을 수 있습니다. Figure 2를 보면 LightGBM 모델도 다른 모델과 비슷한 feature importance 양상을 얻었내요. (단, 다른 모델과 달리 합이 1이 되도록 normalize 해줘야 합니다)

from lightgbm import LGBMClassifier, LGBMRegressor

model_clf = LGBMClassifier()
model_reg = LGBMRegressor()

## 기존 feature importance
model_clf.feature_importances_
model_reg.feature_importances_

## gain feature importance
model_clf.booster_.feature_importance(importance_type="gain")  # classifier
model_reg.booster_.faeture_importance(importance_type="gain")  # regressor

Figure 2

참조

반응형

'Machine Learning Models > Classic' 카테고리의 다른 글

Dimension Reduction - t-SNE (2)  (0) 2021.05.18
XGBOOST 동작 원리  (0) 2021.05.15
Dimension Reduction - t-SNE (1)  (0) 2021.04.20
Dimension Reduction - PCA  (0) 2021.04.20
Classification - Metrics (2)  (1) 2021.04.19