본문 바로가기

통계학/데이터분석

Feature Importance vs SHAP

반응형

Feature ImportanceSHAP 값은 모두 모델에서 각 특성(feature)의 중요성을 평가하는 방법이지만, 중요한 차이점이 있어!

🔍 Feature Importance

  • 정의: 모델이 학습하면서 각 피처가 예측에 얼마나 중요한지의 순위를 나타냄.
  • 주요 목적: 피처의 전체적인 중요성을 평가.
  • 계산 방법: 주로 트리 기반 모델에서 피처가 분할에 기여한 정도를 기반으로 계산됨. 예를 들어, 트리 분할을 잘하게 만든 피처는 높은 중요도를 가짐.
    • Gini Impurity 감소량 (XGBoost, LightGBM)
    • Information Gain (CART)
    • Permutation Feature Importance (모델 예측 성능에 미치는 영향을 피처별로 평가)
  • 일반적인 계산 방법:
  • 출력 형태: 각 피처가 예측에 기여한 전체적인 중요도 순위.
    (ex. 'mean_radius'가 가장 중요하다, 'texture_error'는 덜 중요하다)

🧠 해석 예시:

  • Feature Importance를 사용하면 전체적인 순위가 나오고, 그 피처가 예측에 얼마나 중요한지 전체적으로 파악할 수 있어.
  • 예를 들어 XGBoost 모델에서는 **model.feature_importances_**나 **plot_importance**로 확인할 수 있어.

🔍 SHAP (SHapley Additive exPlanations)

  • 정의: 각 샘플에 대해 피처가 예측에 미친 영향을 정확히 계산. 각 샘플이 예측 결과에 어떻게 기여했는지를 알려주는 값.
  • 주요 목적: 예측을 설명하고, 특정 예측에 대한 피처 영향을 시각적으로 보여줌.
  • SHAP 값은 각 샘플에 대해 각 피처가 어떻게 예측에 영향을 미쳤는지, **긍정적(상승) 또는 부정적(하락)**인 영향을 얼마나 주었는지에 대한 정밀한 분석을 제공.
  • 출력 형태: 각 샘플에 대해 각 피처의 SHAP 값을 시각화.
    (ex. 샘플 A에서는 mean_radius가 예측을 +0.15 증가시켰고, texture_error는 -0.05로 예측을 감소시켰다)

🔑 주요 차이점:

항목Feature ImportanceSHAP
목표 피처 중요도의 전체적인 순위 각 샘플에 대한 예측 설명 및 분석
계산 방법 주로 트리 모델에서의 분할 기여도 각 피처가 예측에 미친 정확한 기여도 (SHAP value)
결과 형태 피처별 중요도 (전체적인 순위) 각 샘플에 대한 각 피처의 기여도 (각 예측의 설명)
설명력 예측에 중요한 피처만 알 수 있음 개별 예측에 대해 어떤 피처가 얼마나 영향을 미쳤는지 세부적으로 설명
직관성 단순한 중요도, 상대적 평가 복잡하지만 각 샘플에 대해 예측 이유를 명확하게 설명
대상 모델 트리 기반 모델 (XGBoost, LightGBM 등) 모든 모델 (트리, 선형, 신경망 등)
시각화 중요도 순위 그래프 (막대그래프 등)

 

🧠 Feature ImportanceSHAP의 차이점 해석

  • Feature Importance모델이 피처를 얼마나 중요하게 여기는지를 알려주지만, 개별 예측에 대해서는 알 수 없다는 점에서 한계가 있어.
  • SHAP개별 샘플에 대해 피처가 어떻게 예측을 변화시켰는지 정확하게 알려주며, **"왜 이 예측이 나왔는지"**를 설명해주는 데 강력한 도구야. 그래서 **설명 가능한 AI(Explainable AI)**에서 많이 사용돼.
  •  

📊 예를 들어볼게:

피처Feature Importance (XGBoost)SHAP Summary Plot 해석
age 중요도: 0.2 age 높을수록 예측값 ↑
income 중요도: 0.3 income 높을 때는 예측 ↓, 중간값일 땐 ↑
credit_score 중요도: 0.1 예측 영향 거의 없음

Feature Importance는 단지 "중요한 순위"를 알려줄 뿐이고,
SHAP"그 피처가 어떻게 영향을 줬는지" 까지 설명 가능해!


🧠 요약: 언제 어떤 걸 써야 할까?

상황추천 방법
빠르게 피처 중요 순위 확인 Feature Importance
설명 가능한 AI(Explainable AI) 필요 SHAP
예측값이 왜 이렇게 나왔는지 해석 SHAP Force Plot
특정 피처가 어떻게 작용하는지 SHAP Dependence Plot
전체 영향 요약 보고 싶을 때 SHAP Summary Plot

 

 

📊 예시 비교:

1. Feature Importance (XGBoost)

import xgboost as xgb
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

# 데이터 준비
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# XGBoost 모델 학습
model = xgb.XGBClassifier(tree_method="hist").fit(X_train, y_train)

# Feature Importance 출력
xgb.plot_importance(model)
plt.show()
 

2. SHAP (Force Plot)

import shap

# SHAP 값 계산
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)

# Force Plot (첫 번째 샘플)
shap.plots.force(shap_values[0])
 

결과: 첫 번째 샘플에 대한 예측 결과를 구체적으로 분석하며, 각 피처가 예측에 어떻게 영향을 미쳤는지 알 수 있음.


📝 결론

  • Feature Importance모델의 전반적인 피처 중요도를 확인하는 데 좋고,
  • SHAP각 샘플에 대해 피처가 예측에 미친 영향을 구체적으로 해석하고 예측 결과를 설명할 때 강력한 도구야.

즉, SHAP을 사용하면 왜 이 예측이 이렇게 나왔는지정확히 알 수 있고, Feature Importance는 주로 모델의 피처 기여도 순위를 빠르게 파악할 때 유용해!

 

참고로 SHAP는 모든 모델에 사용할 수 있지만,
트리 모델에서 가장 빠르고 정확하게 작동한다!
다른 모델은 해석 가능하지만 속도나 정밀도에서 한계가 있을 수 있어.

반응형