回顾·深度学习的可解释性与低频事件学习在金融领域的研究与应用
大数据、算法的交流学习平台 圈内人都在关注
本文根据平安人寿数据科学家董厶溢在平安人寿&DataFunTalk算法主题技术沙龙 —“机器学习/深度学习在金融领域最新研究和应用实践”中分享的《深度学习的可解释性与低频事件学习在金融领域的研究与应用》编辑整理而成,在未改变原意的基础上稍做修改。
今天分享的内容主要从以上五个方面介绍,首先讲一下主流深度学习算法在金融领域的局限性,然后针对这些局限性所做的探索解决方案,以及在探索过程中主要围绕可解释性和低频学习这两点的展开讲解。
直接进入正题讲一下深度学习在金融领域其局限性表现在哪些方面。金融领域面临的问题可能和传统互联网公司面临的问题可能不一样,比如深度学习可以大致分为三块:卷积神经网络、递归神经网络、深度神经网络。其优缺点都应该很明显,简单讲卷积神经网络对空间结构相关性的探索比较强,递归神经网络对时间相关性探索(时间序列)较强,深度神经网络在全局相关性探索较强。它们的主流应用都集中在计算机视觉、自然语言处理等方向,特点是先验知识很鲜明。要识别猫或狗,其特征很明显,可以构建这样的数据集,在自然语言方面,词汇是有限的,文章也是可以无限挖掘。但是在金融领域,绝大部分没有先验知识的,不知道样本的特征区分好不好,有时通过长期的积累可能会知道知识比较明显。比如信用方面,一个人总是不还款就有问题,这可能是一个比较好的先验知识,但是这样的知识非常少,无法发掘。同样的我们无法造数据,如果要对宏观经济走势的预测或股指感兴趣,但是我们无法把股指造出来,不知道成交量与股指的点数到底有何关系。除了可解释性不强外还有对专业知识的匮乏,因此在深度学习做决定时一定要知道为什么,更愿意知道模型如何做决定。
那么围绕这些难点如何解决这些问题呢,首先介绍下我们的难点问题。可解释性问题、低频时间、、稀疏性、特征的时变性和数据的有效性,以及数据的不可扩展性,今天主要围绕这两个点,其他四个点也是很重要的。在可解释性方面的探索分为两个方面:局部特征探索和敏感性分析,这两者是相辅相成的,局部探索其实是对可解释性做了不可磨灭的贡献,今天主要介绍一些树类的贡献。敏感性分析主要在方差分析算法上面,低频学习有很多类别可以做,今天主要是围绕助力机制,主要介绍一些最新的研究情况。
首先介绍树模型为什么在可解释性方面做了很多贡献,之所以不说作用因为它不是直接在这个体系起到可解释性的作用,但是它可以做一些解释。目前算法主要分为深度学习和非深度学习,主要围绕决策树。深度学习拟合能力非常强,但是解释能力较差;决策树可解释、训练快,但是拟合能力受限。之前两个流派很对立,后来两者去相互学习,利用各自的优点。如在解释方面Jefreeheten提出asab Tree算法,大致学习深度学习在图像学习如何做预测和分析,做树模型也在拟合能力方面做出相应的探索。还有阿里巴巴、以及其旗下的卖金服在树模型探索和与Deep learning结合方面也做了很多工作。结合我们自身,我们的解决思路是利用树模型很好地可解释性对局部的探索能力去挖掘特征,将价值发挥到最大,深度学习去探索局部特征还是有一些问题,主要是低频特征影响。利用混合架构wide&deep或者其他对稀疏化或者稠密的数据进行学习,最后利用敏感性分析对其进行解释,对预测值归类的依据是什么。为什么不直接利用深度学习对其敏感性进行分析呢,敏感性分析有一个问题就是重要性差异不大,敏感性不强。而且在金融领域有个特点就是没有先验特征,很难有明显特征区分类别,这也是树模型所起的作用。
接下来介绍下如何将树模型利用到极致。Wide&Deep模型是16年提出的,将稀疏数据和稠密数据联合训练,找到低频特征,我们就是基于这个思想实现相关算法和模型。不同的树模型有不同的特点,但是很多算法都是基于GBDT算法,以chartputs为例,涉及不同的subsimpling和subcorling局部特征采取和垂直种子选取,最后结果是完全不一样,因为会从很多角度去挖掘不同数据组合信息。那能不能将所有算法都拿来使用呢,如同周志华教授提出在gcForest中不外乎两条树是完全随机的,可以有更大的探索空间。我们也是尽量用所有不同的模型,将相似的节点合并构成一个知识库,这个知识库有很多无向边将之间的特征关系连接,与节点配合形成一个大的体系。这样做的一个好处就是可以忽略算法、数据,而在知识库中绝大部分的特征是无用的,会有很多干扰。
我们的业务范围大都几种在金融领域,金融领域有个特点就是数据有时变性,几乎没有一个特征是稳定的。因此我们可能会做一个简单的筛选,一般用规则法和评分法将明显无效特征做一个筛选。其核心就是分布的稳定性以及重要性的稳定性和良好的趋势性,评分法能够更加量化,有些时候很难衡量分布稳定和重要性稳定该取什么样的比值,最后直接用评分法打分。有时训练一个模型会引入上百个树模型,支点会有很多,叶子节点有时会有几十万个,就算通过筛选也会有几万个特征,如果进入深度学习会崩溃。因此还要进行进一步的筛选,借助的是Auto-Encoder编码器压缩,目的是去掉比较相似的特征。虽然很多算法不同,但是其分裂方式是很相似的,会找到很多相似的叶子节点,引入的模型越多,产生的相似节点就越大。以两个相同的GBDT模型引入差异参数最后会产生1-2%的相似叶子节点,重要的叶子节点重复会严重影响模型精度,权重估计也会出现很大的偏差。就会出现你认为这两个东西很重要,但是这两个特征确实相似的。在金融领域描述一个问题,感觉是从不同基础数据衍生出来,但是其逻辑可能会是一样的。
基于上面这个问题,我们基于Wide&Deep架构依据自己业务需求构建了一些模型架构Conditional Multi-Fields Deep Neural Network。将稀疏化的数据做一个压缩,取得Auto-Encoder编码器压缩的中间隐藏层作为输入,正常稠密格式就用正常格式,如果有时间连续的特征会有skm做一个embedding,然后利用DNN进行训练。虽然架构有很多模型,但是并不需要使用所有模型,有时只用左边的模型就能满足需求。如果直接利用Google的原始架构Wide&Deep算法,不同的模块运用不同的优化算法,如果权重更新调整不好,整个训练过程会出现很大的扰动,会出现距离的波动,很难出现稳定状态。这样出现的原因是在联合训练时梯度更新不一致,会出现左边调整好出现一个扰动就会破坏左边的稳定,最后通过coding later去限制优化的比例,使更新的比例尽量一致。
敏感性分析偏统计方面,在工业领域用的比较多,在纯计算机领域用的比较少。一个输入性的变动扰动,输出是怎么样变动、以及变动的程度是怎么样的,这种情况敏感性分析用的比较多。敏感性分析用的不多但是并不陌生,如线性回归,在信用卡评分模型中,对特征做WE分箱,会用线性回归,会看权重判断输入对输出的影响程度是多少,这也是敏感性分析的一部分。再者再深度学习,对抗样本在图像识别的干扰作用,背后也是利用的敏感性问题,再深度学习领域会将局部权重无限放大,会出现显著特征,如果攻击点正好对应显著特征,结果会出现很大的偏差。
Worst case analysis、可靠性分析这两个分析更偏工业性些,在金融领域比较罕见。敏感性分析在工业领域尤其是量化领域应用较多,引入敏感性分析目的就是解释黑箱的DN。DNN也是一个黑箱问题,知道大概机理,但内部如何运作原理不清楚。其实在这块早就有研究,真正火起来是在15年,《Sensitivity Analysis for Nerual Network》的作者在10年就提出来,讲述了如何利用敏感性分析去阐释神经网络。敏感性分析目的是将变量的敏感度量化起来,规划为线性回归的模式,提供重要性指标,利用线性加权。常用的方法有偏微分、回归模型、One-At-A-Time、方差分析、散点图、Meta-model,前面三个为一阶分析,变量对其自身变化敏感性分析,这样应用的假设是变量之间基本没关系。在金融领域变量间基本都有关系,会用到方差分析和Meta-model,散点图是为了直观分析。这是为了适应应用场景非线性、局部相关性(局部高阶)、高纬度、可量化、模型复杂、难解释,今天主要是将Analysis of Variance和Gaussian Process,这两块可以独立模块,后续会将其联合讲解。
方差分析理论基础是任何一个模型都由一些常量关系加一些单变量输出以及变量两两输出等,比如输入一个X,输出一个Y,fn是差值,如果扰动xi, fi是如何变化的。如果把所有的方差放在一起,改变一些参数,输出扰动变化程度是多少,这就是方差分析的工作。方差分析由于输入的参数不同,最后会有很大差异,因此利用Sobol Index技术将其归一化,就是用求出的方差与自身方差做比值。方差分析的优点:适用于复杂非线性模型,敏感度可以被量化,取值范围通常在[0-1],可以细化到对某个参数/变量取值区间敏感性进行度量,能衡量依赖关系;缺点是:需要足够多的数据才能保证计算精度,随着维度增加,需要的数据也指数级增长,对重要性不够强的变量/参数区分能力较弱。
针对方差分析的缺点如何解决呢,尝试用一个模型去描述模型的分布情况,用一个模型去监测变化的状态,利用一个模型学习模型进行替代。这样的模型有很多,我们选择是Gaussian Process,它输出的是你输入一个变量所产生的期望的均值以及方差,这也是敏感性分析所需要的信息。不用朴素贝叶斯或者其他原因是我们的对象是复杂的非线性模型,朴素贝叶斯拟合能力有限,Gaussian Process需要设置很多的操作树和function,这些function是为了拟合变量的均值和不同情况出现的方差,能够很好地拟合现实中的分布。其原理是基于朴素贝叶斯,将变量进行了更复杂的空间映射,找出后验的权重分布,用Inference 去估算由输入/参数改变带来的输出在分布上的改变,其具体原理和思路可以参考论文《Probabilistic Sensitivity analysis of system availability using Gaussian Process》。敏感性分析核心就是输入的变化对输出有怎样的改变,可以用很多方法得出近似的重要性。深度学习如果从机理上证明是很困难的,大都是在选取适合自己业务情况下用不同的方法去阐释。
低频事件在金融领域太过常见,在做量化股指期,需要对拐点期进行预测判断,拐点出现的次数非常少,特征也很模糊。在反洗钱领域,拐点出现也很稀少,但是有些特征会很明显,如果直接拿模型去学习是无法得到结果的。我们之前一直尝试用attention做低频事件学习,但是有一个难点低频事件很难出现,而且很多是基于先验知识,在金融领域先验知识又很少。近期由谷歌研究员提出的《Attention is all you need》与 Deep Mind 团队的研究成果《Relational recurrent netrual network》将Attention机制对特征记忆的延续性做更好的探索。这两篇文章主要解释的是时序相关,但是我们领域不需要关注时序相关,只对某一些我总分错有很重要的数据样本感兴趣。为了提高对低频事件的学习能力,我们基于上述研究成果设了一套的适合自己的算法,目的为了将容易被分错的重要的小数据样本中的显著特征进行学习,并将学到的特征进行保留与传承。我们将该算法称为《Low Frequent Events Detection with attention mechanism》。Scaled Dot-Product Attention很早就开始用了,就是给你一个请求,对应会有一些key,观察每一个query对key的响应程度是多少,将这种影响随value传递下去,最后改变value实际输出值。Mult-Head Attention是多个组合,做了一些线性变化,目的使特征更加丰富。
在《Relational recurrent netrual network》中利用了memory core机制,给一个以前对数据特征分布情况,给一个当前输入情况,两个一起考虑学习。这种如何和我们低频事件学习相结合呢,attention机制是对query形成一个key矩阵,然后计算权重归一化处理去影响输出值。我们的模型是对一个输入,经过MLP最后输出结果,加入attention机制后,在MLP模块会做一个二分类,将中间的embedding提出来进入discriminator,机制类似于gate网络。利用其它特征去判别那些分对了哪些没分对,就可以知道你对那些样本敏感那些不敏感,通过设置阈值,将分错的特征放到memory core中学习进行修正。找到那些分错的独有的但又有共性的特征来纠正,对output进行纠正,这就是模型的整个思路。MLP是中间隐藏层出现的embedding,利用discriminator进行分类,从空间改变样本分布情况。
在整个优化过程中分为三块,一个是正常MLP优化过程,discriminator优化过程,以及MC优化过程。分为三个损失函数,第一个实际真是情况,第二个是分没分对的情况,经过mc优化后拟合的真是情况。模型训练需要注意的事项有:(1)由于第二个损失函数需要依赖于模型的预测结果。因此模型的训练过程由3个独立的模块异步训练。(2)由于各个模块的目的不一样,因此所用到的优化算法和优化策略所有不同。(3) 选择合适阈值t对模型训练很重要(推荐t>0.8)。(4) 选择适当数量的Query和keys。(5)MC模块仅会使用满足判别器要求的样本。(6) 各个模块训练开始时间不同:当MLP训练模块趋于稳定时,激活discriminator的训练;当discriminator训练趋于稳定时,激活MC模块评估的方法主要有:Discriminator的评估除了看损失值以外,还需要监控Accuracy的变化。损失函数(1)与损失函数(2)之差可用于评估MC模块的作用。
下面介绍一个案例,寿险内部某推荐任务,2分类目标(0或1),样本总量170W,目标样本39W,不算很低频。算法架构:主框架基于Conditional Multi-Fields DNN, 稠密数据部分使用了:(1)DNN(2)Attention Mechanism 训练细节:在引入Attention机制后,在MLP模型训练到1000步后,激活了判别器(Discriminator),并对判别器进行了预热训练。在判别器Loss稳定后,激活MC模块并进行预测训练。随后模型每轮进行异步更新。基本很平稳没啥区别,但是单看accuracy慢慢增长说明模型取得一定效果,但是没有证明要达到多少才能证明有效果,目前定义要高于本身MLP准确效果。同时difference改变越来越大就说明memory模块起作用。
模型结果(1)由于数据样本的标签并非1:1关系,基于数据的基准准确率为77.06%;(2)利用DNN处理稠密数据时,模型整体准确率为82.35%(得分前23%的预测样本为正样本)。但是不是按0.5,需要根据样本实际情况定义阈值;(3)其中正样本的预测准确的样本约为24W,准确率约61.53%;负样本预测准确率为88.54%;(4)判别器能够准确区分91.04%的样本被判断对错的情况。换句话说,在被错误归类的样本中,有8.96%的样本在当前低维映射空间下与被归类正确的样本极其相似;(5)从结果(2)和(4)的结论中可以得出,有机会被MC纠正的样本量的上限为8.69%;(6)经过最终统计,有6.97万的样本通过MC得到的纠正。占总样本的4.1%。其中正样本占2.1万。得到纠正的正样本占总正样本的5.38%。
最后总结一下算法局限性:低频事件的挖掘一定需要和实际情况结合起来,不是所有的场景都适合使用此类算法。归纳起来,需要满足以下情况时,才可以考虑使用该算法。① 低频事件需要有一定的数量(饱和度不能过低)且存在共性② 低频事件的特征不能与高频事件的特征过度相似③ 主模块(MLP)的准确率不能过低④ 判别器(Discriminator)的分类效果需要保持一定的精度,至少应该稍大于模型整体的预测准确率。但是算法也有很多优势, 与单一的attention结构相比,有以下优势。① 采用判别器,将样本进行区分,主要针对被错误归类的样本。而非直接使用Attention模块。② MC模块仅对小量且重要的样本进行学习,而非整个数据集,降低了学习难度,提高了学习的效率。③ 异步训练使得训练更加稳定,针对不同的网络结构、数据结构与功能采用不同的优化策略。④ 记忆模块将对整个低频数据集的特征进行学习,并将学习到的信息有效的传递下去,从而更有效的对数据特征特点做出区分,增强泛化性。
—END