zoukankan      html  css  js  c++  java
  • 解释机器学习模型的一些方法(二)——在受监管的行业使用机器学习

    对于在受监管行业中工作的分析师和数据科学家来说,尽管机器学习可能会带来『能极大提高预测精度』这一好处,然而它可能不足以弥补内部文档需求以及外部监管责任所带来的成本。对于实践者而言,传统线性模型技术可能是预测模型中的唯一选择。然而,创新和竞争的驱动力并不因为你在一个受监管的模式下工作就会止息。在银行,保险以及类似受监管垂直领域里,数据科学家和分析师正面对着这样一个独一无二的难题:他们必须要找到使预测越来越精准的方案,但前提是,保证这些模型和建模过程仍然还是透明、可解释的。

    在这一节中所展现的技巧,有些使用了新型的线性模型,有些则是对传统线性模型做出改进所得到的方法。对于线性模型进行解释的技巧是高度精妙的,往往是有一个模型就有一种解释,而且线性模型进行统计推断的特性和威力是其他类型的模型难以企及的。对于那些对机器学习算法的可解释性心存疑虑而不能使用它们的实践者,本节中的技巧正适合他们。这些模型产生了线性、单调的响应函数(至少也是单调的!),和传统线性模型一样能保证结果是全局可解释的,但通过机器学习算法获得了预测精度的提高。

    普通最小二乘(Ordinary Least Square,OLS)回归的替代品

    受惩罚的回归(Penalized Regression)

    图7. 左图:经过L1/LASSO惩罚的回归系数处于缩小可行域中。右图:经过L2/岭回归惩罚的回归系数

    普通最小二乘法(Ordinary least squares,OLS)回归有着200年的历史。也许我们是时候该向前发展一点了?作为一个替代品,带惩罚项的回归技术也许是通往机器学习之路上轻松的一课。现在,带惩罚项的回归技术常常混合使用两种混合:为了做变量选择所使用的L1/LASSO惩罚,以及为了保证模型稳健性的Tikhonov/L2/ridge(岭回归)惩罚。这种混合被称为elastic net。相比OLS回归,它们对于数据所作出的假设更少。不同于传统模型直接解方程,或者使用假设检验来做变量选择,带惩罚项的回归通过最小化带约束的目标函数,来找到给定数据集中的一组最优回归系数。一般而言,这就是一组表征线性关系的参数,但是针对『给共线性或者无意义自变量以较大的回归系数』这一点,模型可以加以一定的惩罚。你可以在统计学习基础(Elements of Statistical Learning, ESL)一书中学到关于带惩罚项回归的方方面面,但是在此,我们的目的只是要强调一下,你很可能需要尝试一下『带惩罚项的回归』这一模型。

    带惩罚项的回归被广泛地应用于不少研究领域,但是对于具有很多列,列数大于行数,列中存在大量多重共线性的商业业务数据集,它们仍然适用。L1/LASSO惩罚把无足轻重的回归系数拉回到0,能够选取一小部分有代表性的变量进行回归系数估计,供线性模型使用,从而规避了那些靠前向、后向、逐步变量选择法(forward, backward, stepwise variable selection)所带来的多模型比较困难的问题。Tikholov/L2/岭回归(ridge) 惩罚可以增加模型参数的稳定性,甚至在变量数目过多、多重共线性较强、重要的预测变量与其他变量存在相关性时也能保持稳定。我们需要知道的重点是:惩罚项回归并非总能为回归系数给出置信区间,t-检验值或者p-value(译者注:t-检验值和p-value都是检查模型显著有效性的统计量)。这些统计量往往只能通过额外花时间进行迭代计算,或者自助采样法(bootstrapping)才能得到。

    广义加性模型(Generalized Additive Models, GAMs)

    图8. 使用广义加性模型对多个自变量建立样条函数

    广义加性模型能够通过对一部分变量进行标准线性回归,对另一部分变量进行非线性样条函数的拟合的方式,手动调整模型,让你在递增的模型精度和递减的模型可解释性之间找到一个权衡。同时,大部分GAM能够方便地为拟合好的样条函数生成图形。根据你所承受的外部监管或者内部文档要求的不同,你也许可以在模型中直接使用这些样条函数来让模型预测的更准确。如果不能直接使用的话,你可以用肉眼观测出拟合出的样条函数,然后用更具可解释性的多项式函数、对数函数、三角函数或者其他简单的函数应用于预测变量之上,这样也能让预测精度提高。同时,你也可以靠查阅《统计学习基础》(Elements of Statistical Learning)加深对GAM的理解。

    分位数回归

    图9. 将分位数回归绘制为二维图表

    分位数回归让你能够使用传统可解释的线性模型对训练数据的分位点进行回归。这种回归允许你对不同的消费者市场细分或者不同账户投资组合行为细分,建立不同的模型,你可以使用不同的预测变量,也可以在模型中给予预测变量不同的回归系数。对低价值客户和高价值客户使用完全不同的两套预测变量和回归系数听上去还算合理,分位数回归对这种做法提供了一套理论框架。

    回归的这些替代品提供的是全局性的还是局部性的可解释性?

    回归的替代品往往能够提供全局可解释的函数,这些函数是线性的、单调的,根据其回归系数的大小以及其他传统回归的评估量、统计量,具备可解释性。

    作为回归的替代品,这些回归函数的复杂程度如何?

    这些回归函数一般来说是线性的、单调的函数。不过,使用GAM可能导致相当复杂的非线性响应函数。

    这些技术如何帮我们提高对模型的理解?

    比较少的模型假设意味着比较少的负担,可以不使用可能带来麻烦的多元统计显著性检验而进行变量选择,可以处理存在多重共线性的重要变量,可以拟合非线性的数据模式,以及可以拟合数据条件分布的不同分位点(这可不止是拟合条件分布),这些特性都可能让我们更准确的理解模型所表征的现象。

    回归函数的这些替代品如何提高模型的可信度?

    基本上,这些技巧都是值得信任的线性模型,只是使用它们的方式比较新奇。如果在你的线上应用中这些技巧带来了更精确的预测结果,那么我们就可以更加信任它们。

    为机器学习模型建立基准测试模型

    图10. 考虑交叉效应的线性模型与机器学习模型比较,并绘制评估图

    机器学习算法和传统线性模型的两个主要区别,一个是机器学习算法在预测时引入了很多变量的高阶交叉作用,并不直观,另一个是机器学习算法会产生非线性、非多项式、非单调甚至非连续的响应函数。

    如果一个机器学习算法的预测表现碾压了传统线性模型,我们可以对自变量和目标变量建立一磕决策树。在决策树相邻层的分叉所使用的变量,一般来说会有强交叉效应。我们可以试着把这些变量的交叉效应加入到线性模型中,甚至树的连续几层所涉及到变量的高阶交叉效应也可以加入进来。如果一个机器学习算法较大地超越了传统线性模型,我们可以考虑把数据建模为分段线性的模型。为了要观察机器学习学到的响应函数如何受到一个变量各种取值的影响,或者要获得一些如何使用分段线性模型的洞见,可以使用GAM以及偏相关图。『多变量自适应回归样条法』,是一种可以自动发现条件分布中存在的复杂非线性部分,并对其不同区域分别进行拟合的统计手段。你可以尝试着直接使用多变量自适应回归样条法,对分段模型进行拟合。

    面向机器学习模型的基准测试模型能提供全局性还是局部性的可解释性?

    如果线性性和单调性能够得以保留,建模过程就会产生全局可解释的线性单调响应函数。如果使用分段函数,对机器学习模型建立基准测试可以放弃全局解释性,转而寻求局部可解释性。

    面向机器学习模型的基准测试模型能够生成什么复杂度的响应函数?

    如果谨慎、克制的建立面向机器学习模型的基准测试模型,并加以验证,对机器学习模型建立的基准模型可以维持像传统线性模型那样的线性性和单调性。然而,如果加入了太多的交叉效应,或者是在分段函数中加入了太多小段,将会导致响应函数依然极端复杂。

    面向机器学习模型的基准测试模型如何提升我们对模型的理解?

    这种流程把传统、可信的模型用出了新花样。如果使用类似GAM,偏相关图,多元自适应回归样条法这些技巧进行更进一步的数据探索,对机器学习模型建立相似的基准测试模型,可以让模型的可理解性大大提高,对数据集中出现的交叉效应以及非线性模式的理解也会加深。

    面向机器学习模型的基准测试模型如何提高模型的可信度?

    这种流程把传统、可信的模型用出了新花样。如果使用类似GAM,偏相关图,多元自适应回归样条法这些技巧进行更进一步的数据探索,通过建立面向机器学习模型的基准测试模型,能够让这些模型更准确地表达出数据集中我们感兴趣的那部分模式,从而提高我们对模型的信任程度。

    在传统分析流程中使用机器学习

    图11. 在传统分析流程中,使用机器学习的几种可能的方式,以图形呈现

    相较于直接使用机器学习的预测来做分析决策,我们可以通过一些机器学习的技术,对传统分析的生命周期流程(比如数据准备加模型部署)进行一些增强,从而有潜力达到比满足监管的线性、单调性的模型精度更高的预测。图11简要描述了三种可能的场合,在这些场合中,传统分析流程靠着机器学习的加持得以增强效果:

    在传统的线性模型中,加入(加工过的)复杂自变量:

    把交叉效应、多项式函数或者把变量经过简单函数的映射加入到线性模型中算得上是标准做法了。机器学习模型可以产生各种各样非线性、非多项式的自变量,甚至还能表征原有自变量之间存在的高阶交叉效应。产生这些自变量的方法有不少选择。例如,从自编码机神经网络中提取非线性特征,或者从决策树的叶子节点中获得最优化分箱。

    使用多个带门限的线性模型:

    根据重要的数据属性,或者根据不同的时间段对数据分成小组,再对每一个小组分别建模,可以获得更准确的模型。对于一个企业而言,同时部署多个线性模型来处理不同的细分市场数据,或者处理不同年份的数据,这类情况也并非少见。要决定如何手动融合这些不同的模型,对于数据分析师和数据科学家而言是个琐碎的活计。不过,如果关于历史模型表现的数据也能收集起来的话,这个流程就可以实现自动化:建立一个门限模型,让它来决定在遇到观测点时,究竟使用哪个线性模型来对它进行预测。

    预测线性模型的退化行为:

    在大部分情况下,模型是根据静态数据快照建立的,它们会在后来的数据快照上进行验证。尽管这是一种被广泛采纳的实践方式,但是当训练集、验证集数据所代表的真实世界中的数据模式发生变化时,这样做会导致模型发生退化。当市场中的竞争者进入或者退出,当宏观经济指标发生变动,当客户追逐的潮流发生了改变,或者其他各种因素发生时,都可能引起这种退化。如果关于市场、经济指标和旧模型表现的数据能够被上收上来,我们就可以基于此数据另外建立一个模型,来预估我们所部署的传统模型大概多久需要重新训练一次(译者注:仅调整模型参数),或者多久需要被全新的模型(译者注:模型结构发生了改变)所替代。就像在需要保养之前就替换掉一个昂贵的机械部件一样,我们也可以在模型的预测效力降低之前就进行重新训练,或者以新模型取而代之。(我之前写过一遍文章是有关应用机器学习时导致的验证误差,以及如何正确地在真实世界中使用机器学习的。)

    当然,还有很多在传统模型的生命周期中引入机器学习技巧的机会。你可能现在就已经有更好的想法和实践了!

    在传统分析流程中使用机器学习,能提供全局性还是局部性的可解释性?

    一般来说,这种方法致力于保持传统线性模型所具有的全局可解释性。然而,在线性模型中加入机器学习算法所生成的特征,会降低全局可解释性。

    在传统分析流程中使用机器学习,能产生何种复杂程度的响应函数?

    我们的目标仍然是继续使用线性、单调性的响应函数,不过是以一种更加有效、更加自动化的方式来实现这一目的。

    在传统分析流程中使用机器学习,如何帮助我们更好的理解数据?

    在传统分析流程中引入机器学习模型的目的,是为了更有效、更准确地使用线性、可解释的模型。究竟是什么驱动力导致了数据表现出非线性、时间趋势、模式迁移?如果在线性模型中引入非线性项,使用门限模型,或者预测模型失效等等手段能够让你更深入地掌握这种知识的话,那么对数据的理解自然就加深了。

    在传统分析流程中使用机器学习,如何让我们更加信任模型?

    这种手段使我们可以理解的模型更加精确。如果对特征的增加确实导致了精度提升,这就暗示着数据中的关联现象确实以一种更可靠的形式被建模。

    对可解释的模型进行小型的模型集成(ensemble)

    图12. 一个小型、堆叠的集成算法图

    很多企业如此擅长使用传统的线性模型建模技巧,以至于他们几乎无法再对单独某一个模型压榨出更高的精度。一种在不太损失可解释性的条件下提高精度的可能办法是,把数个已经理解透彻的模型组合起来进行预测。最终预测结果可以是对这些结果简单取平均,手动对它们进行加权,或者用更复杂的数学方式组合起来。举例说明,针对某种特定用途,总体表现最好的模型,可以和那些处理极端情况特别好的模型组合起来。对一名数据分析师或者数据科学家而言,他们可以通过实验来决定为对每一个模型选取最优加权系数进行简单集成;为了保证模型的输入和预测仍然满足单调性关系,可以使用偏相关图进行确认。

    如果你倾向于,或者需要使用一种更严格的方式来整合模型的预测,那么『超级学习器(super learners)』是一个很棒的选择。在上世纪90年代早期,Wolpert介绍了『堆叠泛化法』(stacked generalization),超级学习器是它的某种实现。堆叠泛化法使用了一种组合模型来为集成模型中的每个小部分赋予权重。在堆砌模型时,过拟合是个很严重的问题。超级学习器要求使用交叉验证,并对集成模型中各个部分的权重加上约束项,通过这种方法来控制过拟合,增加可解释性。图12的图示表明,两个决策树模型和一个线性回归模型分别交叉验证,并且通过另外一个决策树模型把它们堆叠在一起。

    可解释模型的小型集成提供了局部性还是全局性的可解释性?

    这种集成可以增加精度,但是它会降低全局可解释性。这种集成并不影响其中的每一个小模型,但是集成在一起的模型会难以解释。

    可解释模型的小型集成产生了何种复杂程度的响应函数?

    它们会导致很复杂的响应函数。为了确保可解释性,使用尽可能少的模型进行集成,使用模型的简单线性组合,以及使用偏相关图来确保线性、单调性关系依然存在。

    可解释模型的小型集成怎样让我们更好的理解数据?

    如果这种把可解释模型组合在一起的流程能够让我们对数据中出现的模式更熟悉、更敏感,对未来数据进行预测、泛化时能够有所裨益,那么它就可以说是提高了我们对数据的理解。

    可解释模型的小型集成如何让我们对模型更加信任?

    这种集成让我们在没有牺牲太多可解释的情况下,对传统的可靠模型的精度进行一定的提升。精度提高意味着,数据中的有关模式以一种更可信、更可靠的方式被建模出来。当数个模型互为补充,做出符合人类预期或者领域知识的预测时,这种小型集成就显得更加可靠。

    单调性约束

    图13. 在神经网络中为数据和模型加入单调性约束的示意图

    单调性约束能够把难以解释的非线性、非单调模型转化成为高度可解释的、符合监管要求的非线性单调模型。我们之所以认为单调性很重要,是基于两个原因:

    监管方希望模型满足单调性。无论数据样本是如何的,监管方总是希望见到模型具有单调性的表现。比如,考虑信贷评分模型中的账户余额。账户余额高,倾向于代表着账户所有者更值得授信,低账户余额则代表着有潜在的违约风险。如果某一批特定的数据包含着的大量样本中,含有很多『储蓄账户余额高但贷款违约』的个体以及『储蓄账户余额低但正在还贷款』的个体,那么,基于这份训练数据进行机器学习学出的响应函数对于账户余额这个变量自然会是非单调的。监管方是不会对这种预测函数感到满意的,因为它和几十年来沉淀下来的领域专家的意见背道而驰,因而会降低模型本身或者数据样本的可信度。

    单调性能够令生成的『原因代码』保持一贯性。具有一贯性的原因代码生成一般被认为是模型可解释性的金标准。如果在一个信贷评分模型中,单调性得以保证,为信贷申请结果分析原因不但直观,而且能够自动化。如果某个人的储蓄账户余额低,那么他的信用水平自然也低。一旦我们能够保证单调性,对于一次授信决定(译者注:一般指拒绝授信)的原因解释可以根据最大失分法(max-points-lost)可靠地进行排序。最大失分法把一个个体放在机器学习所得到的、具有单调性的响应曲面上,并度量他和曲面上最优点(也就是理想的、可能具有最高信用水平的客户)的距离。这个人与理想客户之间,在哪个坐标轴(也就是自变量)距离最远,也就说明拒绝授信时,哪个负面因素最重要;而这个这个人与理想客户之间,在哪个坐标轴(也就是自变量)距离最近,也就说明这个原因代码产生的负面影响最不重要;根据这个人和『理想客户』的相对位置来计算,其他自变量的影响都排在这二者之间。在使用最大失分法时,单调性可以简单地确保我们能做出清晰的、符合逻辑的判断:在单调性模型下,一个在贷款业务中被授信的客户,其储蓄账户余额绝不可能低于一个被拒绝贷款的客户(译者注:在其他条件都接近的情况下)。

    在输入数据上加约束,以及对生成的模型加约束,都可以产生单调性。图13显示,仔细选择并处理非负、单调变量,把它们与单隐层神经网络结合使用,达到了使拟合系数始终为正的约束效果。这种训练组合产生了非线性、单调的响应函数,根据响应函数可以对『原因代码』进行计算;通过分析模型的系数,可以检测高阶交叉效应。寻找以及制造这些非负、单调的自变量的工作十分枯燥、费时,还需要手动试错。幸运的是,神经网络和树模型的响应函数往往能够在规避枯燥的数据预处理的同时,满足单调性的约束。使用单调性神经网络意味着可以定制化模型结构,使得生成模型参数的取值满足约束。对于基于树的模型来说,使用均匀分叉往往可以强制保证单调性:使用某个自变量分的叉上,总是能保证当自变量取值往某个方向前进时,因变量在其所有子节点上的平均值递增;自变量取值往另一个方向前进时,因变量在其所有子节点上的平均值递减。在实践中,为不同类型模型实现单调性约束的方法千变万化,这是一种随模型而改变的模型解释性技术。

    单调性约束提供了全局性还是局部性的可解释性?

    单调性约束为响应函数提供了全局的可解释性。

    单调性约束能够导致何种复杂程度的响应函数?

    它们产生了非线性且单调的响应函数。

    单调性约束如何让我们更好的理解数据?

    它不仅可以确保『原因代码』能够自动化地生成,同时在特定场景下(比如使用单隐层神经网络或者单棵决策树时),变量之间重要的高阶交叉效应也能够被自动检测出来。

    单调性约束如何让模型更可信赖?

    当单调性关系、『原因代码』以及检测出的交叉效应能够简洁地符合领域专家意见或者合理预期的时候,模型的可信度会得以提升。如果数据中存在扰动时结果依然保持稳定,以及模型随着时间产生预料之内的变化的话,通过敏感性分析也能够提升模型的可信度。

  • 相关阅读:
    界面控件DevExpress WPF入门 表达式编辑器功能
    Telerik UI for WPF全新版本——拥有Office2019高对比度主题
    DevExpress报表控件v21.2 全新的Visual Studio报表设计器
    报告生成器FastReport .NET入门指南 在Linux中启动应用程序
    文档控件DevExpress Office File API v21.2 自定义字体加载引擎
    UI组件库Kendo UI for Angular入门 如何开始使用图表功能
    WPF界面工具Telerik UI for WPF入门级教程 设置一个主题(二)
    DevExtreme初级入门教程(React篇) TypeScript支持
    报表开发利器FastReport .NET v2022.1 添加关键对象和属性
    python项目打包(一) setup.py、Python源代码项目结构
  • 原文地址:https://www.cnblogs.com/wmx24/p/9356937.html
Copyright © 2011-2022 走看看