分位数回归
图9. 将分位数回归绘制为二维图表。感谢Patrick Hall以及H2O.ai团队友情提供图表
分位数回归让你能够使用传统可解释的线性模型对训练数据的分位点进行回归。这种回归允许你对不同的消费者市场细分或者不同账户投资组合行为细分,建立不同的模型,你可以使用不同的预测变量,也可以在模型中给予预测变量不同的回归系数。对低价值客户和高价值客户使用完全不同的两套预测变量和回归系数听上去还算合理,分位数回归对这种做法提供了一套理论框架。
回归的这些替代品提供的是全局性的还是局部性的可解释性?
回归的替代品往往能够提供全局可解释的函数,这些函数是线性的、单调的,根据其回归系数的大小以及其他传统回归的评估量、统计量,具备可解释性。
作为回归的替代品,这些回归函数的复杂程度如何?
这些回归函数一般来说是线性的、单调的函数。不过,使用GAM可能导致相当复杂的非线性响应函数。
这些技术如何帮我们提高对模型的理解?
比较少的模型假设意味着比较少的负担,可以不使用可能带来麻烦的多元统计显著性检验而进行变量选择,可以处理存在多重共线性的重要变量,可以拟合非线性的数据模式,以及可以拟合数据条件分布的不同分位点(这可不止是拟合条件分布),这些特性都可能让我们更准确的理解模型所表征的现象。
回归函数的这些替代品如何提高模型的可信度?
基本上,这些技巧都是值得信任的线性模型,只是使用它们的方式比较新奇。如果在你的线上应用中这些技巧带来了更精确的预测结果,那么我们就可以更加信任它们。
图10. 考虑交叉效应的线性模型与机器学习模型比较,并绘制评估图。感谢Patrick Hall以及H2O.ai团队提供图表
机器学习算法和传统线性模型的两个主要区别,一个是机器学习算法在预测时引入了很多变量的高阶交叉作用,并不直观,另一个是机器学习算法会产生非线性、非多项式、非单调甚至非连续的响应函数。
如果一个机器学习算法的预测表现碾压了传统线性模型,我们可以对自变量和目标变量建立一磕决策树。在决策树相邻层的分叉所使用的变量,一般来说会有强交叉效应。我们可以试着把这些变量的交叉效应加入到线性模型中,甚至树的连续几层所涉及到变量的高阶交叉效应也可以加入进来。如果一个机器学习算法较大地超越了传统线性模型,我们可以考虑把数据建模为分段线性的模型。为了要观察机器学习学到的响应函数如何受到一个变量各种取值的影响,或者要获得一些如何使用分段线性模型的洞见,可以使用GAM以及偏相关图。『多变量自适应回归样条法』,是一种可以自动发现条件分布中存在的复杂非线性部分,并对其不同区域分别进行拟合的统计手段。你可以尝试着直接使用多变量自适应回归样条法,对分段模型进行拟合。
面向机器学习模型的基准测试模型能提供全局性还是局部性的可解释性?
如果线性性和单调性能够得以保留,建模过程就会产生全局可解释的线性单调响应函数。如果使用分段函数,对机器学习模型建立基准测试可以放弃全局解释性,转而寻求局部可解释性。
面向机器学习模型的基准测试模型能够生成什么复杂度的响应函数?
如果谨慎、克制的建立面向机器学习模型的基准测试模型,并加以验证,对机器学习模型建立的基准模型可以维持像传统线性模型那样的线性性和单调性。然而,如果加入了太多的交叉效应,或者是在分段函数中加入了太多小段,将会导致响应函数依然极端复杂。
面向机器学习模型的基准测试模型如何提升我们对模型的理解?
这种流程把传统、可信的模型用出了新花样。如果使用类似GAM,偏相关图,多元自适应回归样条法这些技巧进行更进一步的数据探索,对机器学习模型建立相似的基准测试模型,可以让模型的可理解性大大提高,对数据集中出现的交叉效应以及非线性模式的理解也会加深。
面向机器学习模型的基准测试模型如何提高模型的可信度?
这种流程把传统、可信的模型用出了新花样。如果使用类似GAM,偏相关图,多元自适应回归样条法这些技巧进行更进一步的数据探索,通过建立面向机器学习模型的基准测试模型,能够让这些模型更准确地表达出数据集中我们感兴趣的那部分模式,从而提高我们对模型的信任程度。
图11. 在传统分析流程中,使用机器学习的几种可能的方式,以图形呈现。感谢Vinod Iyengar以及H2O.ai团队友情提供图形
相较于直接使用机器学习的预测来做分析决策,我们可以通过一些机器学习的技术,对传统分析的生命周期流程(比如数据准备加模型部署)进行一些增强,从而有潜力达到比满足监管的线性、单调性的模型精度更高的预测。图11简要描述了三种可能的场合,在这些场合中,传统分析流程靠着机器学习的加持得以增强效果:
把交叉效应、多项式函数或者把变量经过简单函数的映射加入到线性模型中算得上是标准做法了。机器学习模型可以产生各种各样非线性、非多项式的自变量,甚至还能表征原有自变量之间存在的高阶交叉效应。产生这些自变量的方法有不少选择。例如,从自编码机神经网络中提取非线性特征,或者从决策树的叶子节点中获得最优化分箱。
根据重要的数据属性,或者根据不同的时间段对数据分成小组,再对每一个小组分别建模,可以获得更准确的模型。对于一个企业而言,同时部署多个线性模型来处理不同的细分市场数据,或者处理不同年份的数据,这类情况也并非少见。要决定如何手动融合这些不同的模型,对于数据分析师和数据科学家而言是个琐碎的活计。不过,如果关于历史模型表现的数据也能收集起来的话,这个流程就可以实现自动化:建立一个门限模型,让它来决定在遇到观测点时,究竟使用哪个线性模型来对它进行预测。
在大部分情况下,模型是根据静态数据快照建立的,它们会在后来的数据快照上进行验证。尽管这是一种被广泛采纳的实践方式,但是当训练集、验证集数据所代表的真实世界中的数据模式发生变化时,这样做会导致模型发生退化。当市场中的竞争者进入或者退出,当宏观经济指标发生变动,当客户追逐的潮流发生了改变,或者其他各种因素发生时,都可能引起这种退化。如果关于市场、经济指标和旧模型表现的数据能够被上收上来,我们就可以基于此数据另外建立一个模型,来预估我们所部署的传统模型大概多久需要重新训练一次(译者注:仅调整模型参数),或者多久需要被全新的模型(译者注:模型结构发生了改变)所替代。就像在需要保养之前就替换掉一个昂贵的机械部件一样,我们也可以在模型的预测效力降低之前就进行重新训练,或者以新模型取而代之。(我之前写过一遍文章是有关应用机器学习时导致的验证误差,以及如何正确地在真实世界中使用机器学习的。)
当然,还有很多在传统模型的生命周期中引入机器学习技巧的机会。你可能现在就已经有更好的想法和实践了!
在传统分析流程中使用机器学习,能提供全局性还是局部性的可解释性?
一般来说,这种方法致力于保持传统线性模型所具有的全局可解释性。然而,在线性模型中加入机器学习算法所生成的特征,会降低全局可解释性。
在传统分析流程中使用机器学习,能产生何种复杂程度的响应函数?
我们的目标仍然是继续使用线性、单调性的响应函数,不过是以一种更加有效、更加自动化的方式来实现这一目的。
在传统分析流程中使用机器学习,如何帮助我们更好的理解数据?
在传统分析流程中引入机器学习模型的目的,是为了更有效、更准确地使用线性、可解释的模型。究竟是什么驱动力导致了数据表现出非线性、时间趋势、模式迁移?如果在线性模型中引入非线性项,使用门限模型,或者预测模型失效等等手段能够让你更深入地掌握这种知识的话,那么对数据的理解自然就加深了。
在传统分析流程中使用机器学习,如何让我们更加信任模型?
这种手段使我们可以理解的模型更加精确。如果对特征的增加确实导致了精度提升,这就暗示着数据中的关联现象确实以一种更可靠的形式被建模。
对可解释的模型进行小型的模型集成(ensemble)
很多企业如此擅长使用传统的线性模型建模技巧,以至于他们几乎无法再对单独某一个模型压榨出更高的精度。一种在不太损失可解释性的条件下提高精度的可能办法是,把数个已经理解透彻的模型组合起来进行预测。最终预测结果可以是对这些结果简单取平均,手动对它们进行加权,或者用更复杂的数学方式组合起来。举例说明,针对某种特定用途,总体表现最好的模型,可以和那些处理极端情况特别好的模型组合起来。对一名数据分析师或者数据科学家而言,他们可以通过实验来决定为对每一个模型选取最优加权系数进行简单集成;为了保证模型的输入和预测仍然满足单调性关系,可以使用偏相关图进行确认。
如果你倾向于,或者需要使用一种更严格的方式来整合模型的预测,那么『超级学习器(super learners)』是一个很棒的选择。在上世纪90年代早期,Wolpert介绍了『堆叠泛化法』(stacked generalization),超级学习器是它的某种实现。堆叠泛化法使用了一种组合模型来为集成模型中的每个小部分赋予权重。在堆砌模型时,过拟合是个很严重的问题。超级学习器要求使用交叉验证,并对集成模型中各个部分的权重加上约束项,通过这种方法来控制过拟合,增加可解释性。图12的图示表明,两个决策树模型和一个线性回归模型分别交叉验证,并且通过另外一个决策树模型把它们堆叠在一起。
可解释模型的小型集成提供了局部性还是全局性的可解释性?
这种集成可以增加精度,但是它会降低全局可解释性。这种集成并不影响其中的每一个小模型,但是集成在一起的模型会难以解释。
可解释模型的小型集成产生了何种复杂程度的响应函数?
它们会导致很复杂的响应函数。为了确保可解释性,使用尽可能少的模型进行集成,使用模型的简单线性组合,以及使用偏相关图来确保线性、单调性关系依然存在。
可解释模型的小型集成怎样让我们更好的理解数据?
如果这种把可解释模型组合在一起的流程能够让我们对数据中出现的模式更熟悉、更敏感,对未来数据进行预测、泛化时能够有所裨益,那么它就可以说是提高了我们对数据的理解。
可解释模型的小型集成如何让我们对模型更加信任?
这种集成让我们在没有牺牲太多可解释的情况下,对传统的可靠模型的精度进行一定的提升。精度提高意味着,数据中的有关模式以一种更可信、更可靠的方式被建模出来。当数个模型互为补充,做出符合人类预期或者领域知识的预测时,这种小型集成就显得更加可靠。
单调性约束
单调性约束能够把难以解释的非线性、非单调模型转化成为高度可解释的、符合监管要求的非线性单调模型。我们之所以认为单调性很重要,是基于两个原因:
监管方希望模型满足单调性。无论数据样本是如何的,监管方总是希望见到模型具有单调性的表现。比如,考虑信贷评分模型中的账户余额。账户余额高,倾向于代表着账户所有者更值得授信,低账户余额则代表着有潜在的违约风险。如果某一批特定的数据包含着的大量样本中,含有很多『储蓄账户余额高但贷款违约』的个体以及『储蓄账户余额低但正在还贷款』的个体,那么,基于这份训练数据进行机器学习学出的响应函数对于账户余额这个变量自然会是非单调的。监管方是不会对这种预测函数感到满意的,因为它和几十年来沉淀下来的领域专家的意见背道而驰,因而会降低模型本身或者数据样本的可信度。
单调性能够令生成的『原因代码』保持一贯性。具有一贯性的原因代码生成一般被认为是模型可解释性的金标准。如果在一个信贷评分模型中,单调性得以保证,为信贷申请结果分析原因不但直观,而且能够自动化。如果某个人的储蓄账户余额低,那么他的信用水平自然也低。一旦我们能够保证单调性,对于一次授信决定(译者注:一般指拒绝授信)的原因解释可以根据最大失分法(max-points-lost)可靠地进行排序。最大失分法把一个个体放在机器学习所得到的、具有单调性的响应曲面上,并度量他和曲面上最优点(也就是理想的、可能具有最高信用水平的客户)的距离。这个人与理想客户之间,在哪个坐标轴(也就是自变量)距离最远,也就说明拒绝授信时,哪个负面因素最重要;而这个这个人与理想客户之间,在哪个坐标轴(也就是自变量)距离最近,也就说明这个原因代码产生的负面影响最不重要;根据这个人和『理想客户』的相对位置来计算,其他自变量的影响都排在这二者之间。在使用最大失分法时,单调性可以简单地确保我们能做出清晰的、符合逻辑的判断:在单调性模型下,一个在贷款业务中被授信的客户,其储蓄账户余额绝不可能低于一个被拒绝贷款的客户(译者注:在其他条件都接近的情况下)。
在输入数据上加约束,以及对生成的模型加约束,都可以产生单调性。图13显示,仔细选择并处理非负、单调变量,把它们与单隐层神经网络结合使用,达到了使拟合系数始终为正的约束效果。这种训练组合产生了非线性、单调的响应函数,根据响应函数可以对『原因代码』进行计算;通过分析模型的系数,可以检测高阶交叉效应。寻找以及制造这些非负、单调的自变量的工作十分枯燥、费时,还需要手动试错。幸运的是,神经网络和树模型的响应函数往往能够在规避枯燥的数据预处理的同时,满足单调性的约束。使用单调性神经网络意味着可以定制化模型结构,使得生成模型参数的取值满足约束。对于基于树的模型来说,使用均匀分叉往往可以强制保证单调性:使用某个自变量分的叉上,总是能保证当自变量取值往某个方向前进时,因变量在其所有子节点上的平均值递增;自变量取值往另一个方向前进时,因变量在其所有子节点上的平均值递减。在实践中,为不同类型模型实现单调性约束的方法千变万化,这是一种随模型而改变的模型解释性技术。
单调性约束提供了全局性还是局部性的可解释性?
单调性约束为响应函数提供了全局的可解释性。
单调性约束能够导致何种复杂程度的响应函数?
它们产生了非线性且单调的响应函数。
单调性约束如何让我们更好的理解数据?
它不仅可以确保『原因代码』能够自动化地生成,同时在特定场景下(比如使用单隐层神经网络或者单棵决策树时),变量之间重要的高阶交叉效应也能够被自动检测出来。
单调性约束如何让模型更可信赖?
当单调性关系、『原因代码』以及检测出的交叉效应能够简洁地符合领域专家意见或者合理预期的时候,模型的可信度会得以提升。如果数据中存在扰动时结果依然保持稳定,以及模型随着时间产生预料之内的变化的话,通过敏感性分析也能够提升模型的可信度。
在这一部分中我们所要展现的技术,可以为非线性、非单调的响应函数生成解释。我们可以把它们与前两部分提到的技巧结合起来,增加所有种类模型的可解释性。实践者很可能需要使用下列增强解释性技巧中的一种以上,为他们手中最复杂的模型生成令人满意的解释性描述。
代理模型是一种用于解释复杂模型的简单模型。最常见的建立方法是,对原始输入和复杂模型给出的预测值建立简单线性回归或者决策树模型。代理模型中所展示的系数、变量重要性、趋势以及交互作用,是复杂模型内部机制的一种体现。不过,几乎没有理论依据能够保证简单的代理模型能够以高精度表达出更复杂的模型。
代理模型适用于何种尺度的可解释性?
一般而言,代理模型是全局性的。一个简单模型的全局可解释特性会用于解释一个更复杂模型的全局特性。不过,我们也无法排除代理模型对复杂模型条件分布的局部拟合能力,例如先聚类,再用自变量拟合预测值、拟合预测值的分位点、判断样本点属于哪一类等等,能够体现局部解释性。因为条件分布的一小段倾向于是线性的、单调的,或者至少有较好的模式,局部代理模型的预测精度往往比全局代理模型的表现更好。模型无关的局部可解释性描述(我们会在下一小节介绍)是一种规范化的局部代理模型建模方法。当然,我们可以把全局代理模型和局部代理模型一起使用,来同时获得全局和局部的解释性。
代理模型能够帮助我们解释何种复杂程度的响应函数?
代理模型能够有助于解释任何复杂程度的机器学习模型,不过可能它们最有助于解释非线性、非单调的模型。
代理模型如何帮我们提高对数据的理解?
代理模型可以针对复杂模型的内部机制向我们提供一些洞见,因此能提高我们对数据的理解。
代理模型如何让模型更可信赖?
当代理模型的系数、变量重要性、趋势效应和交叉效应都符合人类的领域知识,被建模的数据模式符合合理预期时,模型的可信度会得以提升。当数据中存在轻微的或者人为的扰动时,或者数据来自于我们感兴趣领域的数据模拟,又或者数据随着时间改变时,如果结合敏感性分析进行检验发现,对于模型的解释是稳定的,并且贴合人类领域经验,符合合理预期,那么模型的可信度会得以提升。
模型无关的局部可解释性描述(Local Interpretable Model-agnostic Explanation, LIME)
图15. 对LIME流程的一个描述,其中使用了加权线性模型帮助我们解释一个复杂的神经网络是如何做出某个预测的。感谢Marco Tulio Ribeiro友情提供图片。图片使用已获得许可
LIME是围绕单个样本建立局部代理模型的一种方法。它的主旨在于厘清对于特定的几个样本,分类器是如何工作的。LIME需要找到、模拟或者产生一组可解释的样本集。使用这组已经被详细研究过的样本,我们能够解释机器学习算法得到的分类器是如何对那些没有被仔细研究过的样本进行分类的。一个LIME的实现可以遵循如下流程:首先,使用模型对这组可解释的数据集进行打分;其次,当模型对另外的数据进行分类时,使用解释性数据集与另外的数据点的距离进行加权,以加权后的解释性数据集作为自变量做L1正则化线性回归。这个线性模型的参数可以用来解释,另外的数据是如何被分类/预测的。
LIME方法一开始是针对图像、文本分类任务提出的,当然它也适用于商业数据或者客户数据的分析,比如对预测客户群违约或者流失概率的百分位点进行解释,或者对已知的成熟细分市场中的代表性客户行为进行解释,等等。LIME有多种实现,我最常见的两个,一个是LIME的原作者的实现,一个是实现了很多机器学习解释工具的eli5包。
LIME提供的可解释性的尺度如何?
LIME是一种提供局部可解释性的技术。
LIME能帮助我们解释何种复杂程度的响应函数?
LIME有助于解释各种复杂程度的机器学习模型,不过它可能最适合解释非线性、非单调的模型。
LIME如何帮我们提高对模型的理解?
LIME提供了我们对重要变量的洞察力,厘清这些变量对特定重要样本点的影响以及呈现出的线性趋势。对极端复杂的响应函数更是如此。
LIME如何让模型更加可信?
当LIME发现的重要变量及其对重要观测点的影响贴合人类已有的领域知识,或者模型中体现的数据模式符合人类的预期时,我们对模型的信心会得到增强。结合下文将会提到的最大激发分析,当我们能明显地看到,相似的数据被相似的内部机制处理,全然不同的数据被不同的内部机制处理,在对多个不同的样本使用不同处理方式上,能够保持一贯性。同时,在数据存在轻微扰动时,数据是由我们感兴趣的场景模拟得出时,或者数据随时间改变时,LIME可以被视为是敏感性分析的一种,帮助我们检查模型是否依然能够保持稳定,是否依然贴合人类的领域知识,以及数据模式是否依然符合预期。
在最大激发分析中,可以找到或者模拟出这样的例子,它们总是会对特定的神经元、网络层、滤波器(filter)、决策树集成模型中的某棵树进行大量激发。像第二部分所提到的单调性约束一样,最大激发分析在实战中,是一种很常见的与模型相关的解释性分析技术。
对于特定的一组样本或者一类相似的样本,观察它们能够对响应函数的哪一部分进行最大程度的激发(对于神经元而言是激发强度最大,对于树模型而言是残差最低,二者都可以算最大激发),这种最大分析厘清了复杂模型的内部工作机制。同时,如果不同类型的样本持续激发模型中相同的部分,那么这种分析也可以发现交叉效应。
图16描绘了一种比较理想化的情况:一个好的客户和一个欺诈型客户分别以高强度激发了两组不同的神经元。红圈表示两类输入数据所激发的强度排名前三的神经元。对于这两类数据而言,最大激发的神经元不同,表示着对于不同类型的样本,神经网络的内部结构会以不同的方式对其进行处理。如果对很多不同子类型的好客户和欺诈型客户而言这种模式依然存在,那么这就是一种很强烈的信号,意味着模型内部结构是稳定的、可靠的。
最大激发分析适用于哪种尺度的可解释性?
最大激发分析在尺度上是局部性的,因为它刻画了一个复杂响应函数的不同部分是如何处理特定的一个或者一组观测样本的。
最大激发分析能够帮助我们解释何种复杂程度的响应函数?
最大激发分析能够解释任意复杂的响应函数,不过它可能最适合于解释非线性、非单调的模型。
最大激发分析如何让我们更好的理解数据和模型?
最大激发函数通过像我们展示复杂模型的内部结构,提高我们对数据、模型的理解。
最大激发分析如何让模型变的更加可信?
上文讨论过的LIME有助于解释在一个模型中对条件分布的局部进行建模并预测。最大激发分析可以强化我们对模型局部内在机制的信心。二者的组合可以为复杂的响应函数建立详细的局部解释,它们是很棒的搭配。使用最大激发分析,当我们能明显地看到,相似的数据被相似的内部机制处理,全然不同的数据被不同的内部机制处理,对多个不同的样本使用不同处理方式这一点保持一贯性,模型中发现的交互作用贴合人类已有的领域知识,或者符合人类的预期,甚至把最大激发分析当做一种敏感性分析来用,以上的种种都会让我们对模型的信心得以提高。同时,在数据存在轻微扰动时,数据是由我们感兴趣的场景模拟得出时,或者数据随时间改变时,最大激发分析可以帮我们检查模型对于样本的处理是否依然保持稳定。
敏感性分析考察的是这样一种特性:给数据加上人为的扰动,或者加上模拟出的变化时,模型的行为以及预测结果是否仍然保持稳定。在传统模型评估以外,对机器学习模型预测进行敏感性分析可能是最有力的机器学习模型验证技术。微小地改变变量的输入值,机器学习模型可能会给出全然不同的预测结论。在实战中,因为自变量之间、因变量与自变量之间都存在相关性,有不少线性模型的验证技巧是针对回归系数的数值稳定性的。 对从线性建模技术转向机器学习建模技术的人而言,少关注一些模型参数数值不稳定性的情况,多关心一些模型预测的不稳定性,这种做法可能还算是比较谨慎。
如果我们能针对有趣的情况或者已知的极端情况做一些数据模拟,敏感性分析也可以基于这些数据对模型的行为以及预测结果做一些验证。在整篇文章中提及或者不曾提及的不少技巧,都可以用来进行敏感性分析。预测的分布、错误比率度量、图标、解释性技巧,这些方法都可以用来检查模型在处理重要场景中的数据时表现如何,表现如何随着时间变化,以及在数据包含人为损坏的时候模型是否还能保持稳定。
敏感性分析适用于什么尺度的可解释性?
敏感性分析可以是一种全局性的解释技术。当使用单个的像代理模型这种全局性解释技术时,使用敏感性分析可以保证,就算数据中存在轻微扰动或者有人为造成的数据缺失,代理模型中所存在的主要交叉效应依然稳定存在。
敏感性分析也可以是一种局部性的解释技术。例如,当使用LIME这种局部性解释技术时,它可以判断在宏观经济承压的条件下,为某个细分市场的客户进行授信时,模型中使用的重要变量是否依然重要。
敏感性分析能够帮我们解释何种复杂程度的响应函数?
敏感性分析可以解释任何复杂程度的响应函数。不过它可能最适合于解释非线性的,或者表征高阶变量交叉特征的响应函数。在这两种情况下,对自变量输入值的轻微改变都可能引起预测值的大幅变动。
敏感性分析如何帮助我们更好的理解模型?
敏感性分析通过向我们展现在重要的场景下,模型及其预测值倾向于如何表现,以及这种表现随时间会如何变化。因此敏感性分析可以加强我们对模型的理解。
敏感性分析如何提高模型的可信可信度?
如果在数据轻微改变或者故意受损时,模型的表现以及预测输出仍然能表现稳定,那么稳定性分析就可以提高我们对模型的信任。除此以外,如果数据场景受到外来影响,或者数据模式随时间发生变化时,模型仍然能够符合人类的领域知识或者预期的话,模型的可信度也会上升。
对于非线性、非单调的响应函数,为了量化衡量模型中自变量和因变量的关系,往往只能度量变量重要性这一种方法可以选。变量重要性度量难以说明自变量大概是往哪个方向影响因变量的。这种方法只能说明,一个自变量跟其他自变量相比,对模型影响的相对强弱。
在基于树的模型中使用变量重要性度量是一种常见做法。如图18所示,一种拍脑袋的变量重要性规则是,同时考虑树模型中一个变量用于分叉的所在深度和出现的频率:自变量所在分叉位置越高(译者注:在越浅的层数出现),或者自变量在树中出现的频率越高,那么它就越重要。对于单棵决策树来说,每次这个自变量在某个节点成为最佳分叉使用的变量时,把对应的分支准则(Splitting Criterion)收益累加起来,就可以量化地判断这个变量究竟有多重要。对于梯度提升树的集成(译者注:Gradient boosted tree ensemble, 往往也称作GBDT)而言,可以先对单棵树计算变量重要性,然后再做聚合加总;我们还有一种额外的度量,如果把单个自变量排除掉之后导致了模型精度的降低,那么这个精度差异可以代表自变量在模型中有多重要(Shuffling,洗牌法可以视作考察排除一个/一部分变量的效应,因为其他变量并没有被洗掉)。对于神经网络而言,对我们感兴趣的特定自变量的重要性度量,一般来说是它所对应的模型参数绝对值的加总。全局性的变量重要性度量技术往往因模型而异,实践者们要特别注意,变量重要性的简单度量可能会偏向于那些取值范围较大,包含类别数目较多的那些变量。
去除某一自变量的分析法(Leave-One-Covariate-Out, LOCO)
最近某篇文章的预印版本给出一种局部性的、模型无关的、通过模型平均精度下降的方式来考察变量重要性的度量,称为『去除某一自变量的分析法』(Leave-One-Covariate-Out),简称LOCO。最开始LOCO是用于回归模型的,不过LOCO的大体思想是无关于模型的,而且可以有多重不同的实现。可以按照如下流程实现LOCO:对训练集或验证集中的每一行以及每一个变量(自变量)进行局部性的重要性评分。在此之外,每一个变量被设置为缺失值、零值、平均值或者其他值域中的值,来把它在预测时起到的效果消除掉。对预测精度有最大绝对影响的自变量就是对那一行预测时的最重要变量,同时,可以对每一行中所有变量对预测的影响大小进行排序。LOCO还能为每一个变量计算它们对整个数据集精度的平均影响,给出全局性的变量重要性度量,甚至还能给出这些全局变量重要性度量的置信区间。
变量重要性度量适用于哪种尺度的可解释性?
一般来说变量重要性度量方法提供的解释性是全局的;不过LOCO方法可以为数据集中的每一行或者新来的数据提供局部的变量重要性度量。
变量重要性度量能够帮我们解释何种复杂程度的响应函数?
变量重要性度量对于非线性、非单调的响应函数而言是最有效的;不过它们可以广泛应用于各种机器学习习得的响应函数上。
变量重要性度量如何帮我们更好的理解模型?
变量重要性度量让我们对模型中最具影响力的变量及其影响力顺序有所了解,因而提高了我们对模型的理解。
变量重要性度量如何让模型更加可信?
如果变量重要性度量的结果能够贴合人类领域知识、符合人类预期,在数据存在轻微扰动或人为干扰的情况下仍然保持稳定,在数据随时间变化或者经由模拟得到时变动幅度可以接受的话,那么它就能够让模型更加值得采信。
决策树模型解释器
图20. 单棵决策树中,对于某一样本点的预测,以高亮的决策路径显示。感谢Twitter网友 @crossentropy友情提供图片。图片的使用已获得允许
几种『平均树』的解释方法已经提出了几年了,不过名为『决策树模型解释器』的简单开源工具最近几个月才开始流行起来。决策树模型解释器把决策树、随机森林给出的预测进行分解,表示成为全局平均值(bias)和各个自变量带来的贡献之和。决策树模型解释器是专门为决策树设计的算法。图20显示了如何将决策树中的决策路径分解成为全局平均值以及各个自变量的贡献。图中给出了某个特定的样本的决策路径(决策树模型不仅可以输出模型中的平均值和自变量的贡献值,也能输出对于某个样本而言的平均值以及自变量的贡献值)eli5包中也有一个决策树解释器的实现。
决策树解释器适用于哪种尺度的模型可解释性?
当决策树解释器给出在整棵决策树或者整个随机森林中各个自变量的平均贡献时,它的解释性就是全局的。当它用于解释某些特定的预测时,它的解释性就是局部的。
决策树解释器能够解释何种复杂程度的响应函数?
决策树解释器往往是用于解释由决策树、随机森林模型构建的非线性、非单调响应函数的。
决策树解释器如何提高我们对于模型的理解?
对于决策树以及随机森林模型中的自变量,决策树解释器通过展示它们平均的贡献,并对它们进行排序,来增进我们对模型的理解。
决策树解释器如何让模型变得更加可信?
如果决策树解释器所展现的结果能够贴合人类领域知识、符合人类预期,在数据存在轻微扰动或人为干扰的情况下仍然保持稳定,在数据随时间变化或者经由模拟得到时变动幅度可以接受的话,那么它就能够让模型更加值得采信。
在最近几个月里,当我的朋友和同事们听说我要写这篇文章后,他们用邮件、短信、推特、Slack提醒我这方面新工作的速度简直是有增无减。现在,我很可能一天要看两个新的算法库、算法或者论文,我几乎不可能跟上这样一种节奏,把这些东西一股脑塞进这篇综述性的文章中。实际上,这篇文档总要有个尽头,必须要在某个地方戛然而止。所以我们就在这里停下吧!我相信,为了让理解机器学习的可解释性更上一层楼,这篇文章提供了有效的总结,把这些解释性技巧从四个标准上进行分类:它们的尺度(局部性的,或者全局性的),它们所能解释响应函数的复杂程度,它们的应用领域(跟特定模型相关,或者跟特定模型无关),以及它们如何能够更易于理解、更容易受信任。同时,我相信,这篇文章涵盖了主流类型的技巧,尤其是那些领域应用型的或者是商业应用型的技巧。如果我有更充裕的时间能够无止尽的向本文添砖加瓦的话,我想要马上给读者展现的是两个课题:一个课题是RuleFit(译者注:基于规则的集成模型工具,RuleFit3是R语言中的一个包),另一个课题则是让深度学习更具可解释性的诸多工作,比如论文『学习深度k近邻表达』即是其中之一。针对这两个课题我自己当然是要深入钻研下去的。
如此多的新进展纷至沓来,对于在这个课题(即机器学习可解释性)上做研究的人而言,这是个令人激动的时代。我希望你们能够在这篇文章中发现有用的信息。因为这个领域可以把机器学习和人工智能以更有效、更透明的方式传达给用户和客户,我希望那些跟我处于统一领域的工作者们能够像我一样,受到这些具有光明未来的革命性技术的鼓舞。
相关资源: