主要内容

机器学习模型的Shapley值

您可以通过使用沙普利对象。使用这些值来解释模型中各个特性对查询点预测的贡献。有两种方法来计算Shapley值:

  • 创建一个沙普利对象,用于具有指定查询点的机器学习模型沙普利函数。该函数计算查询点模型中所有特征的Shapley值。

  • 创建一个沙普利对象为机器学习模型使用沙普利函数,然后使用适合函数。

本主题定义Shapley值,描述计算Shapley值的两种可用算法,并为每种算法提供示例,并展示如何降低计算Shapley值的成本。

什么是Shapley值?

在博弈论中,参与者的Shapley值是参与者在合作博弈中的平均边际贡献。也就是说,Shapley值是对个体参与者从合作博弈中产生的总收益的公平分配。在机器学习预测的上下文中,一个查询点的特征的Shapley值解释了该特征对指定查询点的预测(对回归的响应或分类的每个类的得分)的贡献。Shapley值对应的是查询点的预测与平均预测的偏差,这是由于该特征造成的。对于每个查询点,所有特征的Shapley值的和对应于预测与平均值的总偏差。

Shapley值查询点的特性x是由值函数定义的v

φ v x 1 年代 v x 年代 v x 年代 1 | 年代 | | 年代 | 1 (1)
  • 是所有特征的数量。

  • 是所有特征的集合。

  • |年代|是集合的基数吗年代,即集合中元素的个数年代

  • vx年代是集合中特征的值函数吗年代对于查询点x.函数的值表示中特性的预期贡献年代到查询点的预测x

Shapley值计算算法

沙普利提供了两种算法:kernelSHAP[1],对值函数采用介入性分布,并将其扩展到kernelSHAP[2],它对值函数使用条件分布。属性指定要使用的算法“方法”的名称-值参数沙普利函数或适合函数。

两种算法的区别在于值函数的定义。两种算法都定义了值函数,这样一个查询点的Shapley值在所有特征上的和对应于对查询点的预测与平均值的总偏差。

1 φ v x f x E f x

因此,值函数vx年代必须符合预期贡献的功能年代根据预测(f)查询点x.这两种算法通过使用从指定数据(X).你必须提供X通过机器学习模型的输入或单独的数据输入参数创建沙普利对象。在人工样本中,特征值为年代来自查询点。对于剩下的特性(特性年代c的补充年代), kernelSHAP算法使用介入分布生成样本,而kernelSHAP算法的扩展使用条件分布生成样本。

KernelSHAP (“方法”、“interventional-kernel”

沙普利默认使用kernelSHAP算法。

kernelSHAP算法定义了中特征的值函数年代在查询点x作为对干预分布的预期预测D的特征的联合分布年代c

v x 年代 E D f x 年代 X 年代 c

在哪里x年代中的功能的查询点值年代,X年代c年代c

求值函数的值vx年代在查询点x,假设这些特征不是高度相关的,沙普利使用数据中的值X作为干预分布的样本D的功能年代c

v x 年代 E D f x 年代 X 年代 c 1 N j 1 N f x 年代 X 年代 c j

在哪里N是观察的次数,和X年代cj中特性的值年代cj观察。

例如,假设您有三个特性X四项观察结果:(x11x12x13), (x21x22x23), (x31x32x33)和(x41x42x43).假设年代包括第一个特性,和年代c包括休息。在本例中,第一个特性的值函数在查询点(x41x42x43)是

v x 年代 1 4 f x 41 x 12 x 13 + f x 41 x 22 x 23 + f x 41 x 32 x 33 + f x 41 x 42 x 43

kernelSHAP算法在计算上比kernelSHAP算法的扩展更便宜,支持有序的分类预测器,并可以处理中缺失的值金宝appX.然而,该算法要求特征独立假设,并使用非分布样本[3].使用查询点和数据混合创建的人工示例X可能包含不切实际的观察。例如,(x41x12x13)可能是一个不出现在三个特征的完整联合分布中的样本。

扩展到KernelSHAP (“方法”、“conditional-kernel”

指定“方法”、“conditional-kernel”对kernelSHAP算法进行扩展。

对kernelSHAP算法的扩展定义了中特征的值函数年代在查询点x用的条件分布X年代c,考虑到X年代具有查询点值:

v x 年代 E X 年代 c | X 年代 x 年代 f x 年代 X 年代 c

求值函数的值vx年代在查询点x沙普利使用查询点的最近邻,对应数据中10%的观察值X.该方法比kernelSHAP算法使用更真实的样本,不需要特征独立假设。然而,这种算法在计算上更昂贵,不支持有序分类预测器,而且不能处理金宝appS在连续特征中。此外,如果虚拟特征与一个重要特征相关,算法可能会给一个对预测没有贡献的虚拟特征赋一个非零Shapley值[3]

指定Shapley值计算算法

本例训练了一个线性分类模型,同时使用kernelSHAP算法(“方法”、“interventional-kernel”)和对kernelSHAP算法的扩展(“方法”、“conditional-kernel”).

训练线性分类模型

加载电离层数据集。该数据集有34个预测器和351个雷达返回的二进制响应,或坏(“b”)或好(‘g’).

负载电离层

训练线性分类模型。指定目标函数最小化技术(“规划求解”name-value参数)作为有限内存的Broyden-Fletcher-Goldfarb-Shanno拟牛顿算法(“lbfgs”)以提高线性系数的精度。

Mdl = fitclinear (X, Y,“规划求解”“lbfgs”
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: {'b' ' 'g'} ScoreTransform: 'none' Beta: [34x1 double] Bias: -3.7100 Lambda: 0.0028 Learner: 'svm'属性,方法

沙普利值与介入分布

使用kernelSHAP算法计算第一次观测的Shapley值,该算法使用介入分布进行值函数评价。您不必指定“方法”价值的,因为“interventional-kernel”是默认的。

queryPoint = X (1);explainer1 =沙普利(Mdl X,“QueryPoint”, queryPoint);

对于一个分类模型,沙普利使用每个类的预测类得分计算Shapley值。的方法绘制预测类的Shapley值情节函数。

情节(explainer1)

图中包含一个轴对象。标题为Shapley Explanation的axes对象包含一个类型为bar的对象。

水平条形图显示了10个最重要变量的Shapley值,按它们的绝对值排序。每个Shapley值解释了由于相应的变量,查询点的分数与预测类的平均分数之间的偏差。

对于线性模型,假设特征彼此独立,可以计算正类(或第二类)的介入性Shapley值Mdl。一会‘g’)的估计系数(Mdl。β[1]

linearSHAPValues = (Mdl.Beta。”* (queryPoint-mean (X)));

创建一个表,其中包含从kernelSHAP算法计算出的Shapley值和从系数得到的值。

t =表(explainer1.ShapleyValues.Predictor explainer1.ShapleyValues.g linearSHAPValues,...“VariableNames”, {“预测”“KernelSHAP价值”“LinearSHAP价值”})
t =34×3表预测器KernelSHAP值LinearSHAP值_________ ________________ ________________ "x1" 0.28789 0.28789 "x2" 1.9017e-15 0" x3" 0.20822 0.20822 "x4" -0.01998 -0.01998 "x5" 0.20872 0.20872 "x6" -0.076991 -0.076991 "x7" 0.19188 0.19188 "x8" -0.64386 -0.64386 "x9" -0.030049 -0.030049 "x11" -0.23132 -0.23132 "x12" 0.14220.1422 "x13" -0.045973 -0.045973 "x14" -0.29022 -0.29022 "x15" 0.21051 0.21051 "x16" 0.13382 0.13382⋮

条件分布的Shapley值

通过对kernelSHAP算法的扩展计算第一次观测的Shapley值,该算法使用条件分布进行值函数计算。

explainer2 =沙普利(Mdl X,“QueryPoint”queryPoint,“方法”“conditional-kernel”);

绘制Shapley值。

情节(explainer2)

图中包含一个轴对象。标题为Shapley Explanation的axes对象包含一个类型为bar的对象。

这两种算法为10个最重要的变量确定了不同的集合。只有两个变量的混合体是两个集合共有的。

计算Shapley值的复杂性

如果观测值或特征的数量很大,则Shapley值的计算成本会增加。

大量观测

计算值函数(v),如果你有大量的观测数据,例如超过1000个,那么在计算上是很昂贵的。为了更快的计算,当你创建一个沙普利对象,或通过指定来并行计算Shapley值“UseParallel”作为真正的方法计算值时沙普利适合函数。并行计算需要并行计算工具箱™。

大量特性

计算求和方程1所有可用的子集年代什么时候会在计算上昂贵(特征的数量)很大。要考虑的子集总数为2.属性指定Shapley值计算的最大子集数目,而不是计算所有子集的总和“MaxNumSubsets”名称-值参数。沙普利根据权重值选择要使用的子集。子集的权重与1/(总和的分母)成比例,对应于1除以二项式系数: 1 / 1 | 年代 | .因此,具有高或低基数值的子集具有较大的权值。沙普利首先包含权重最高的子集,然后根据它们的权重值降序包含其他子集。

降低计算成本

这个例子展示了当您有大量的观测数据和特征时,如何减少Shapley值的计算成本。

火车回归合奏

加载示例数据集NYCHousing2015

负载NYCHousing2015

该数据集包括10个变量的55246个观察值,其中包含2015年纽约市房产销售的信息。本例使用这些变量来分析销售价格(SALEPRICE).

预处理数据集。转换datetime阵列(SALEDATE)到月数。

NYCHousing2015。SALEDATE=month(NYCHousing2015.SALEDATE);

训练回归集合。

Mdl = fitrensemble (NYCHousing2015,“SALEPRICE”);

使用默认选项计算Shapley值

计算第一次观测的所有预测变量的Shapley值。计算Shapley值所需的时间抽搐toc

tic explainer1 = shapley(Mdl,“QueryPoint”NYCHousing2015 (:));
警告:计算可能很慢,因为预测器数据有超过1000个观测。使用较小的训练集样本,或指定“UseParallel”为真值,以实现更快的计算。
toc
运行时间为492.365307秒。

正如警告消息所指出的,计算可能会很慢,因为预测器数据有超过1000个观测数据。

指定选项以降低计算成本

沙普利当您有大量的观察或特性时,提供几个选项来减少计算成本。

  • 大量的观察-使用较小的样本的训练数据,并通过指定并行计算Shapley值“UseParallel”作为真正的

  • 大量的特性-指定“MaxNumSubsets”参数Name-value限制计算中包含的子集的数量。

使用较小样本的训练数据和并行计算选项再次计算Shapley值。另外,将子集的最大数目指定为2 ^ 5

NumSamples = 5 e2;台= datasample (NYCHousing2015 NumSamples,“替换”、假);Mdl,Tbl,“QueryPoint”NYCHousing2015 (1:)...“UseParallel”,真的,“MaxNumSubsets”、2 ^ 5);
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:6)。
toc
运行时间为52.183287秒。

指定附加选项可以减少计算Shapley值所需的时间。

参考文献

Lundberg, Scott M和S. Lee。“解释模型预测的统一方法”神经信息处理系统研究进展30(2017): 4765 - 774。

Aas, Kjersti, Martin。朱勒姆和安德斯·洛兰德。解释特征依赖时的个人预测:对Shapley值的更精确的近似arXiv: 1903.10464(2019).

库马尔,I. Elizabeth, Suresh Venkatasubramanian, Carlos Scheidegger和Sorelle Friedler。以shapley值为基础的解释作为特征重要性度量的问题arXiv: 2002.11097(2020).

另请参阅

||