Python 实战:用 SHAP 与 Partial Dependence 绘制5种模型解释图

📅 2026/7/8 9:13:21 👁️ 阅读次数 📝 编程学习
Python 实战:用 SHAP 与 Partial Dependence 绘制5种模型解释图

Python 实战:用 SHAP 与 Partial Dependence 绘制5种模型解释图

在机器学习项目中,模型的可解释性正变得越来越重要。无论是为了满足监管要求,还是为了让业务方更好地理解模型决策,我们都需要掌握有效的模型解释工具。本文将带你用 Python 实现五种最实用的模型解释可视化方法,全部基于真实的分类任务案例。

1. 环境准备与数据加载

首先确保你的 Python 环境已安装以下库:

!pip install shap xgboost pandas matplotlib seaborn sklearn

我们使用经典的信用卡欺诈检测数据集作为示例:

import pandas as pd from sklearn.model_selection import train_test_split from xgboost import XGBClassifier # 加载数据 data = pd.read_csv('creditcard.csv') X = data.drop('Class', axis=1) y = data['Class'] # 划分训练测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y) # 训练XGBoost模型 model = XGBClassifier(random_state=42) model.fit(X_train, y_train)

提示:在实际项目中,建议对类别不平衡数据使用适当的采样技术或调整类别权重

2. SHAP 基础解释图

SHAP (SHapley Additive exPlanations) 是最流行的模型解释工具之一。我们先绘制最基本的特征重要性图:

import shap # 初始化JS可视化 shap.initjs() # 计算SHAP值 explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) # 全局特征重要性 shap.summary_plot(shap_values, X_test, plot_type="bar")

这张条形图展示了各特征对模型输出的平均影响程度。在信用卡欺诈检测中,你可能会发现V14V17等特征最为重要。

3. 蜂群图分析特征影响

蜂群图能更细致地展示特征值如何影响预测:

shap.summary_plot(shap_values, X_test)

这张图中:

  • 每个点代表一个样本
  • x轴表示SHAP值(对预测的影响程度)
  • 颜色表示特征值大小
  • 特征按重要性从上到下排列

观察V14特征,你会发现:

  • 低值(蓝色)通常有正SHAP值(增加欺诈概率)
  • 高值(红色)通常有负SHAP值(降低欺诈概率)

4. 个体样本解释

要解释单个预测,可以使用力力图:

# 选择一个样本 sample_idx = 5 shap.force_plot( explainer.expected_value, shap_values[sample_idx,:], X_test.iloc[sample_idx,:] )

这张图直观展示了:

  • 基准值(模型平均输出)
  • 哪些特征推动预测向正/负方向变化
  • 每个特征的贡献大小

5. 依赖图与交互分析

依赖图展示单个特征如何影响预测:

shap.dependence_plot( "V14", shap_values, X_test, interaction_index=None )

要分析特征交互,可以指定interaction_index

shap.dependence_plot( "V14", shap_values, X_test, interaction_index="V17" )

6. Partial Dependence Plots (PDP)

PDP 展示特征对预测的平均边际效应:

from sklearn.inspection import PartialDependenceDisplay features = ['V14', 'V17', 'Amount'] PartialDependenceDisplay.from_estimator( model, X_train, features, kind='both', subsample=1000, n_jobs=-1, grid_resolution=20 )

PDP 特别适合展示:

  • 特征与预测的非线性关系
  • 阈值效应
  • 与其他解释方法相互验证

7. 组合分析与实战建议

将这五种可视化方法结合使用,可以全面理解模型行为:

  1. 模型开发阶段:用SHAP摘要图识别重要特征
  2. 模型验证阶段:用PDP检查特征影响是否符合业务逻辑
  3. 上线部署阶段:用个体解释回答具体案例的预测原因

实际应用时还需注意:

  • 对高维数据考虑使用PCA或特征选择
  • 计算SHAP值可能耗时,对大样本使用子采样
  • 不同解释方法结果不一致时需要深入分析
# 保存所有可视化结果 import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(12, 8)) shap.summary_plot(shap_values, X_test, show=False) plt.savefig('shap_summary.png', bbox_inches='tight') plt.close()

掌握这些可视化技术后,你将能够:

  • 向非技术人员清晰解释模型决策
  • 快速识别模型潜在偏差
  • 更有效地进行特征工程
  • 满足日益增长的AI可解释性需求