深度学习机器学习实战项目案例分析
本文根据平安人寿AI资深专家吴建军老师在平安人寿DataFunTalk算法主题技术沙龙 —“机器学习/深度学习在金融领域最新研究和应用实践”中分享的《机器学习/深度学习工程实战》编辑整理而成,在未改变原意的基础上稍做整理。
今天主要从以下几个方面进行分享:平安人寿AI应用技术概览,数据处理和编码,模型应用与实时服务,算法与模型训练。
首先讲一下平安人寿AI应用技术概览,首先分一个大数据平台开发,分为平台级的开发和应用级的开发。平台级开发主要有离线计算平台,实时计算平台,以及多维分析引擎等;应用级开发有数据采集清洗,统计报表开发,画像挖掘等。算法研究方面分为三个方向,第一个统计分析,金融数据比较复杂,需要投入大量的人力财力做统计分析,用的比较多。还有就是机器学习、深度学习两类方法,主要解决的问题有:机器学习主要解决分类与推荐、知识图谱、自然语言处理,深度学习解决量化精算、视觉模型,强化学习正在研发当中。后台系统分为两块,一个是组件类开发,一个是服务类开发。组件主要是服务框架、训练平台、容器平台,还有一些分布式存储组件。模型服务主要是针对这个应用来开发一些专用的系统,用专用的应用服务
对接。
上图是我们的平台架构,首先是数据搜集,主要依靠Kafka,对于老系统自有一套收集机制,数据搜集完成进入Hadoop和关系DB。数据清洗主要依靠hive和spark,hive实现hql,spark进行复杂的数据处理。除此之外还要做一些洞察分析,分为两块一个是单表快速实时分析,第二个是多表关联实时分析。单表主要用Druid  ES做多维,多表关联主要靠Presto  Impala。还有一些用matlab, SAS做精算量化模型,还用Tensorflow做深度学习,用Hbase,Redis主要做画像存储,提供实时查询,还有一些容器平台对外提供容器调用。
接下来讲下我们用AI技术干嘛,AI在金融领域用的还是很广,很多业务都是靠数据推动,金融对数据依赖性很强。具体应用有代理人管理,平安有百万级的代理人,利用AI算法管理代理人的招聘、销售、升级,还有智慧客服、智慧续收、智慧理赔、坐席等应用于很多场景。
数据是核心,接下来讲一下我们的数据以及数据处理情况。保险行业做数据挖掘遇到的挑战很多,第一个挑战就是决策周期长,低频交互,比如保险非日常消费品/非必需,消费决策过程比较理性。因此模型有没有效都要经过很长的周期检验,在这个周期内都将面临很大的风险。再一个数据比较复杂,稳定性差。数据复杂体现在首先业务线很多,每个业务线存储介
质也有很多,每个数据产生的场景也不同,数据种类差异也很大,有文本、LBS,还有一些图像的、自然语言的。还有一个成本比较高,互联网所做的模型都要经过A/B text,但是保险行业不能这样执行。
那么如何解决这些问题呢,大致从以下三个方面解决画像产生、质量检验、数据embedding。首先就是画像如何产生,接着对数据进行检验,因为获取的数据并不一定可靠,然后对数据进行embedding,做embedding的原因就是数据比较复杂,需要对数据提供一种规范化的表示。
hbase应用案例建立画像生产首先建立数据分层(ODS、DW、DM、MM),这种数据分层主要是偏业务,虽然没有技术难点但是将其建好不容易。然后做数据模式抽象统一,针对行为数据、事实数据和图像三类数据进行抽象统一。每天产生的行为数据很多,如保险打电话、理赔、网上点击按钮等,归类行为五要素,即什么人在什么时间对什么对象做了什么动作以及这个动作的强度。事实三元组即主语、谓语、宾语,对图像就做embedding。将数据抽象统一后做画像,画像有很多种做法,第一种就是作坊式生产,依据领导要求生存画像,这样比较累。目前标准是画像需求格式要标准化,从而实现自动化的生产机制,这样做的好处就是首先节省人力,需求可以重复利用。
接下来讲一下数据质量如何检验,质量检验一直是个难点,其指标很复杂,时间很差,很难判断计算是否准确。主要从三个方面入手,首先稳定性,给出的模型虽然很难判断其稳定性但是需要知道其不稳定性多大。第二个观察其重要性,有些指标现实中很重要但是模型中表现不重要,这种建模出问题,因此需要判断变量在模型中的重要性,评价指标有IV值、卡方、变量重要性(线性模型中的权重、算法中出现的频率)。接着需要剔除相关变量,检验相关性的指标有相关性系数、PCA/RUFS、方差膨胀因子,除此之外还会降维(PCA不够稳定,因此用了RUFS算法)。为检验稳定性开发工具spark+python,实现数配置灵活,一键式输出结果。
数据embedding方法有很多,如图像embedding、单词embedding、图节点embedding。首先将结构化数据人工组合,然后用GBDT做特征组合,以及FM编码,利用低置分解的向量来做特征表示,现在可以利用KB编码。对文本数据主要利用TF/IDF模型,word2vec,图像数据进行SITF以及CNN。主要的工作是对数据做embedding,与后面的数据结合起来,使其更加统一。
接下讲一下如何进行算法和模型的训练,目前主要的还是基于分布式或者并行机器学习。在
面对数据量大,模型复杂、参数大,并行运行平台能解决这个问题,平台要求通信高效、容错可靠、描述能力强,一个机器不能运行所有算法的原因就是其无法描述这个算法,因此需要一个描述能力强的平台。目前并行的种类有模型并行、数据并行,还有混合并行。目前用的比较多的是数据并行,将数据先切分,分配到每个worker计算,得出一个梯度传入模型,模型将其汇聚,返回一个worker,然后利用worker进行本地模型的更新。
分布式机器学习需要描述能力强,简化下就是编程范式问题。如面向过程、面向对象不同,这里的范式是这种范式是否能完整描述算法。范式最早的是MP,主要实现是MPI,但是它只是提供基本的通信原语,编程几乎无限制,编程门槛高,没有错误恢复机制。后来又MR,主要是研究Hadoop,编程简单,能容错,但是限定严格,不灵活,通过磁盘交换数据,效率低。接下来就DAG(有向无环图),典型实现就是spark,内存计算,限定放宽,可以灵活实现复杂的算法,不能有环,不能支持大量迭代,目的是容错。再者就是计算图,tensorflow是典型代表,好处就是自动求微分,支持任意迭代,可以实现绝大部分NN算法;缺点就是容错能力弱。后来出现了动态计算图,主要代表有Torch,还有tensorflow也支持,支持计算中更改图,而且很实用RNN。
参数更新模型解决的是在一个集中如何将worker同步起来,首先的方法是BSP,主要有Pregel(未开源)、Spark,如果有10个worker完成一轮将参数传给中心节点,更新完再传回来,这种方式比较慢,但是能够保证收敛。然后就是ASP,全异步,因此主要用来单机多核,利用共享类型存储模型;这种方式是随机更新无收敛保证,如果模型是高度稀疏,冲突较少,有一定的正则化效果。SSP的典型实现是petuum,最快的worker和最慢的worker的bound超过阈值时同步参数,好处是速度快,保证收敛。说道参数更新,就不得不说一下ps-lite,它是基于PS,特点是模型依靠分布式存储,支持海量参数,再者支持以上三种更新模式。这是机器学习需要了解的两个方面。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。