机器学习模型可解释性方面的研究,在近两年的科研会议上成为一个相当热门的话题。随着机器学习应用越来越广泛,大家不再仅仅满足于模型的效果,而是希望对模型效果背后的原因有更好的理解。构建能让用户理解的模型正变得越来越重要,在医疗、金融和司法等高风险应用中,这一点尤其明显。可解释机器学习是索信达金融AI实验室的重点研究方向之一,我们希望通过一系列文章介绍不同解释模型的方法,并分享可解释机器学习理论结合实际业务的应用和思考。
现今的数据挖掘领域中,机器学习模型被广泛使用。传统的机器学习模型更关注预测效果,追求更高预测精准度和更快的训练速度。然而,机器学习模型的“黑盒”属性导致了其内部工作原理难以被理解,输入与输出之间往往存在极其复杂的函数关系。当模型应用到银行业等金融领域时,透明度和可解释性是机器学习模型是否值得信任的重要考核标准。我们需要告诉业务人员如何营销,告诉风控人员如何识别风险点,而不仅仅告诉他们预测的结果。一个预测表现接近完美、却属于黑盒的人工智能模型,会容易产生误导的决策,还可能招致系统性风险,导致漏洞被攻击,因而变得不安全可靠。例如在银行消费者贷款领域,美国联邦政府颁布的平等信贷机会法(ECOA)明确要求各家银行在拒绝每个消费者申请信用卡时,必须明确说明拒绝的理据。因此,应用复杂的机器学习模型时,我们需要构造一个“解释器”,对模型的预测结果进行事后归因解析,而LIME便是一个很好的事后解释方法。
LIME全称Local Interpretable Model-Agnostic Explanations,由Marco Ribeiro, Sameer Singh 和Carlos Guestrin三个人在2016年《“Why Should I Trust You?” Explaining the Predictions of Any Classififier》这一文中提出来的,是一种事后解释方法,即在建立模型之后所做的解释,其名称也很好的反应了它的特点:
Local: 基于想要解释的预测值及其附近的样本,构建局部的线性模型或其他代理模型;
Interpretable: LIME做出的解释易被人类理解。利用局部可解释的模型对黑盒模型的预测结果进行解释,构造局部样本特征和预测结果之间的关系;
Model-Agnostic: LIME解释的算法与模型无关,无论是用Random Forest、SVM还是XGBoost等各种复杂的模型,得到的预测结果都能使用LIME方法来解释;
Explanations: LIME是一种事后解释方法。
LIME可处理不同类型的输入数据,如表格数据(Tabular Data)、图像数据(Image Data)或文本数据(Text Data)。对于表格数据,如用银行客户行为数据预测理财产品销售,训练完复杂模型后可以用LIME得到哪些特征影响理财产品销售;图像数据,如识别图片中的动物是否为猫,训练完复杂模型后可以用LIME得到图片中的动物被识别为猫是因为哪一个或几个像素块;文本数据,如识别短信是否为垃圾短信,训练完复杂模型后可以用LIME得到一条信息被判断为垃圾短信是因为哪一个或几个关键词。
LIME的算法需要输入想要解释的预测样本和已经训练好的复杂模型,基于表格数据,算法步骤如下:
(1)预测样本附近随机采样:对于连续型(continuous)特征,LIME在预测样本点附近用一个标准正态分布N(0,1)来产生指定个数(代码中设置的num_samples)的样本;而对于类别型(categorical)特征,则根据训练集的分布进行采样,当新生成样本的类别型特征与预测样本相同时,该类别型特征取值为1,否则取值为0;假设,想要解释的预测点为$x^{*}=(x_1,x_2,\dots,x_p)$ ,有p个特征,其中第i个特征为连续型特征,取值为$x_i$ , $\sigma_{i}$为 该特征在训练集中的标准差;生成的N个样本为$z_k=(z_1,z_2,\dots,z_p), k=1,2,\dots ,N$, 通过标准正态分布$N(0,1)$对应生成一个随机数$a_{ki}$(对应第k个新生成样本的第i个特征),则新生成的第k个样本的第i个特征的取值为$a_{ki}*\sigma_{i}+x_{i}$。
(2)对新生成的样本打标签:将新生成的样本放入已经训练好的复杂模型中训练,得到对应的预测结果;设训练好的复杂模型为$f$,则新生成的的样本预测结果为$f(z_1),f(z_2),\dots,f(z_N)$。
(3)计算新生成的样本与想要解释的预测点的距离并得到权重:新生成的样本距离想要解释的预测点越近,我们认为这些样本能够更好的解释预测点,因此需要赋予更高的权重。我们用指数核函数(exponential kernal)去定义新生成样本的权重,设为$\Pi_{x^{*}}(z)=exp (\frac{-D(x^{*},z)^{2}}{\sigma^{2}})$, 此处$D(x^{*},z)$ 为某个新生成的样本到$x^{*}$的距离函数, $\sigma$则为超参数。从公式中可以看到,距离越近, $\Pi_{x^{*}}$的值越大。
(4)筛选用来解释的特征,拟合线性模型:设想要用来解释的特征有 $p^{’}$个,则用来解释的特征为$z^{’}=(z_{(1)},z_{(2)},\dots,z_{(p^{’})})$,此处$z_{(1)}$与$z_{1}$ 不一定相等,只是用来表示从p个特征中选取$p^{’}$ 个作为解释;设用来解释的线性模型为$g(z^{’})=\omega_{g}.z^{’}=\omega_{0}+\omega_{1}z_{(1)}+\dots \omega_{p^{’}}z_{(p^{’})}$ ,为了求出线性模型的系数,我们用一个加权平方损失构造损失函数:$\mathcal{L}(f,h,\Pi_{x^{*}})=\sum_{k=1}^{N} \Pi_{x^{*}}(z_{k})(f(z_{k})-g(z^{’}_{k}))^2$, 找出使得损失最小的$\omega_{g}$ ,而$\omega_{g}.z^{’}$即为我们用来解释的特征的线性组合;而对于$p^{’}$个特征的选择,代码中提供forward selection、highest weights、lasso_path等方法。
虽然LIME可以实现对单个预测值的事后解释,提高了大家对黑箱模型的理解,但要看变量对模型预测值的整体影响,还需要进行全局解释。当我们用数据集做特征变量的全局解释时,需要挑选具有代表性且多元化的样本。一般的随机挑选方法(Random pick)得到的效果一般般,而且也不太稳定。论文中提出次模挑选(Submodular Pick)来得到具有代表性的样本集。
submodular(次模)实际上是对“边际效用递减”这个说法的形式化。对于一个集合函数$f: 2^{V} \rightarrow R$, 如果有一个集合V,满足$V \subseteq S$, 那么在$V$中增加一个元素所增加的收益要小于等于在$V$的子集中增加一个元素所增加的收益。更清晰地表示:对于函数$f$而言,若$A \subseteq B \subseteq S$, 且$e \in S-B$,则$f(B \cup \lbrace e \rbrace)-f(B) \leq f(A \cup \lbrace e\rbrace)-f(A)$
在事后解释领域里, 我们想找到最具有代表性的样本集,就可以借鉴次模的思想,在集合$V$中不断加入增益最大的样本。但是如何寻找到这样的样本呢?在计算机领域里,次模函数有个性质,俗称NP-hard,即对于一个次模函数$f$, 如果给定一个限制条件,找出一个满足条件的集合$V$,使得$f(V)$值最大。
贪心算法常用于解决上述的NP-hard问题。迭代地在解集合$V$中加入增益最大且满足条件的元素,即第i次迭代时解 $V_i=V_{i-1} \cup \lbrace argmax_e \Delta (e|V_{i-1})\rbrace$, 其中增益为$\Delta(e|V_{i-1})=f(V_{i-1} \cup \lbrace e \rbrace)-f(V_{i-1})$.
当使用SP-LIME时,首先得设定好sample_size, 也就是次模挑选需要的样本数目。假定我们从数据集中挑选n个样本来做事后解释,每个样本是$d^{’}$维的,$d^{’}$是用来做事后解释的特征变量个数。基于该样本集 $X$在解释器中得到的解释,我们构建了$n \times d^{’}$的解释矩阵$W$。
解释矩阵$W$中的每一个元素$W_{ij}$, 代表第$i$个样本的第$j$个可解释成分的局部重要性。鉴于使用的是线性模型当代理模型,解释器中对每一个样本 $x_i$都会计算出对应的线性解释$g_i=\xi(x_i)=\alpha_0+\sum_{j=1}^{d^{’}}\alpha_j z_{ij}$, $z_{ij}$是经过标准化之后的$x_{ij}$。在这里定义$W_{ij}=|{g_{ij}}|=|\alpha_{j}z_{ij}|$。
为了度量解释空间中第j个特征的全局重要性,根据上文计算好的解释矩阵$W$,定义了重要性函数 $I_j=\sqrt{\sum_{i=1}^n W_{ij}}$, $j \in \lbrace1,2…d^{’}\rbrace$。直观地,我们想要令选取的特征可以解释不同的样本,使重要性函数可以取更高的值。
在下图中,我们展示了一个例子。假定$W$是$5\times 5$的二元矩阵,即5个样本,每个样本是5维的,每个元素要么取0要么取1。重要性函数$I$给特征f2打的分$I_2$比特征f1打的分$I_1$要高, 所以特征f2用来解释更多的实例, 属于重要的可解释特征。
为了挑选可以覆盖最重要特征的样本,解释集一定不能冗余,即避免选取有相似解释性的实例。比如,第二个样本第三个样本的事后解释特征相同,所以我们只用二选一即可。
我们将非冗余的覆盖程度用下面的公式来计算。定义覆盖函数$c(x)$, 给定$W$和$I$, 计算至少出现在集合$V$中的一个样本的特征的重要性。
$c(V,W,I)=\sum_{j=1}^{d^{’}} 1_{\exists i \in V:W_{ij} >0} I_j$
挑选的问题由如下公式定义,找到集合$V$, 满足$|V| \leq n$,可以使得$c(x)$达到最大。
$Pick(W,I)=argmax_{V,|V|\leq n} c(V,W,I)$
集合函数$c$是次模函数, 上文提出贪心算法来解决挑选n个样本的问题。其可以迭代地增加对函数$c$有最高边际覆盖增益的样本$i$,并以常数$1-1/e$的速度近似到最优。
算法展示了具体的挑选流程,我们称之为submodular pick (次模挑选)。
我们以比特币的数据集为例,先使用XGBoost回归模型预测比特币价格,再用LIME做事后解释。用到数据集中的15个变量作为特征,响应变量为比特币价格。下图展示了部分的数据集结构。
用XGBoost对数据集做回归预测,发现该模型的$R^2$高达97%。模型效果很好但是内在是黑箱模型。
因此接下来对XGBoost用LIME做事后解释。先产生一个LIME的解释器。
接着在测试集中任意挑选一个样本,设置用10个特征来开始解释。代码会输出线性代理模型的截距,系数,标准化之后的样本数据,用LIME得到的预测值以及XGB预测该样本的比特币价格。
上图是在Notebook中展示的LIME解释。左边是用默认的5000个抽样得到的样本,通过拟合线性回归模型计算出来的预测值,最小是355.03,最大是15423.96,2295.3则是XGBoost模型的预测值。中间的图是线性模型中10个特征变量对应的系数大小,positive代表系数为正,negative代表系数为负。右边是样本中对应10个特征的取值。
下面会输出对应的特征变量的局部解释图。
接下来尝试使用submodular pick 来挑选10个代表性的样本做全局解释。
from lime import submodular_pick
sp_obj = submodular_pick.SubmodularPick(explainer, train, reg.predict, sample_size=10, num_features=10, num_exps_desired=1)
[exp.as_pyplot_figure() for exp in sp_obj.sp_explanations]
从该全局解释图中可以看到,排名前三的特征变量BlockSizeTot, TradeFee,TradeVol对XGBoost预测结果有正向的影响,TransValue则是对XGBoost产生了相对大的负向的影响。排名靠后的特征变量影响相对较小。
本文介绍了LIME作为一种复杂模型事后解释器,如何拟合局部代理模型,以及如何挑选全局样本,达到模型局部解释和整体解释的目的。更详细的介绍参考《“Why Should I Trust You?” Explaining the Predictions of Any Classififier》原文。为了演示LIME方法的效果,我们以一个比特币实际数据为例,对现下流行的XGBoost模型进行了LIME局部解释和全局解释。
[1] Túlio Ribeiro, M., Singh, S., Guestrin, C.: “Why Should I Trust You?”: explaining the predictions of any classifier. In: ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2016)
领取专属 10元无门槛券
私享最新 技术干货