shap/shap

A game theoretic approach to explain the output of any machine learning model.

SHAP이란 무엇인가?

SHAP (SHapley Additive exPlanations) 은 게임 이론의 개념을 사용하여 머신러닝 모델의 예측을 설명하는 파이썬 라이브러리입니다. 모델의 출력에 대한 각 입력 특성의 기여도를 공정하게 할당하는 Shapley 값 을 계산하며, 이를 모델의 예측값과 기준값(참조 데이터셋의 평균 예측값) 간의 차이에 대한 가산적 기여도로 제시합니다.

왜 중요한가

  • 모델 독립적 – 모든 예측기(트리, 선형 모델, 딥러닝, NLP 파이프라인 등)와 작동합니다.
  • 일관성 및 국소적 정확성 – 바람직한 이론적 속성을 만족하는 유일한 가산적 특성 기여도 방법입니다.
  • 풍부한 시각화 – 워터폴, 포스, 비스웜, 막대 그래프, 산점도, 결정 플롯, 텍스트 설명을 통해 사용자가 특성이 예측을 어떻게 높이거나 낮추는지 시각적으로 확인할 수 있습니다.

설치 방법

pip install shap          # from PyPI
# or
conda install -c conda-forge shap

GPU 가속 트리 모델 해석은 선택적 cuda 익스텐션을 통해 사용할 수 있습니다:

pip install "shap[cuda]"

(호스트에 CUDA 툴킷이 필요합니다.)

핵심 기능 (빠른 둘러보기)

1. 트리 모델 (XGBoost, LightGBM, CatBoost, scikit‑learn, Spark)

import shap, xgboost
X, y = shap.datasets.california()
model = xgboost.XGBRegressor().fit(X, y)
explainer = shap.Explainer(model)   # auto‑detects TreeExplainer
shap_vals = explainer(X)
shap.plots.waterfall(shap_vals[0])   # single‑instance explanation

시각화: 워터폴, 포스, 비스웜, 막대 그래프.

2. 자연어 모델 (Hugging Face transformers)

import shap, transformers
model = transformers.pipeline('sentiment-analysis')
explainer = shap.Explainer(model)
shap_vals = explainer(["What a great movie!", "...if you have no taste."])
shap.plots.text(shap_vals[0, :, "POSITIVE"])

어떤 단어가 긍정적 또는 부정적 감정에 기여했는지 보여줍니다.

3. 딥러닝 (TensorFlow/Keras, PyTorch) – DeepExplainer

import shap, numpy as np
background = x_train[np.random.choice(len(x_train), 100, replace=False)]
explainer = shap.DeepExplainer(model, background)
shap_vals = explainer.shap_values(x_test[:5])
shap.image_plot(shap_vals, -x_test[:5])

이미지 모델에 대해 픽셀 단위의 기여도를 생성합니다.

4. 기대 기울기 – GradientExplainer

Integrated Gradients와 SHAP의 아이디어를 결합한 것으로, 모든 TF/Keras 또는 PyTorch 모델과 작동하며 중간 계층 해석도 가능합니다.

5. 모델 독립적 – KernelExplainer

import shap, sklearn
svm = sklearn.svm.SVC(kernel='rbf', probability=True).fit(X_train, y_train)
explainer = shap.KernelExplainer(svm.predict_proba, X_train, link='logit')
shap_vals = explainer.shap_values(X_test, nsamples=100)
shap.force_plot(explainer.expected_value[0], shap_vals[0][0], X_test.iloc[0])

모든 블랙박스 함수와 작동하지만 속도가 느립니다.

6. 상호작용 값

트리 모델의 경우 쌍을 이루는 특성 상호작용을 검색할 수도 있습니다:

shap_inter = shap.TreeExplainer(model).shap_interaction_values(X)

대각선은 주효과를 유지하며, 비대각선은 두 특성이 어떻게 공동으로 예측에 영향을 미치는지 보여줍니다.

문서 및 학습 리소스

  • 공식 문서: https://shap.readthedocs.io
  • 예제 노트북: 트리, 딥러닝, 기울기, 선형, 커널 설명자 포함 (예: NHANES 생존 모델, MNIST 숫자 분류, VGG16 중간 계층 분석).
  • 인용: README에는 Tree SHAP 및 더 광범위한 SHAP 프레임워크를 소개한 Nature Machine Intelligence 및 Nature Biomedical Engineering 논문 링크가 있습니다.

SHAP은 누가 사용해야 하는가?

  • 이해관계자나 규제 준수를 위해 모델 예측을 해석해야 하는 데이터 과학자.
  • 표, 텍스트, 이미지 데이터를 위한 설명 가능한 AI 파이프라인을 구축하는 연구자.
  • 전역 지표를 넘어 특성 중요도에 대한 시각적이고 정량적인 통찰력을 원하는 모든 사람.

TL;DR: SHAP은 모든 머신러닝 모델의 예측을 수학적 근거가 있는 명확한 특성 기여도로 변환하는 성숙하고 널리 사용되는 파이썬 라이브러리입니다. 트리, 딥러닝, 일반 모델을 위한 빠른 알고리즘과 즉시 사용 가능한 다양한 시각화 도구를 제공합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • Dispatch