再见“黑匣子模型“!SHAP 可解释 AI (XAI)实用指南来了!

Posted Python学习与数据挖掘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再见“黑匣子模型“!SHAP 可解释 AI (XAI)实用指南来了!相关的知识,希望对你有一定的参考价值。

我们知道模型可解释性已成为机器学习管道的基本部分,它使得机器学习模型不再是"黑匣子"。幸运的是,近年来机器学习相关工具正在迅速发展并变得越来越流行。本文主要是针对回归问题的 SHAP 开源 Python 包进行 XAI 分析。

Lundberg 和 Lee (2016) 的 SHAP(Shapley Additive Explanations)是一种基于游戏理论上最优的 Shapley value来解释个体预测的方法。 Shapley value是合作博弈论中一种广泛使用的方法,它具有令人满意的特性。从博弈论的角度,把数据集中的每一个特征变量当成一个玩家,用该数据集去训练模型得到预测的结果,可以看成众多玩家合作完成一个项目的收益。Shapley value,通过考虑各个玩家做出的贡献,来公平的分配合作的收益。

在本文中,我们将使用来自 sklearn 数据集的波士顿房价数据集进行示例展示,它是一个简单的回归问题。

boston = datasets.load_boston() 
X_train, X_test, y_train, y_test = model_selection.train_test_split(boston.data, boston.target, random_state=0)

拆分数据集进行训练和测试后,创建模型并拟合。

regressor = ensemble.RandomForestRegressor() 
regressor.fit(X_train, y_train);

计算Shapley value

使用 SHAP 包,计算非常简单明了。我们只需要模型(regressor)和数据集(X_train)。

# Create object that can calculate shap values
explainer = shap.TreeExplainer(regressor)
# Calculate Shap values
shap_values = explainer.shap_values(X_train)

计算 SHAP 值后,我们可以绘制几个分析图,以帮助我们理解模型。

SHAP 特征重要性

SHAP 提供了特征重要性的计算方式,取每个特征的SHAP value的绝对值的平均值作为该特征的重要性,得到一个标准的条形图。在下图中,你可以看到由 SHAP value计算的特征重要性与使用 scikit-learn 计算的特征重要性之间的比较,它们看起来非常相似,但它们并不相同。

shap.summary_plot(shap_values, X_train, feature_names=features, plot_type="bar")

左侧的特征重要性由 SHAP 值计算得出,右侧特征重要性使用 scikit-learn model.feature_importances计算得出

SHAP Summary Plot

Summary_plot 结合了特征重要性和特征效果。Summary_plot 为每一个样本绘制其每个特征的Shapley value。y 轴上的位置由特征确定,x 轴上的位置由每 Shapley value 确定。颜色表示特征值(红色高,蓝色低),可以看到特征 LSTAT 是最重要的特征,具有很高的 Shapley value范围。重叠点在 y 轴方向抖动,因此我们可以了解每个特征的 Shapley value分布,这些特征是根据它们的重要性排序的。

shap.summary_plot(shap_values, X_train, feature_names=features)

在Summary_plot图中,我们首先看到了特征值与对预测的影响之间关系的迹象,但是要查看这种关系的确切形式,我们必须查看 SHAP Dependence Plot图。

SHAP Dependence Plot

Partial dependence plot (PDP or PD plot) 显示了一个或两个特征对机器学习模型的预测结果的边际效应,它可以显示目标和特征之间的关系是线性的、单调的还是更复杂的。PDP是一种全局方法:该方法考虑所有实例并给出关于特征与预测结果的全局关系。PDP 的一个假设是第一个特征与第二个特征不相关。如果违反此假设,则PDP计算的平均值将包括极不可能甚至不可能的数据点。

Dependence plot 是一个散点图,显示单个特征对模型预测的影响。在这个例子中,当每个住宅的平均房间数高于 6 时,房产价值会显着增加。

  • 每个点都是来自数据集的单个预测(行)。
  • x 轴是数据集中的实际值。
  • y 轴是该特征的 SHAP 值,它表示该特征值对该预测的模型输出的改变程度。

颜色对应于可能与我们正在绘制的特征有交互作用的第二个特征(默认情况下,第二个特征是自动选择的)。如果另一个特征与我们正在绘制的特征之间存在交互作用,它将显示为不同的垂直着色模式。

shap.dependence_plot(5, shap_values, X_train, feature_names=features)


在上面的例子中,我们可以看到每个住宅的平均房间数高于 7.5,CRIM 总是很低。这些案例的 Shapley value很高,极大地影响了结果,可以看出 RM、CRIM 特征之间相互作用。

SHAP Force plot

SHAP force plot为我们提供了单一模型预测的可解释性,可用于误差分析,找到对特定实例预测的解释。

i = 18 
shap.force_plot(explainer.expected_value, shap_values[i], X_test[i], feature_names = features)


从图中我们可以看出:

  • 模型输出值:16.83
  • 基值:如果我们不知道当前实例的任何特性,这个值是可以预测的。基础值是模型输出与训练数据的平均值。(代码中的explainer.expected_value)。
  • 绘图箭头上的数字是此实例的特征值。CRIM:城镇人均犯罪率 = 0.06664 和 RM:平均房间数 = 6.546
  • 红色代表将模型分数推高的特征,蓝色代表将分数推低的特征。
  • 箭头越大,特征对输出的影响越大。在 x 轴上可以看到影响的减少或增加量。
  • 0.066 的 CRIM 增加属性值,6.546 的 RM 降低属性值。

如果我们想要更全面地展现先前的预测,我们可以使用力图的变体。在这里,我们可以看到一组垂直放置(旋转 90°)和并排放置的预测。在下图中,我们可以看到数据集中的前 5 行。

# visualize the first 5 predictions explanations with a dark red dark blue color map.
shap.force_plot(explainer.expected_value, shap_values[0:5,:], X_test[0:5,:], plot_cmap="DrDb", feature_names=features)

SHAP Decision plot

决策图显示的信息与力图基本相同。灰色垂直线是基础值 ,红线表示每个特征是否将输出值移动到高于或低于平均预测的值。

这张图比前一张图更清晰和直观,尤其是要分析的特征比较多的时候。在力图中,当预测变量的数量较多时,信息可能看起来非常紧凑。

shap.decision_plot(explainer.expected_value[0], shap_values[0], feature_names = list(features))

决策图的垂直直线标记了模型的基础值。彩色线是预测。特征值在预测线旁边以供参考。从图的底部开始,预测线显示 SHAP value 如何从基础值累积到图顶部的模型最终分数。决策图是 SHAP value 的文字表示,使其易于解读。

力图和决策图都可以有效地解释上述模型的预测。而且很容易识别出主要影响的大小和方向。

使用 SHAP 值进行异常值检测

将决策图叠加在一起有助于根据 SHAP value 定位异常值。在上图中,你可以看到一个不同数据集的示例,用于使用SHAP决策图进行异常值检测。

Summary

SHAP 框架已被证明是机器学习模型解释领域的一个重要发展。 SHAP 结合了几种现有方法,创建了一种直观、理论上合理的方法来解释任何模型的预测。 SHAP value 量化了特征对预测影响的大小和方向(正或负)。 我相信使用 SHAP 和其他工具进行 XAI 分析应该是机器学习管道的一个组成部分。

技术交流

欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!

为方便进行学习交流,本号开通了技术交流群,添加方式如下:

直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!
在这里插入图片描述

以上是关于再见“黑匣子模型“!SHAP 可解释 AI (XAI)实用指南来了!的主要内容,如果未能解决你的问题,请参考以下文章

ML之shap:基于boston波士顿房价回归预测数据集利用Shap值对LiR线性回归模型实现可解释性案例

用于可解释机器学习的 Shapley 值和 SHAP 之间的差异

ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用Shap值对XGBoost模型实现可解释性案例之详细攻略

真香!利用 Shap 可完美实现机器学习模型输出可视化!

ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略

机器学习黑盒?SHAP(SHapley Additive exPlanations)使用 XGBoost 的可解释机器学习