240511 TIL #396 AI Tech #11 중요도

김춘복·2024년 5월 10일
0

TIL : Today I Learned

목록 보기
396/543
post-custom-banner

Today I Learned

오늘은 피처 중요도와 피처 선택 강의를 들었다.


Feature Importance / 피처 중요도

타겟 변수를 예측하는 데 얼마나 유용한 지에 따라 피처에 점수를 할당해서 중요도를 측정하는 방법

  • Model-specific
    머신러닝 모델 자체에서 피처 중요도 계산이 가능하면 방법

  • Model-agnostic
    모델에서 제공하는 기능에 의존하지 않고 모델을 학습한 후에 적용되는 피처중요도 계산 방법
    모델의 종류나 가정에 구애받지 않고 피처 중요도를 계산할 수 있다

Boosting Tree 피처 중요도 (Model-specific)

LightGBM 피처 중요도

  • Training 된 LightGBM 모델 클래스에 feature_importance(importance_type) 함수로 피처 중요도 계산 기능을 제공

  • 파라미터의 importance_type 값에 split이나 gain이 사용가능하다(디폴트는 split)
    split - 트리를 만드는데 피처가 몇 번 사용되었나 횟수(정확하게는 트리의 분할 횟수)
    gain - 분할에 기여한 평균적인 정보 이득(gain) 기준으로 피처 중요도 계산
    불순도 감소량을 기준으로 하기 때문에 분할의 질을 반영해 좀 더 정확하다.

  • 프로젝트 모델에서는 order_ts-last가 가장 중요한 피처고 order_ts_diff-max, order_ts-first가 뒤를 이었다.

XGBoost 피처 중요도

  • Training된 XGBoost 모델 클래스에 get_score(importance_type) 함수로 피처 중요도 계산 기능 제공

  • 파라미터의 importance_type의 디폴트는 weight
    weight - 피처가 얼마나 자주 사용되었나
    gain - lightgbm과 동일
    cover - 각 특성이 분할되는 횟수. 특성이 데이터를 얼마나 잘 cover하는지 나타냄
    total_gain, total_cover는 위처럼 average가 아니라 합으로 계산

  • 프로젝트 모델에서는 order_ts-last가 가장 중요한 피처고 quantity_diff-skew, cumsum_price_by_prod_id-skew 가 뒤를 이었다.

CatBoost 피처 중요도

  • Training 된 CatBoost 모델 클래스에 get_feature_importance(type) 함수로 피처 중요도 계산 기능을 제공

  • 파라미터의 type의 디폴트는 FeatureImportance

  • 프로젝트 모델에서는 order_ts-last가 가장 중요한 피처고 year_month-mode, order_ts-first, order_ts_diff-max가 뒤를 이었다.


Permutation 피처 중요도 (Model-Agnostic)

  • 피처의 값들을 하나하나씩 순회하면서 랜덤하게 셔플링 한 뒤 모델의 에러를 측정해서 기존과 에러의 차이가 얼마나 나는 지를 보고 에러 차이가 클수록 중요한 피처로 해석하는 방법

  • 상세 단계

  1. 원본 데이터셋에 대해 모델을 학습
  2. 원본 평가 데이터셋에 대한 모델 성능(예: 오차, 정확도 등)을 측정
  3. 특정 피처 X의 값들을 무작위로 섞음(permutation)
  4. 섞인 피처 X를 가진 데이터셋에 대해 모델 성능을 측정
  5. 원본 성능과 섞인 데이터셋 성능의 차이를 계산
  6. 이 성능 차이가 클수록 피처 X가 모델 예측에 중요한 역할을 했다고 해석
  7. 모든 피처에 대해 3-6 단계를 반복하여 중요도를 계산
  • Pseudo code
Input: Trained model f, feature matrix X, target vector y, error measure L(y,f).

1. Estimate the original model error eorig = L(y, f(X)) (e.g. mean squared error)
2. For each feature j = 1, ... ,p do:
o Generate feature matrix Xperm by permuting feature j in the data X. This breaks the
association between feature j and true outcome y.
o Estimate error eperm = L(Y,f(Xperm)) based on the predictions of the permuted data.
. Calculate permutation feature importance FI'= eperm/eorig. Alternatively, the difference can
be used: FI = eperm - eorig
3. Sort features by descending Fl.
  • sklearn에서 Permutation 피처 중요도 기능을 내장하고 있다.
from sklearn.linear_model import LogisticRegression
from sklearn.inspection import permutation_importance
X= [[1, 9, 9], [1, 9, 9], [1, 9, 9], [0, 9, 9], [0, 9, 9], [0, 9, 9]]
y=[1, 1, 1, 0, 0, 0]
clf = LogisticRegression().fit(X, y)
result = permutation_importance(clf, X, y, n_repeats=10, random_state=0)
result. importances_mean
result. importances_std
  • 프로젝트 모델에서는 order_ts-last가 가장 중요한 피처고 year_month-mode, order_ts-last, cumssum_quantity_by_prod_id-sum이 뒤를 이었다.

본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글