반응형
SHAP 결과를 해석하는 방법과 대표적인 시각화인 Force Plot 예시를 알려줄게.
이건 XGBoost나 LightGBM, RandomForest 같은 모델에 SHAP을 적용했을 때 예측이 어떻게 나왔는지를 설명해주는 대표적인 도구야.
📌 SHAP Force Plot 이란?
개별 데이터 포인트(샘플)에 대해 "왜 이 예측값이 나왔는지" 시각적으로 설명해줌.
- 기준선 (base value):
→ 전체 데이터에서 평균적인 예측값 (예: 전체 평균 확률 0.5) - 화살표(밴드):
→ 각 피처가 예측값을 얼마나 끌어올렸는지(+) or 낮췄는지(-) 를 보여줌 - 왼쪽은 마이너스 영향(파란색), 오른쪽은 플러스 영향(빨간색)
→ 시각적으로 직관적!
🖼️ Force Plot 예시
import shap
import xgboost as xgb
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# 데이터 로딩
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# 모델 학습
model = xgb.XGBClassifier(tree_method="hist").fit(X_train, y_train)
# SHAP 값 계산
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)
# Force Plot (첫 번째 샘플에 대해)
shap.plots.force(shap_values[0])
이 코드를 실행하면 Jupyter/코랩 상에서 인터랙티브한 force plot이 나타나!
🔍 해석 방법 (예시 그림 기준)
SHAP Force Plot
base value: 0.62
expected output (예측값): 0.87
피처 영향:
- 'mean radius': +0.15
- 'texture error': -0.05
이건 다음을 의미해:
- 전체 평균 예측값은 0.62 (base value)
- 이 샘플은 예측값이 0.87로 올라감
- 'mean radius'가 예측값을 +0.15만큼 증가시켰고
- 'texture error'는 -0.05만큼 감소시켰음
→ 즉, 이 샘플이 양성(positive) 예측으로 강하게 분류된 이유는 특정 피처가 예측을 강하게 밀어올렸기 때문이야.
⚠️ 주의할 점
- Force Plot은 한 샘플에 대한 예측 이유를 설명할 때 사용
- 전체 데이터에 대한 분석은 summary_plot이나 dependence_plot이 더 적합
- 코랩이나 주피터에서만 시각화 잘됨 (CLI/터미널에서는 제대로 안 보일 수 있음)
🎁 Tip: 전체 샘플에 대한 인터랙티브 Force Plot
shap.plots.force(shap_values[:100]) # 100개 샘플을 연속적으로 보여줌
반응형
'통계학 > 데이터분석' 카테고리의 다른 글
Feature Importance vs 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 |