在这一部分中咱们所要展示的技术,能够为非线性、非单调的响应函数生成解释。咱们能够把它们与前两部分提到的技巧结合起来,增长全部种类模型的可解释性。实践者极可能须要使用下列加强解释性技巧中的一种以上,为他们手中最复杂的模型生成使人满意的解释性描述。算法
图14. 为了解释复杂神经网络而使用代理模型的示意图api
代理模型是一种用于解释复杂模型的简单模型。最多见的创建方法是,对原始输入和复杂模型给出的预测值创建简单线性回归或者决策树模型。代理模型中所展现的系数、变量重要性、趋势以及交互做用,是复杂模型内部机制的一种体现。不过,几乎没有理论依据可以保证简单的代理模型可以以高精度表达出更复杂的模型。网络
代理模型适用于何种尺度的可解释性?app
通常而言,代理模型是全局性的。一个简单模型的全局可解释特性会用于解释一个更复杂模型的全局特性。不过,咱们也没法排除代理模型对复杂模型条件分布的局部拟合能力,例如先聚类,再用自变量拟合预测值、拟合预测值的分位点、判断样本点属于哪一类等等,可以体现局部解释性。由于条件分布的一小段倾向因而线性的、单调的,或者至少有较好的模式,局部代理模型的预测精度每每比全局代理模型的表现更好。模型无关的局部可解释性描述(咱们会在下一小节介绍)是一种规范化的局部代理模型建模方法。固然,咱们能够把全局代理模型和局部代理模型一块儿使用,来同时得到全局和局部的解释性。机器学习
代理模型可以帮助咱们解释何种复杂程度的响应函数?函数
代理模型可以有助于解释任何复杂程度的机器学习模型,不过可能它们最有助于解释非线性、非单调的模型。工具
代理模型如何帮咱们提升对数据的理解?学习
代理模型能够针对复杂模型的内部机制向咱们提供一些洞见,所以能提升咱们对数据的理解。人工智能
代理模型如何让模型更可信赖?spa
当代理模型的系数、变量重要性、趋势效应和交叉效应都符合人类的领域知识,被建模的数据模式符合合理预期时,模型的可信度会得以提高。当数据中存在轻微的或者人为的扰动时,或者数据来自于咱们感兴趣领域的数据模拟,又或者数据随着时间改变时,若是结合敏感性分析进行检验发现,对于模型的解释是稳定的,而且贴合人类领域经验,符合合理预期,那么模型的可信度会得以提高。
图15. 对LIME流程的一个描述,其中使用了加权线性模型帮助咱们解释一个复杂的神经网络是如何作出某个预测的
LIME是围绕单个样本创建局部代理模型的一种方法。它的主旨在于厘清对于特定的几个样本,分类器是如何工做的。LIME须要找到、模拟或者产生一组可解释的样本集。使用这组已经被详细研究过的样本,咱们可以解释机器学习算法获得的分类器是如何对那些没有被仔细研究过的样本进行分类的。一个LIME的实现能够遵循以下流程:首先,使用模型对这组可解释的数据集进行打分;其次,当模型对另外的数据进行分类时,使用解释性数据集与另外的数据点的距离进行加权,以加权后的解释性数据集做为自变量作L1正则化线性回归。这个线性模型的参数能够用来解释,另外的数据是如何被分类/预测的。
LIME方法一开始是针对图像、文本分类任务提出的,固然它也适用于商业数据或者客户数据的分析,好比对预测客户群违约或者流失几率的百分位点进行解释,或者对已知的成熟细分市场中的表明性客户行为进行解释,等等。LIME有多种实现,我最多见的两个,一个是LIME的原做者的实现,一个是实现了不少机器学习解释工具的eli5包。
LIME提供的可解释性的尺度如何?
LIME是一种提供局部可解释性的技术。
LIME能帮助咱们解释何种复杂程度的响应函数?
LIME有助于解释各类复杂程度的机器学习模型,不过它可能最适合解释非线性、非单调的模型。
LIME如何帮咱们提升对模型的理解?
LIME提供了咱们对重要变量的洞察力,厘清这些变量对特定重要样本点的影响以及呈现出的线性趋势。对极端复杂的响应函数更是如此。
LIME如何让模型更加可信?
当LIME发现的重要变量及其对重要观测点的影响贴合人类已有的领域知识,或者模型中体现的数据模式符合人类的预期时,咱们对模型的信心会获得加强。结合下文将会提到的最大激发分析,当咱们能明显地看到,类似的数据被类似的内部机制处理,全然不一样的数据被不一样的内部机制处理,在对多个不一样的样本使用不一样处理方式上,可以保持一向性。同时,在数据存在轻微扰动时,数据是由咱们感兴趣的场景模拟得出时,或者数据随时间改变时,LIME能够被视为是敏感性分析的一种,帮助咱们检查模型是否依然可以保持稳定,是否依然贴合人类的领域知识,以及数据模式是否依然符合预期。
图16. 不一样输入数据激发神经网络中不一样神经元的示意图
在最大激发分析中,能够找到或者模拟出这样的例子,它们老是会对特定的神经元、网络层、滤波器(filter)、决策树集成模型中的某棵树进行大量激发。像第二部分所提到的单调性约束同样,最大激发分析在实战中,是一种很常见的与模型相关的解释性分析技术。
对于特定的一组样本或者一类类似的样本,观察它们可以对响应函数的哪一部分进行最大程度的激发(对于神经元而言是激发强度最大,对于树模型而言是残差最低,两者均可以算最大激发),这种最大分析厘清了复杂模型的内部工做机制。同时,若是不一样类型的样本持续激发模型中相同的部分,那么这种分析也能够发现交叉效应。
图16描绘了一种比较理想化的状况:一个好的客户和一个欺诈型客户分别以高强度激发了两组不一样的神经元。红圈表示两类输入数据所激发的强度排名前三的神经元。对于这两类数据而言,最大激发的神经元不一样,表示着对于不一样类型的样本,神经网络的内部结构会以不一样的方式对其进行处理。若是对不少不一样子类型的好客户和欺诈型客户而言这种模式依然存在,那么这就是一种很强烈的信号,意味着模型内部结构是稳定的、可靠的。
最大激发分析适用于哪一种尺度的可解释性?
最大激发分析在尺度上是局部性的,由于它刻画了一个复杂响应函数的不一样部分是如何处理特定的一个或者一组观测样本的。
最大激发分析可以帮助咱们解释何种复杂程度的响应函数?
最大激发分析可以解释任意复杂的响应函数,不过它可能最适合于解释非线性、非单调的模型。
最大激发分析如何让咱们更好的理解数据和模型?
最大激发函数经过像咱们展现复杂模型的内部结构,提升咱们对数据、模型的理解。
最大激发分析如何让模型变的更加可信?
上文讨论过的LIME有助于解释在一个模型中对条件分布的局部进行建模并预测。最大激发分析能够强化咱们对模型局部内在机制的信心。两者的组合能够为复杂的响应函数创建详细的局部解释,它们是很棒的搭配。使用最大激发分析,当咱们能明显地看到,类似的数据被类似的内部机制处理,全然不一样的数据被不一样的内部机制处理,对多个不一样的样本使用不一样处理方式这一点保持一向性,模型中发现的交互做用贴合人类已有的领域知识,或者符合人类的预期,甚至把最大激发分析当作一种敏感性分析来用,以上的种种都会让咱们对模型的信心得以提升。同时,在数据存在轻微扰动时,数据是由咱们感兴趣的场景模拟得出时,或者数据随时间改变时,最大激发分析能够帮咱们检查模型对于样本的处理是否依然保持稳定。
图17. 一个变量的分布随着时间而改变的示意图
敏感性分析考察的是这样一种特性:给数据加上人为的扰动,或者加上模拟出的变化时,模型的行为以及预测结果是否仍然保持稳定。在传统模型评估之外,对机器学习模型预测进行敏感性分析多是最有力的机器学习模型验证技术。微小地改变变量的输入值,机器学习模型可能会给出全然不一样的预测结论。在实战中,由于自变量之间、因变量与自变量之间都存在相关性,有很多线性模型的验证技巧是针对回归系数的数值稳定性的。 对从线性建模技术转向机器学习建模技术的人而言,少关注一些模型参数数值不稳定性的状况,多关心一些模型预测的不稳定性,这种作法可能还算是比较谨慎。
若是咱们能针对有趣的状况或者已知的极端状况作一些数据模拟,敏感性分析也能够基于这些数据对模型的行为以及预测结果作一些验证。在整篇文章中说起或者未曾说起的很多技巧,均可以用来进行敏感性分析。预测的分布、错误比率度量、图标、解释性技巧,这些方法均可以用来检查模型在处理重要场景中的数据时表现如何,表现如何随着时间变化,以及在数据包含人为损坏的时候模型是否还能保持稳定。
敏感性分析适用于什么尺度的可解释性?
敏感性分析能够是一种全局性的解释技术。当使用单个的像代理模型这种全局性解释技术时,使用敏感性分析能够保证,就算数据中存在轻微扰动或者有人为形成的数据缺失,代理模型中所存在的主要交叉效应依然稳定存在。
敏感性分析也能够是一种局部性的解释技术。例如,当使用LIME这种局部性解释技术时,它能够判断在宏观经济承压的条件下,为某个细分市场的客户进行授信时,模型中使用的重要变量是否依然重要。
敏感性分析可以帮咱们解释何种复杂程度的响应函数?
敏感性分析能够解释任何复杂程度的响应函数。不过它可能最适合于解释非线性的,或者表征高阶变量交叉特征的响应函数。在这两种状况下,对自变量输入值的轻微改变均可能引发预测值的大幅变更。
敏感性分析如何帮助咱们更好的理解模型?
敏感性分析经过向咱们展示在重要的场景下,模型及其预测值倾向于如何表现,以及这种表现随时间会如何变化。所以敏感性分析能够增强咱们对模型的理解。
敏感性分析如何提升模型的可信可信度?
若是在数据轻微改变或者故意受损时,模型的表现以及预测输出仍然能表现稳定,那么稳定性分析就能够提升咱们对模型的信任。除此之外,若是数据场景受到外来影响,或者数据模式随时间发生变化时,模型仍然可以符合人类的领域知识或者预期的话,模型的可信度也会上升。
对于非线性、非单调的响应函数,为了量化衡量模型中自变量和因变量的关系,每每只能度量变量重要性这一种方法能够选。变量重要性度量难以说明自变量大概是往哪一个方向影响因变量的。这种方法只能说明,一个自变量跟其余自变量相比,对模型影响的相对强弱。
图18. 在决策树集成模型中,对变量重要性的描绘
在基于树的模型中使用变量重要性度量是一种常见作法。如图18所示,一种拍脑壳的变量重要性规则是,同时考虑树模型中一个变量用于分叉的所在深度和出现的频率:自变量所在分叉位置越高(译者注:在越浅的层数出现),或者自变量在树中出现的频率越高,那么它就越重要。对于单棵决策树来讲,每次这个自变量在某个节点成为最佳分叉使用的变量时,把对应的分支准则(Splitting Criterion)收益累加起来,就能够量化地判断这个变量究竟有多重要。对于梯度提高树的集成(译者注:Gradient boosted tree ensemble, 每每也称做GBDT)而言,能够先对单棵树计算变量重要性,而后再作聚合加总;咱们还有一种额外的度量,若是把单个自变量排除掉以后致使了模型精度的下降,那么这个精度差别能够表明自变量在模型中有多重要(Shuffling,洗牌法能够视做考察排除一个/一部分变量的效应,由于其余变量并无被洗掉)。对于神经网络而言,对咱们感兴趣的特定自变量的重要性度量,通常来讲是它所对应的模型参数绝对值的加总。全局性的变量重要性度量技术每每因模型而异,实践者们要特别注意,变量重要性的简单度量可能会偏向于那些取值范围较大,包含类别数目较多的那些变量。
图19. LOCO方法的示意图
最近某篇文章的预印版本给出一种局部性的、模型无关的、经过模型平均精度降低的方式来考察变量重要性的度量,称为『去除某一自变量的分析法』(Leave-One-Covariate-Out),简称LOCO。最开始LOCO是用于回归模型的,不过LOCO的大致思想是无关于模型的,并且能够有多重不一样的实现。能够按照以下流程实现LOCO:对训练集或验证集中的每一行以及每个变量(自变量)进行局部性的重要性评分。在此以外,每个变量被设置为缺失值、零值、平均值或者其余值域中的值,来把它在预测时起到的效果消除掉。对预测精度有最大绝对影响的自变量就是对那一行预测时的最重要变量,同时,能够对每一行中全部变量对预测的影响大小进行排序。LOCO还能为每个变量计算它们对整个数据集精度的平均影响,给出全局性的变量重要性度量,甚至还能给出这些全局变量重要性度量的置信区间。
变量重要性度量适用于哪一种尺度的可解释性?
通常来讲变量重要性度量方法提供的解释性是全局的;不过LOCO方法能够为数据集中的每一行或者新来的数据提供局部的变量重要性度量。
变量重要性度量可以帮咱们解释何种复杂程度的响应函数?
变量重要性度量对于非线性、非单调的响应函数而言是最有效的;不过它们能够普遍应用于各类机器学习习得的响应函数上。
变量重要性度量如何帮咱们更好的理解模型?
变量重要性度量让咱们对模型中最具影响力的变量及其影响力顺序有所了解,于是提升了咱们对模型的理解。
变量重要性度量如何让模型更加可信?
若是变量重要性度量的结果可以贴合人类领域知识、符合人类预期,在数据存在轻微扰动或人为干扰的状况下仍然保持稳定,在数据随时间变化或者经由模拟获得时变更幅度能够接受的话,那么它就可以让模型更加值得采信。
图20. 单棵决策树中,对于某同样本点的预测,以高亮的决策路径显示
几种『平均树』的解释方法已经提出了几年了,不过名为『决策树模型解释器』的简单开源工具最近几个月才开始流行起来。决策树模型解释器把决策树、随机森林给出的预测进行分解,表示成为全局平均值(bias)和各个自变量带来的贡献之和。决策树模型解释器是专门为决策树设计的算法。图20显示了如何将决策树中的决策路径分解成为全局平均值以及各个自变量的贡献。图中给出了某个特定的样本的决策路径(决策树模型不只能够输出模型中的平均值和自变量的贡献值,也能输出对于某个样本而言的平均值以及自变量的贡献值)eli5包中也有一个决策树解释器的实现。
决策树解释器适用于哪一种尺度的模型可解释性?
当决策树解释器给出在整棵决策树或者整个随机森林中各个自变量的平均贡献时,它的解释性就是全局的。当它用于解释某些特定的预测时,它的解释性就是局部的。
决策树解释器可以解释何种复杂程度的响应函数?
决策树解释器每每是用于解释由决策树、随机森林模型构建的非线性、非单调响应函数的。
决策树解释器如何提升咱们对于模型的理解?
对于决策树以及随机森林模型中的自变量,决策树解释器经过展现它们平均的贡献,并对它们进行排序,来增进咱们对模型的理解。
决策树解释器如何让模型变得更加可信?
若是决策树解释器所展示的结果可以贴合人类领域知识、符合人类预期,在数据存在轻微扰动或人为干扰的状况下仍然保持稳定,在数据随时间变化或者经由模拟获得时变更幅度能够接受的话,那么它就可以让模型更加值得采信。
在最近几个月里,当个人朋友和同事们据说我要写这篇文章后,他们用邮件、短信、推特、Slack提醒我这方面新工做的速度简直是有增无减。如今,我极可能一天要看两个新的算法库、算法或者论文,我几乎不可能跟上这样一种节奏,把这些东西一股脑塞进这篇综述性的文章中。实际上,这篇文档总要有个尽头,必需要在某个地方戛然而止。因此咱们就在这里停下吧!我相信,为了让理解机器学习的可解释性更上一层楼,这篇文章提供了有效的总结,把这些解释性技巧从四个标准上进行分类:它们的尺度(局部性的,或者全局性的),它们所能解释响应函数的复杂程度,它们的应用领域(跟特定模型相关,或者跟特定模型无关),以及它们如何可以更易于理解、更容易受信任。同时,我相信,这篇文章涵盖了主流类型的技巧,尤为是那些领域应用型的或者是商业应用型的技巧。若是我有更充裕的时间可以无止尽的向本文添砖加瓦的话,我想要立刻给读者展示的是两个课题:一个课题是RuleFit(译者注:基于规则的集成模型工具,RuleFit3是R语言中的一个包),另外一个课题则是让深度学习更具可解释性的诸多工做,好比论文『学习深度k近邻表达』便是其中之一。针对这两个课题我本身固然是要深刻钻研下去的。
如此多的新进展纷至沓来,对于在这个课题(即机器学习可解释性)上作研究的人而言,这是个使人激动的时代。我但愿大家可以在这篇文章中发现有用的信息。由于这个领域能够把机器学习和人工智能以更有效、更透明的方式传达给用户和客户,我但愿那些跟我处于统一领域的工做者们可以像我同样,受到这些具备光明将来的革命性技术的鼓舞。