黑盒模型事后归因解析:LIME 方法
摘要:LIME 的算法需要输入想要解释的预测样本和已经训练好的复杂模型,基于表格数据,算法步骤如下:。本文介绍了 LIME 作为一种复杂模型事后解释器,如何拟合局部代理模型,以及如何挑选全局样本,达到模型局部解释和整体解释的目的。
<div>
机器学习模型可解释性方面的研究,在近两年的科研会议上成为一个相当热门的话题。随着机器学习应用越来越广泛,大家不再仅仅满足于模型的效果,而是希望对模型效果背后的原因有更好的理解。构建能让用户理解的模型正变得越来越重要,在医疗、金融和司法等高风险应用中,这一点尤其明显。可解释机器学习是索信达金融 AI 实验室的重点研究方向之一,我们希望通过一系列文章介绍不同解释模型的方法,并分享可解释机器学习理论结合实际业务的应用和思考。
1. LIME 背景
现今的数据挖掘领域中,机器学习模型被广泛使用。传统的机器学习模型更关注预测效果,追求更高预测精准度和更快的训练速度。然而,机器学习模型的“黑盒”属性导致了其内部工作原理难以被理解,输入与输出之间往往存在极其复杂的函数关系。当模型应用到银行业等金融领域时,透明度和可解释性是机器学习模型是否值得信任的重要考核标准。我们需要告诉业务人员如何营销,告诉风控人员如何识别风险点,而不仅仅告诉他们预测的结果。一个预测表现接近完美、却属于黑盒的人工智能模型,会容易产生误导的决策,还可能招致系统性风险,导致漏洞被攻击,因而变得不安全可靠。例如在银行消费者贷款领域,美国联邦政府颁布的平等信贷机会法(ECOA)明确要求各家银行在拒绝每个消费者申请信用卡时,必须明确说明拒绝的理据。因此,应用复杂的机器学习模型时,我们需要构造一个“解释器”,对模型的预测结果进行事后归因解析,而 LIME 便是一个很好的事后解释方法。2. 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 是一种事后解释方法。3. 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 等方法。4. Submodular Pick
虽然 LIME 可以实现对单个预测值的事后解释,提高了大家对黑箱模型的理解,但要看变量对模型预测值的整体影响,还需要进行全局解释。当我们用数据集做特征变量的全局解释时,需要挑选具有代表性且多元化的样本。一般的随机挑选方法(Random pick) 得到的效果一般般,而且也不太稳定。论文中提出次模挑选(Submodular Pick)来得到具有代表性的样本集。4.1 什么是 submodular?
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})$.4.2 Submodular pick(SP) 的步骤
当使用 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 用来解释更多的实例, 属于重要的可解释特征。5. 案例展示
我们以比特币的数据集为例,先使用 XGBoost 回归模型预测比特币价格,再用 LIME 做事后解释。用到数据集中的 15 个变量作为特征,响应变量为比特币价格。下图展示了部分的数据集结构。fromlimeimportsubmodular_pick sp_obj = submodular_pick.SubmodularPick(explainer, train, reg.predict, sample_size=10, num_features=10, num_exps_desired=1) [exp.as_pyplot_figure()forexpinsp_obj.sp_explanations]