shap/shap

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

什么是 SHAP?

SHAP (SHapley Additive exPlanations) 是一个 Python 库,它利用博弈论的概念来解释机器学习模型的预测结果。它计算 Shapley 值(一种公平地将模型输出归因于每个输入特征的方法),并将其呈现为加性贡献,这些贡献的总和等于模型预测值与基准值(参考数据集上的平均预测值)之间的差值。

为什么它很重要

  • 模型无关 – 适用于任何预测器(树模型、线性模型、深度神经网络、NLP 流水线等)。
  • 一致且局部准确 – 唯一满足多种理想理论属性的加性特征归因方法。
  • 丰富的可视化 – 瀑布图、力导向图、蜂群图、条形图、散点图、决策图和文本解释,帮助用户直观地看到特征如何推动预测结果的上升或下降。

如何获取

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

通过可选的 cuda 扩展可实现 GPU 加速的树模型解释:

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

结合了集成梯度和 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
  • 示例 Notebooks 涵盖树模型、深度学习、梯度、线性模型和核解释器(例如:NHANES 生存模型、MNIST 数字分类、VGG16 中间层分析)。
  • 引用: README 中链接了介绍 Tree SHAP 和更广泛的 SHAP 框架的原始 Nature Machine Intelligence 和 Nature Biomedical Engineering 论文。

谁应该使用 SHAP?

  • 需要为利益相关者或合规性要求解释模型预测的数据科学家。
  • 为表格、文本或图像数据构建可解释 AI 流水线的科研人员。
  • 任何希望在全局指标之外获得特征重要性可视化、定量洞察的人。

TL;DR: SHAP 是一个成熟且广泛使用的 Python 库,它将任何机器学习模型的预测转化为清晰、具有数学基础的特征归因,并提供了一套针对树模型、深度神经网络和通用模型的快速算法,以及许多开箱即用的可视化工具。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • Dispatch