陈小天:时间序列模型在金融领域应用实践
分享嘉宾:陈小天 数禾科技 资深算法工程师
编辑整理:帖雨薇 小米
出品平台:DataFunTalk
导读: 随着公司业务的不断扩大,包括金融领域在内的各个领域中,逐渐积累了大量的时序数据,通过时序数据建立模型和制定策略能为业务提供有效地帮助。目前,在面对日益增长的数据量和复杂度,依靠人工衍生处理特征效率低,局限性大。因此采用深度学习挖掘时序数据特征,使得时序数据在多业务场景的应用中,带来对模型效果的明显提升。
本文会围绕以下四点展开:① 业务背景;② 业务效果;③ 系统框架;④ 模型算法。
01 业务背景
首先和大家分享下时间序列模型在金融领域应用的背景。
1. 时间序列数据的现状
我们知道在随着公司业务的发展,会积累大量的结构化和非结构化的时序数据,例如:
- 设备埋点数据:APP中捕获的用户的行为数据;
- 传统的人行征信数据:用户过往在个银行等机构的不同时间的查询、借贷记录;
- 客服互动数据:用户和客服之间不同时间的沟通信息。
2. 时间序列数据应用的过去、现在和未来
行业内面对时间序列类数据的主流处理方式为人工衍生,衍生出类似近三个月、近一年等对字段进行加总的特征,通过加工好的特征再构建业务模型。这种方法在应用时间序列数据时会存一些问题:
- 特征处理效率低,思路局限,类似于设备埋点数据,时间戳的颗粒度达到毫秒级,手工衍生特征十分稀疏,且单个特征的iv极低,难以建立有效的评分卡;
- 在大量特征加工中可能会出现维度爆炸,继续衍生手工特征的边际价值越来越低,导致模型效果达到瓶颈。
因此,目前采用深度学习方式跳过人工处理这一步,直接给业务模型赋能,提升业务模型效果,具体从以下三点实现:
- 使用深度学习序列模型丰富了对时序数据的表征,补充了手工特征未充分挖掘的信息;
- 加入了embedding和attention技术,提高了序列模型表征能力,增强了模型对业务指标的贡献;
- 建立了一套泛用型时间序列模型框架,完成了相应的工程化代码。
在未来,时间序列数据还会发挥更重要的作用,希望可以建立一整套时间序列数据的应用体系,实现从数据端到业务端的端到端处理;完成手工特征与深度学习互补共生的数据生态体系,实现更有深度的人机交互。
02 业务效果
接下来具体展示一下目前自研两个模型的效果,分别是人行征信模型和埋点行为模型。
1. 模型效果
首先,针对人行征信数据和埋点行为数据分别训练baseline模型,baseline模型为目前线上使用中的业务模型,时序数据的特征衍生依赖人工的业务经验,主要应用于贷前审核和反欺诈场景。
然后,用深度学习模型对同样的数据挖掘训练stacking模型,stacking模型是挑战者模型,除了baseline用到的特征,它还加入了时间序列模型的评分作为特征,在auc和ks上都有比较明显的改善,提现了时间序列模型的边际价值。
以下两类模型的具体效果:
2. 工程效果
现阶段已将以上一套自研算法集成为python包,适用于大部分时间序列表单处理,可实现将数据简单处理后就能实现建模,是一个自动化极高的模块,实现了:
- 高泛用:同一套代码适用于不同场景和数据源,无需修改源码即可完成模型训练;
- 高集成:集成数据预处理模块与深度学习推理模块,实现从原始数据到模型结果的端到端处理;
- 高效率:模块高度自动化,几乎不需要特征工程,只需简单配置,训练无需人工干预。
03 系统框架
这部分介绍整体的系统框架,以及算法的嵌入方法。
1. 上线方案
如上图所示,整个框架是分为模型训练以及业务真实上线两大部分。在训练部分,首先需要将整个时间序列数据的字段进行配置,配置后自动生成预处理模块,将原始表单数据转化为pytorch可以识别的tensor,pytorch模型会进一步训练、评估、调优。模型训练结束后,在训练部分的预处理模块和pytorch模型会直接嵌入到线上的系统中,换句话说,将预处理模块和pytorch模型处理线上数据生成子模型分,与之前特征平台的衍生特征进行融合,生产新的模型(任意业务模型),最后导入到决策引擎中。这种处理方式,不会破坏系统原有的结构。
2. 业务适配
具体介绍一下这套框架的实现。
这套框架的建立之初,目的是实现更好的人机交互。如上图所示,首先需要人确定使用场景、寻找相应客群、定义事件、针对不同事件选择字段,将上述内容配置好以后传输到配置器模块,配置器模块生成一个预处理模块对表单数据进行预处理转化,最后将转换好的数据和模型一起进行训练、评估、调优。
04 模型算法
1. 技术处理
举个数据预处理的例子:上图中第一个表单是从人行报文中截取的一小段原始数据,每一行为一个事件(item),每一列是一个字段(field),是一个完整的时间行为序列表单。下一步,需要将表单归纳总结,进行标准化处理,将类别行变量映射到编码上,时间型变量进行时间间隔提取,时分秒的拆分以及标准化,数值型变量进行归一化处理。接下来将已经处理好的数据转化为tensor数据用模型编码器编码,即得出每个事件的编码,至此处理完成的数据供任何模型使用。
2. 模型框架
接下来介绍一下模型框架。举个例子:一个用户的原始数据是一个表单,将表单预处理为pytorch可以识别的tensor,纵向是事件,横向是字段,第一步,需要对数据的每一个格进行embedding,生成一个三维张量,进一步对张量进行压缩,压缩过程分为两步,首先使用Filed Aggregation对字段进行压缩,得到一个事件的单独向量,再使用Item Aggregation对时间维度进行压缩,最后将整个时间序列转成向量,最后用一个全连接层转化为模型的输出。
① 模型框架-Embedding
下面具体介绍一下算法框架中的Embedding部分,第一步对类别型变量进行embedding,由于类别型张量每一值都为整数,因此,将每一个类别型代码都映射成一个向量;对于数字型张量,将每一个张量都单独形成一个向量;将类别型和数字型都转为向量后再连接起来,构成三维矩阵;时间张量进行单独处理,进行升维和linear处理之后,最后得到时间表征的矩阵。
② 模型框架-Filed Aggregation
接下来具体介绍一下算法框架中的Filed Aggregation部分,该层为字段的加总。在上层的处理中, 类别型和数字型形成的三维张量通过attention和query的操作降维,形成一个矩阵,再与时间特征的矩阵相加得到一个新的矩阵,称为事件的矩阵。
③ 模型框架-Item Aggregation
最后具体介绍一下算法框架中的Item Aggregation部分,将上一层处理得到的矩阵直接放入transformer encoder中进行提取,再使用一个attention和query的模式加总,得到每一个时间序列向量的表示,再加单个或多个的linear层输出模型。
3. 模型总结
在模型开发和训练中的一些经验总结:
- 对于风控领域的应用,参数层和层数不用很多,参数量和层数不用很多,emb_dim=8,nhead=2,transformer_layers=1,即可得到较好的效果;
- 有多个序列时可以单序列建模出分,然后与业务模型融合,既能增加可解释性,又基本不损失精度;
- 将字段的缺失值和padding单独编码,并学习参数表示,能提高模型泛化能力。
未来的展望和可发展方向:
- 嵌套序列:序列的每个item也是序列;
- 异构序列:序列的每个item类型不同;
- 多模态输入:序列的item本身,甚至item的field可以是语音或者图片。
分享嘉宾: