总第220篇/张俊红

如果有学过或者用过一些算法的同学,应该对特征重要性这个概念并不陌生。算法一般都是用来做预测的,而预测也不是凭空发生的,是基于一些已有的变量(x)进行预测的,那在众多的x中每个x对最终的预测贡献的信息具体是多少呢?比如要预测明天是否会下雨,第一个x是明天的空气湿度,第二个x是明天天晴或天阴,第三个x是明天的温度,第四个x是明天是星期几,在预测明天是否会下雨这件事上这四个不同的x对预测的影响肯定是不一样的,我们把这个影响大小称为特征重要性。

那特征重要性和基于业务解释的特征重要性有什么区别呢?是经常听到很多做数据分析的人说学算法是为了更好的做数据分析,为了更好的推进业务。为了推进业务就需要你的结果是可解释的,你不能拿着一个黑盒模型告诉业务说,模型结果是明天会下雨,至于为什么,不知道。这肯定是不可以的,所以我们需要对我们的结果进行解释。

关于特征重要性,不同模型的计算方法略有不同,但是一个总体大原则就是谁对模型预测结果准确度贡献越大,谁的重要性就高。很多模型都会自带feature_importance属性,可以得出每个特征的重要性得分。

特征重要性得分让我们知道了不同特征之间的重要性情况,除此之外,我们还想知道在其他特征不变的情况,某一个特征内部重要性分布是什么样的。这个也是有现成方法,叫做部分依赖图,英文全称是Partial Dependence Plots,简称PDP。


图片来源于sklearn官网

上图中第一行三张图分别表示收入中位数、平均入住率、房屋年龄对房价中位数的影响程度,可以看到有线性正向,反比例负向,基本无关三种趋势。右下角的图表反映了两个特征之间的相互作用。

讲完了特征重要和特征内部各取值对预测影响关系以外,我们再来介绍我们今天的主角——Shapley value值。

Shapley value翻译过来表示夏普利值,是用来说明自己的收入和付出是等效的,是一种分配方式。有一个经典的财产分配的例子:

假定现在有100万财产,这100万需要分配给ABC三个人。该怎么分配呢?可以平均分配,也可以按照每个人的权力大小进行分配,已知A拥有50%的票力,b拥有40%的票力,c拥有10%的票力。前面这两种方法虽然可以对财产进行分配,但是针对某个人分到的财产不是最多的。所以通过投票来决定如何分配,规则规定,当超过50%的票认可了某种方案时,才能获得整个财产,否则三人将一无所获。

c可以提出这样的方案,a:70%,b:0,c:30%。这个方案能被a、c接受,因为对a、c来说这是一个比按票力分配有明显改进的方案,尽管b被排除出去,但是a、c的票力构成大多数(60%)。  

在这样的情况下,b会向a提出这样一个方案,a:80%,b20%,c:0。此时a和b所得均比刚才c提出的方案要好,但c成了一无所有,但a、b票力综合构成多数(90%)……这样的过程可以一直进行下去。  

最终的分配结果会是怎样的呢?夏普里提出了一种计算权利的度量。他给出了一个衡量博弈方先验实力的方法,根据他的理论求的的联盟者的先验实力被称之为夏普里值。

夏普里值是这样的一个值:在各种可能的联盟次序下,参与者对联盟的边际贡献之和除以各种可能的联盟组合。

关于夏普利值更多的内容可以查阅:
https://wiki.mbalib.com/wiki/%E5%A4%8F%E6%99%AE%E5%88%A9%E5%80%BC

以上是关于Shapley value比较学术方面的介绍,那如果应用到模型中被用来说明特征重要性时应该如何计算呢?

针对每一个特征(x),计算该特征下面每一个样本取值对预测结果的影响程度,然后对所有样本的影响程度求均值,就是这个特征的对预测结果的整体影响程度。

如下图所示,随着RM的增加,RM的SHAP Value值也是增加的:


下图是把模型中用到的所有特征的重要性全部绘制出来了,每一行代表一个特征,颜色代表特征的取值大小,颜色越红说明这个特征的值越大,横轴代表
特征取值对预测结果重要性的影响:


下图是把每个特征内每个样本对预测结果的影响程度取均值,得到每个特征的重要性:


关于SHAP Value的计算在Python中有现成的库可以使用,github链接如下:

https://github.com/slundberg/shap

以上就是关于基于业务解释的特征重要性计算方法。

基于业务解释的特征重要性计算相关推荐

  1. python随机森林特征重要性_基于随机森林识别特征重要性(翻译)

    博主Slav Ivanov 的文章<Identifying churn drivers with Random Forests >部分内容翻译.博主有一款自己的产品RetainKit,用A ...

  2. 随机深林-特征重要性计算方式

    特征重要性 一个数据集中往往有成百上前个特征,如何在其中选择比结果影响最大的那几个特征. 这里我们要介绍的是用随机森林来对进行特征筛选. 用随机森林进行特征重要性评估的思想其实很简单,说白了就是看看每 ...

  3. 随机森林特征重要性计算_R语言随机森林模型中具有相关特征的变量重要性

    原文链接: http://tecdat.cn/?p=13546​tecdat.cn 变量重要性图是查看模型中哪些变量有趣的好工具.由于我们通常在随机森林中使用它,因此它看起来非常适合非常大的数据集.大 ...

  4. 如何用Python计算特征重要性?

    特征重要性评分是一种为输入特征评分的手段,其依据是输入特征在预测目标变量过程中的有用程度. 特征重要性有许多类型和来源,尽管有许多比较常见,比如说统计相关性得分,线性模型的部分系数,基于决策树的特征重 ...

  5. 特征重要性与shap值

    在模型的训练过程中,往往会需求更加优异的模型性能指标如准确率.召回等,但在实际生产中,随着模型上线使用产生衰减,又需要快速定位问题进行修复,因此了解模型如何运作.哪些特征起到了关键作用有着重要意义.同 ...

  6. 数据挖掘#特征工程(二)特征重要性及可解释性总结

    在打比赛的时候一直贯穿的思考,大概就是判别各个特征的重要性. 在建立模型之前,特征重要性能够帮助训练模型,防止过拟合,提升模型的RUC效果. 建立模型之后,特征重要性能够增强模型(集成模型 非深度学习 ...

  7. python get score gain_机器学习的特征重要性究竟是怎么算的

    最近将主流模型的sklearn的代码撸了一遍,特别是计算特征重要性这块仔仔细细了解了一番:常用算法中xgboost.gbdt.randomforest.tree等都可以输出特征的重要性评分,下面着重记 ...

  8. 特征重要性计算方法及神经网络的特征重要性

    这是我第63篇文章.这篇文章主要简单讲一些常用特征重要性计算方法及神经网络的特征重要性计算方法. 1 几种常用的特征重要性计算方法 1.1 树模型特征重要性 像xgboost.lightgbm等树模型 ...

  9. 树模型特征重要性评估方法

    前言 在特征的选择过程中,如果学习器(基学习器)是树模型的话,可以根据特征的重要性来筛选有效的特征.本文是对Random Forest.GBDT.XGBoost如何用在特征选择上做一个简单的介绍. 各 ...

最新文章

  1. 报错解决:TypeError: Object type class 'str' cannot be passed to C code
  2. python语言入门w-Python完全小白入门指南
  3. 使用 Intel HAXM 为 Android 模拟器加速,媲美真机(转)
  4. Python Day34
  5. Learn in FCC(2)
  6. 这位超级电脑之父,年近 90 仍不愿退休
  7. 九州云黄舒泉当选StarlingX 首届TSC
  8. keras系列︱keras是如何指定显卡且限制显存用量(GPU/CPU使用)
  9. pr自学教程,为丢失的镜头注入新的活力
  10. ENVI学习总结(八)——图像镶嵌
  11. mysql servlet登录验证_使用Servlet和jdbc创建用户登录验证
  12. PHP在线教育直播平台源码 网课小程序源码 在线学习系统源码(PC+小程序+H5 )
  13. PDF转图片怎么转?分享PDF在线转换图片的方法
  14. 终于有人把“元宇宙”说清楚了
  15. 1.12 Windows程序的生与死 <深入浅出MFC读书笔记>
  16. ubuntu安装百度输入法
  17. c语言小游戏——弹跳的小球和简单的飞机游戏
  18. java字符串 与 ASCII码相互转换
  19. 自学软件测试1个半月上岸拿5个offer
  20. GAN训练不稳定原因

热门文章

  1. vhdl变量除法_VHDL语法总结以及编码风格(二)
  2. sqlplus中批量执行sql脚本(Oracle)
  3. Pandas数据结构简介
  4. 蒙提霍尔游戏 python 模拟
  5. JavaScript正则表达式-基础入门
  6. js中创建form表单
  7. 整合框架过程记录日志
  8. 超级日志服务器-Splunk
  9. 方立勋_30天掌握JavaWeb_(JSP+JavaBean实现)简单计算器
  10. sharepoint简单说明