阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

黑盒模型事后归因解析:LIME 方法

  • 2020-04-26
  • 本文字数:5245 字

    阅读完需:约 17 分钟

黑盒模型事后归因解析:LIME方法

机器学习模型可解释性方面的研究,在近两年的科研会议上成为一个相当热门的话题。随着机器学习应用越来越广泛,大家不再仅仅满足于模型的效果,而是希望对模型效果背后的原因有更好的理解。构建能让用户理解的模型正变得越来越重要,在医疗、金融和司法等高风险应用中,这一点尤其明显。可解释机器学习是索信达 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 是一种事后解释方法。



LIME 可处理不同类型的输入数据,如表格数据(Tabular Data)、图像数据(Image Data)或文本数据(Text Data)。对于表格数据,如用银行客户行为数据预测理财产品销售,训练完复杂模型后可以用 LIME 得到哪些特征影响理财产品销售;图像数据,如识别图片中的动物是否为猫,训练完复杂模型后可以用 LIME 得到图片中的动物被识别为猫是因为哪一个或几个像素块;文本数据,如识别短信是否为垃圾短信,训练完复杂模型后可以用 LIME 得到一条信息被判断为垃圾短信是因为哪一个或几个关键词。

3. LIME 原理

LIME 的算法需要输入想要解释的预测样本和已经训练好的复杂模型,基于表格数据,算法步骤如下:


(1)预测样本附近随机采样:对于连续型(continuous)特征,LIME 在预测样本点附近用一个标准正态分布 N(0,1)来产生指定个数(代码中设置的 num_samples)的样本;而对于类别型(categorical)特征,则根据训练集的分布进行采样,当新生成样本的类别型特征与预测样本相同时,该类别型特征取值为 1,否则取值为 0;假设,想要解释的预测点为 ,有 p 个特征,其中第 i 个特征为连续型特征,取值为为 该特征在训练集中的标准差;生成的 N 个样本为, 通过标准正态分布对应生成一个随机数(对应第 k 个新生成样本的第 i 个特征),则新生成的第 k 个样本的第 i 个特征的取值为


(2)对新生成的样本打标签:将新生成的样本放入已经训练好的复杂模型中训练,得到对应的预测结果;设训练好的复杂模型为,则新生成的的样本预测结果为


(3)计算新生成的样本与想要解释的预测点的距离并得到权重:新生成的样本距离想要解释的预测点越近,我们认为这些样本能够更好的解释预测点,因此需要赋予更高的权重。我们用指数核函数(exponential kernal)去定义新生成样本的权重,设为, 此处 为某个新生成的样本到的距离函数, 则为超参数。从公式中可以看到,距离越近, 的值越大。


(4)筛选用来解释的特征,拟合线性模型:设想要用来解释的特征有 个,则用来解释的特征为,此处 不一定相等,只是用来表示从 p 个特征中选取 个作为解释;设用来解释的线性模型为 ,为了求出线性模型的系数,我们用一个加权平方损失构造损失函数:, 找出使得损失最小的 ,而即为我们用来解释的特征的线性组合;而对于个特征的选择,代码中提供 forward selection、highest weights、lasso_path 等方法。

4. Submodular Pick

虽然 LIME 可以实现对单个预测值的事后解释,提高了大家对黑箱模型的理解,但要看变量对模型预测值的整体影响,还需要进行全局解释。当我们用数据集做特征变量的全局解释时,需要挑选具有代表性且多元化的样本。一般的随机挑选方法(Random pick)得到的效果一般般,而且也不太稳定。论文中提出次模挑选(Submodular Pick)来得到具有代表性的样本集。

4.1 什么是 submodular?

submodular(次模)实际上是对“边际效用递减”这个说法的形式化。对于一个集合函数, 如果有一个集合 V,满足, 那么在中增加一个元素所增加的收益要小于等于在的子集中增加一个元素所增加的收益。更清晰地表示:对于函数而言,若, 且,则


在事后解释领域里, 我们想找到最具有代表性的样本集,就可以借鉴次模的思想,在集合中不断加入增益最大的样本。但是如何寻找到这样的样本呢?在计算机领域里,次模函数有个性质,俗称 NP-hard,即对于一个次模函数, 如果给定一个限制条件,找出一个满足条件的集合,使得值最大。


贪心算法常用于解决上述的 NP-hard 问题。迭代地在解集合中加入增益最大且满足条件的元素,即第 i 次迭代时解 , 其中增益为.

4.2 Submodular pick(SP) 的步骤

当使用 SP-LIME 时,首先得设定好 sample_size, 也就是次模挑选需要的样本数目。假定我们从数据集中挑选 n 个样本来做事后解释,每个样本是维的,是用来做事后解释的特征变量个数。基于该样本集 在解释器中得到的解释,我们构建了的解释矩阵


解释矩阵中的每一个元素, 代表第个样本的第个可解释成分的局部重要性。鉴于使用的是线性模型当代理模型,解释器中对每一个样本 都会计算出对应的线性解释, 是经过标准化之后的。在这里定义


为了度量解释空间中第 j 个特征的全局重要性,根据上文计算好的解释矩阵,定义了重要性函数 , 。直观地,我们想要令选取的特征可以解释不同的样本,使重要性函数可以取更高的值。


在下图中,我们展示了一个例子。假定的二元矩阵,即 5 个样本,每个样本是 5 维的,每个元素要么取 0 要么取 1。重要性函数给特征 f2 打的分比特征 f1 打的分要高, 所以特征 f2 用来解释更多的实例, 属于重要的可解释特征。



为了挑选可以覆盖最重要特征的样本,解释集一定不能冗余,即避免选取有相似解释性的实例。比如,第二个样本第三个样本的事后解释特征相同,所以我们只用二选一即可。


我们将非冗余的覆盖程度用下面的公式来计算。定义覆盖函数, 给定, 计算至少出现在集合中的一个样本的特征的重要性。


挑选的问题由如下公式定义,找到集合, 满足,可以使得达到最大。


集合函数是次模函数, 上文提出贪心算法来解决挑选 n 个样本的问题。其可以迭代地增加对函数有最高边际覆盖增益的样本,并以常数的速度近似到最优。


算法展示了具体的挑选流程,我们称之为 submodular pick (次模挑选)。


5. 案例展示

我们以比特币的数据集为例,先使用 XGBoost 回归模型预测比特币价格,再用 LIME 做事后解释。用到数据集中的 15 个变量作为特征,响应变量为比特币价格。下图展示了部分的数据集结构。



用 XGBoost 对数据集做回归预测,发现该模型的高达 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_picksp_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 产生了相对大的负向的影响。排名靠后的特征变量影响相对较小。

6.结语

本文介绍了 LIME 作为一种复杂模型事后解释器,如何拟合局部代理模型,以及如何挑选全局样本,达到模型局部解释和整体解释的目的。更详细的介绍参考《“Why Should I Trust You?” Explaining the Predictions of Any Classififier》原文。为了演示 LIME 方法的效果,我们以一个比特币实际数据为例,对现下流行的 XGBoost 模型进行了 LIME 局部解释和全局解释。

7.参考文档

[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)


[2] https://github.com/marcotcr/lime


原文链接:


https://mp.weixin.qq.com/s/qkWGKrAuDQqmNl-vxTekXg


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-04-26 18:275732

评论

发布
暂无评论
发现更多内容

Serverless,引领云计算下一个阶段

华为云开发者联盟

MySQL 云计算 Serverless 华为云 FunctionGraph

潘娟:从女工程师转变成开源商业化Infra公司创始人,痛并快乐着

腾源会

数据库 开源 Apache ShardingSphere 开源商业化

如何自学编程?

DaemonStone

程序员 程序员人生 自学编程 经验总结 大学生毕业

模块五

浮生若梦

InnoDB 引擎了解(双写机制)

Ayue、

MySQL 数据库 1月月更

架构实战营 模块五作业

Jude

架构实战营

SpringBoot 实战:加载和读取资源文件

看山

classpath SpringBoot 2 1月月更

架构实战营:模块三作业

Poplar

「架构实战营」

最新版:Apache Pulsar 针对 Log4j 漏洞解决方案

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

基于Javaweb,Mysql图书管理系统

叫练

Apache Pulsar 针对 Log4j2 漏洞 (CVE-2021-44228) 的解决方案

Apache Pulsar

开源 云原生 中间件 Apache Pulsar log4j2

微博评论的高性能高可用计算架构设计

皓月

「架构实战营」

阿里云开源业内首个应用多活项目 AppActive,与社区共建云原生容灾标准

阿里巴巴云原生

阿里云 开源 高可用 云原生 容灾

Spring 都在用的技术,你确定不过来看看?2️⃣

XiaoLin_Java

1月月更

30人的产研团队如何高效协同?

阿里云云效

阿里云 DevOps 云原生 研发管理 研发团队

让创新触手可及,阿里云容器服务 ACK 发行版开放免费下载

阿里巴巴云原生

阿里云 云原生 容器服务 ACK

使用 VSCode 调试 Electron 主进程代码

编程三昧

Electron 1月月更

面试突击17:HashMap除了死循环还有什么问题?

王磊

外网打点,内网渗透

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

架构训练营模块五作业

沈益飞

架构训练营 架构师训练营 4 期

如何真正学习Go 语言[翻译]

宇宙之一粟

Go 学习方法 Go 语言 1月月更

【架构师训练营】模块五作业

樰巳-堕~Horry

架构实战营 「架构实战营」

「架构实战营」模块五《如何设计业务高性能高可用计算架构》作业

DaiChen

作业 模块五 「架构实战营」

黑客实现ARP欺骗

喀拉峻

黑客 网络安全 WEB安全

一个cpp协程库的前世今生(二十一)协程重分配

SkyFire

c++ cocpp

【重构前端知识体系之HTML】讲讲对HTML5的一大特性——语义化的理解

归子莫

html html5 前端 语义化 1月月更

ReactNative进阶(二十五):ScrollView 滚动视图组件详解

No Silver Bullet

React Native ScrollView 1月月更

算法大佬Carl的面试简历长啥样?同款模板让你脱胎换骨!

博文视点Broadview

Jenkins Pipeline: 并发执行

夏兮。

jenkins pipeline jenkins高级用法 parallel

19 Prometheus之告警的艺术

穿过生命散发芬芳

Prometheus 1月月更

Spring中的单例模式使用

JavaEdge

1月月更

黑盒模型事后归因解析:LIME方法_AI&大模型_索信达控股_InfoQ精选文章