内在可解释模型之 RuleFit
文 | 何悦 (机器学习算法专家)
本文来自索信达控股旗下的金融人工智能实验室团队,微信公众号(datamargin)将不定期推送原创 AI 科学文章。我们的作品都是由实战经验丰富的 AI 科学技术人员或资深顾问精心准备,志在分享结合实际业务的理论应用和心得体会。
可解释机器学习领域既包括以树模型,广义加性模型为代表的内在可解释模型,也包括对复杂模型的事后解释方法。内在可解释模型在精度上会稍逊于复杂模型,但是本身具有强大的解释性,在金融银行业等风控领域也是非常有应用前景的。本文要介绍的 RuleFit 模型属于内在可解释模型,相对于逻辑回归,决策树等传统模型,RuleFit 精度更高,同时解释性很强。索信达 AI 实验室后续也会介绍一系列内在可解释算法,如 Falling Rule Lists 等。https://xie.infoq.cn/article/607cfc7e17a80adeb64d61947 (已发布)
导读:
1. 背景导语
2. RuleFit 简介
3. RuleFit 优势
4. RuleFit 原理
4.1 规则生成
4.2 规则拟合
4.3 线性基函数
5. RuleFit 解释
5.1 规则变量和特征变量的重要性度量
5.2 最具影响力的输入特征
6. RuleFit 代码实践
6.1 评估模型质量
6.2 场景实践
7.参考资料
1. 背景导语
提到规则筛选, 人们常常联想到银行的风控场景。银行内部采用的方法是通过经验得到的规则筛选有潜在风险的客户。然而这样的方法非常基础以及局限,不仅是因为人类的经验是有限的,而且通过众多规则抓取到的空间是线性的。如何找到重要的规则,并抓取到规则之间的交互信息,并使用合理的方法来计算规则的重要性是亟待解决的问题。
RuleFit 模型将树模型中的规则融入广义加性模型,先从复杂模型中找到具有代表性的规则,将其当成新的变量,并加入原始特征变量,一起入模来训练广义加性模型。规则天然的可解释性和广义加性模型的易理解性使得该模型被归入内在可解释模型。相对于逻辑回归模型,RuleFit 加入了规则变量的信息;相对于决策树模型,RuleFit 加入了线性回归部分。因此在精度上, RuleFit 也有提升。简单来说,RuleFit 主要包含两种模型,Rule Based Model 和 Rule &Linear Based Model。后者是前者的升级版,适用于银行里信噪比低的数据集。
2. RuleFit 简介
接下来将详细介绍 RuleFit 模型结构:
假设数据集中有 m 个样本,n 个特征。Rule Based Model 会先训练 M(M 不等于 m)个决策树模型,总共产生 K 个规则(表示为。接着将规则当成新的变量来拟合线性回归模型。目标函数如下:
拟合系数时, 在损失函数中加入 L1 正则化。经过变量筛选,留下个规则变量, 输出相应的系数,至此模型训练结束。
而 Rule &Linear Based Model 是在 Rule Based Model 的基础上,同时加入 n 个特征拟合线性回归,目标函数变为:
同样在损失函数中加入 L1 正则化来挑选重要的个变量。最终得到的新模型用到的变量是 w 个规则和 p 个特征,可以称之为规则变量和特征变量。
3. RuleFit 优势
看了上面的 RuleFit 简介,大家一定会有似曾相识的感觉。对的,你没看错,Facebook 在 2014 年曾提出算法 GBDT+LR 来解决二分类问题,并在工业界的场景中得到很好的反响。众所周知,GBDT 更适合处理稠密特征,将根节点到每一个叶子节点的路径提取出来,也就是上面 RuleFit 产生的规则。接着对这些规则变量进行逻辑回归拟合。
提取 GBDT 中的叶子节点产生的规则之后,数据将会变得高维稀疏,这时采用逻辑回归来拟合,效果会变好。具体的优势如下:
(1)逻辑回归算法简单,能够处理高维度稀疏数据。但是人工难以找到合适的特征组合。所以 GBDT 的叶子节点相当于是对原始特征进行了特征组合,将数据高维化,使其线性可分。
(2)GBDT 对连续特征划分能力强,可以找到有区分性的特征和特征组合。在逻辑回归模型中,将连续特征离散化之后入模可以增强模型的稳健性。
相对于 GBDT+LR 算法,RuleFit 对于规则的挑选范围更广,不仅仅是叶子节点,还会包括内节点。如果只有根节点到叶子节点的规则,会产生很多冗余的高阶交互项。而 RuleFit 中加入了从根节点到内节点的规则,会抓取到低阶交互项。同时升级版的 RuleFit 还会加入原始特征进去。
由此可见,GBDT+LR 的优势 RuleFit 全都保留,同时 RuleFit 在此基础上还有两大改进,一方面是包括了低阶交互项,另一方面是加入了原始特征的信息,使得模型的精度和解释性都得到了很大的提高。
4. RuleFit 原理
RuleFit 算法的运行流程如下:
训练过程主要分为两步,步骤一是训练 M 个基分类器(通常使用随机森林或者 GBDT),生成规则。步骤二是对规则加惩罚项进行线性拟合。如果想要升级版,则可以在原有的全部规则基础上再加入由原始特征构成的线性基函数,来训练模型。
4.1 规则生成
当我们构建一棵决策树模型时,从根节点开始到每个非根节点都会生成一条规则。
从上面的决策树图中,可以看到共有 9 个节点,8 条规则。
关于节点:
根节点(root node):编号 0
内节点(interior node):编号 1,2,4
叶子节点(leaf node):编号 3,5,6,7,8
由于同一个特征可能会在不同的节点分裂时使用到,为了更好的表示每一个分裂节点,根据变量和阈值来共同定义。从上图可见有 4 个分裂节点,分别是。
关于规则:
规则的定义是,从根节点到任一非根节点(内节点或者叶子节点)的一条路径可被当做是一条规则。上图中共有 8 条规则,分别是:从节点 0 到节点 1,从节点 0 到节点 2,从节点 0 到节点 3,从节点 0 到节点 4,从节点 0 到节点 5,从节点 0 到节点 6,从节点 0 到节点 7,从节点 0 到节点 8。
每条规则的具体表示如下:
那么每一条规则是要如何表示呢?
任一条规则的通用表示公式是: ,根据节点分裂时使用的不同特征类型,使用不同的示性函数。
对于连续变量,。
对于只有两个取值的离散变量,。
对于有三个取值以上的离散变量,。
以从节点 0 到节点 3 这条规则为例:该规则被 2 个分裂节点控制,因此该规则被表示为。即满足这条规则,则取 1, 不满足则取 0。
4.2 规则拟合
首先我们要有 M 棵树,随机森林等集成树模型可以实现。训练结束之后,收集好 M 个基学习器产生的全部 K 条规则,表示为 。其中是一个固定的值,
是第 m 棵树的叶子节点的数目。将每一个规则当成一个新的变量,进行拟合。每个规则的权重通过对损失函数加入惩罚项来拟合,最后得到新的预测模型:
目标函数中关于系数的估计是通过最小化加了惩罚项的损失函数计算出来的:
4.3 线性基函数
但是这些来自于树模型的规则难以近似线性目标函数,如。而且如果训练样本不够大,或者数据集的信噪比比较小,即噪音很大时, 可能得到的规则不是精准的。为了更好地找到特征与响应变量之间的关系,尝试把原始变量当做额外的基函数来补偿 rule ensemble。模型的精确度和解释性会得到一定的提高。
加上原有的众多规则变量,目标函数变成了
此时运用同样的损失函数,加入 L1 正则化,来重新拟合模型,会得到新的规则变量系数和线性变量系数。
5. RuleFit 解释
用 L1 正则化来挑选模型中的参数, 留下来的规则和特征有不同的系数。那么我们应该怎么来计算这些变量的全局重要性和局部重要性呢?下面将会以波士顿房价数据为例,该数据集中有 13 个特征,目标是预测房子价格。
5.1 规则变量和特征变量的重要性度量
入模的变量分为两部分,一个是规则变量(相当于原始特征的衍生变量),一个是 linear basis function 中的特征变量。从全局的角度来看变量重要性的计算方式:
(某变量)系数该变量的标准差
(1).对于规则变量, 其服从二项分布, 。例如,对于第 k 个规则, 表示数据集中满足规则的样本比例,相当于二项分布中的,即 ,从而可以得出
(2).对于第 j 个线性变量,其重要性
指的是的标准差。
对波士顿房价数据集使用 RuleFit,根据上述重要性的计算方式得到排名前 4 的规则和变量是:LSTAT(人口中地位低下者的比例),AGE(年龄),DIS<1.40&PTRATIO>17.9&LSTAT<10.5(到波士顿五个中心区域的加权距离<1.4 以及城镇师生比例>17.9 以及人口中地位低下者的比例<10.5), RM>6.62&NOX<0.67(住宅平均房间数>6.62 以及一氧化氮浓度<0.67)
从局部的角度来看样本中的变量重要性的计算方法:
已知每个样本是 n 维的,对于某个样本
在该样本维度上:
对于该样本的某个规则:
代表当输入样本后,第 k 个规则变量的值,该值为 1 或者为 0.
对于该样本的某个原始变量:
其中是样本中第个变量的取值,是特征在整个训练集中的平均值。
5.2 最具影响力的输入特征
至此,我们已经知道如何计算入模变量的重要性。但是这些规则变量属于原始特征的衍生部分。人们依旧很关心原始数据集中的特征的重要性。对于数据集中的原始输入特征,其既可能存在于规则中,也会出现在后加入的线性基函数中,所以计算的时候两个部分都要考虑到。是在每一个预测点中度量第个特征总的重要性,因为不仅仅具有特征的重要性,在规则中也会涉及到该变量。
是第 k 个规则中涉及到的特征的总数目。即如果一个规则中有两个特征,则重要性同等分配。通过这样的重要性分配方式,既可以抓取到规则中某些输入特征的重要性,也可以抓到线性变量的重要性。
展示在整个波士顿房价数据集中 13 个输入特征的重要性:LSTAT 的重要性排名最高,其次是 RM。
接着从局部解释角度来展示 Manchester 样本中各个变量的重要性:与全局重要性排名第一的 LSTAT 不同,可以看到 RM 这个特征在该样本中的重要性最高,接下来才是 LSTAT。
6. RuleFit 代码实践
6.1 评估模型质量
为了更好地看到 RuleFit 的效果,接下来将比较 4 种不同的模型表现:Random Forest, GBDT, RuleFit1(从 Random Forest 中选取 2000 条规则),RuleFit2(从 Random Forest 中选取 1000 条规则)。
在 100 个不同的回归数据集中,以绝对误差均值(absolute mean error)作为评价指标,100 个数据集会得到 100 个 absolute mean error, 计算其中位数,中位数越小代表该模型的性能越好。
由上图可以看到,RuleFit1 的表现最好,其次是 RuleFit2。接着为了看模型的相对效果,计算了 comparative mean error,基准是每次表现最差的模型,同样是 RuleFit1 效果最佳。
在 100 个二分类数据集中,计算了 100 个数据集在 4 个模型下的错误率(error rate), 可以看到 RuleFit1 的表现也依旧优于其他模型。但是从箱线图中可以看到模型表现并不是很稳定,可能是由于每次模型训练时抽出的规则具有随机性导致的。
同样地,也看了 4 个模型的相对表现,计算 comparative error rate,基准模型是每次表现最差的模型。
6.2 场景实践
在台湾银行的二分类数据集中,有 3 万个样本和 23 个变量,目标变量是预测客户下个月是否违约。对数据集进行简单的缺失值处理后,使用 RuleFit 从 GBDT 中提取规则后,加入线性部分进行二次拟合,训练模型。
模型训练结束后,我们可以看到提取的是哪些规则及其对应的重要性。根据重要性的排序,我们可以找到排名靠前的变量或者规则,供使用者解释,也可以尝试用在特征工程中,继续优化。
上图展示了重要性值靠前的 16 个变量和规则。第一列 rule 代表的是入模的变量和规则的名称,第二列是其类型,规则或者是线性变量,第三列是系数,第四列是支持度,代表有多少比例的样本满足该规则,变量类型全部为 1,最后一列是重要性值,也是我们最关注的数据。可以看到重要性排第一的规则是:PAY_0 > 1.5 & BILL_AMT1 > 2207.5 的重要性高达 0.53,系数为 1.81,代表着当用户的特征 PAY_0 大于 1.5 以及 BILL_AMT1 大于 2207.5 时,对模型的预测值有一个正的影响,即更倾向于在下个月违约。通过这种规则的解释,也会让使用者更加理解模型的预测方式,从而更好的理解结果。
7.参考资料
[1] Friedman, J.H., and Popescu, B.E.(2008).Predictive Learning via Rule Ensembles. The Annals of Applied Statistics.
[2] Friedman, J.H., and Popescu, B.E.(2003). Importance Sampled Learning Ensembles. Journal of Machine Learning.
版权声明: 本文为 InfoQ 作者【索信达控股】的原创文章。
原文链接:【http://xie.infoq.cn/article/ecc9d62fe302c74d8ea77dc4f】。未经作者许可,禁止转载。
评论