반응형
Feature Importance와 SHAP 값은 모두 모델에서 각 특성(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 Importance와 SHAP의 차이점 해석
- 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는 모든 모델에 사용할 수 있지만,
트리 모델에서 가장 빠르고 정확하게 작동한다!
다른 모델은 해석 가능하지만 속도나 정밀도에서 한계가 있을 수 있어.
반응형
'통계학 > 데이터분석' 카테고리의 다른 글
Force Plot(SHAP 설명) (0) | 2025.04.11 |
---|---|
shap조합 (0) | 2025.04.11 |
트리 모델 하이퍼 파라미터 튜닝 (0) | 2025.04.11 |
트리 기반 앙상블 모델 4종 비교(RandomForest, XGBoost, LightGBM, CatBoost) (0) | 2025.04.11 |
RandomForest와 XGBoost (1) | 2025.04.11 |