导读:唐庚阳老师来自百信银行大数据部,主要负责信贷领域相关交易场景下的风控特征的加工、部署还有评价的工作。本次分享主要从下面四个部分展开:
01
踩过的雷
1. 早期情况介绍
早期特征加工主要使用Java方式进行定制化开发,随着三方数据种类越来越多,渐渐不能满足这个业务部门对于特征迭代的效率的要求。我们尝试通过Java的算子支持风控系统后台通过函数参数或者维度的形式配置以优化开发效率,这样做开发速度得到了一定的提升,但是整体的上线周期以及上线以后数值获取的一致性还是存在较大问题。后面尝试引入Flink做一些Flink SQL实现变量的加工,但是Flink SQL作为一个流SQL ,它对标准SQL的支持以及其 SQL性质还不是那么的一致。
2. 问题剖析
尝试过程中暴露了一些问题,可以大致分为四类:
前两个问题主要是开发模式导致的,后两个问题则是因为特征管理缺失。
① 上线慢
因为是两套代码,所以在理解和编写的时候,效率比较低。在百信银行业务开展初期,大部分的特征处于冷启动的状态,特征主要来源的方式还是策略或者模型人员的专家经验,通过原有的经验形成一套文字描述为主的特征需求,然后把这个需求交由开发同学在系统当中实现。经过一段时间数据积累,业务人员就可以通过在交易环节中产生的数据,还有一些结构化的数据做一些特征的挖掘。方式还是SQL为主,辅助用一些Python。
从冷启动到热启动方式,不仅仅会产生一些中文描述的需求文档,还会留下特征的一些实现逻辑,但是在上线到线上的时候,特征的加工方式还是以Java为主,因此整个过程会经历比较传统的需求评审、排期、开发、测试、部署这一套标准流程。
在这个过程当中,由于需求方看到的数据大部分是结构化的,故他对在接口之间传输的数据结构并不是那么清晰,加上Java开发人员对特征的理解是有偏差的,因此可能导致开发在看中文文档产生和需求方不同的理解。在开发完毕之后,可能会有一个很漫长的数据核对的过程,导致整个特征上线的流程拉长。
② 复用难
以Java的表达式或者jar包形式的特征上线之后,对于业务人员来说是一个黑盒,会直接导致业务人员在用特征的时候,很难掌握特征内部逻辑,如果再遇上文档管理欠缺,这些算子的函数逻辑可能都需要扒源代码去看,自然而然的就降低了特征的复用性。
③ 无下线
在业务开展初期,特征、相关制度与配套的评估还是较为欠缺、不够完善的。整体业务的节奏还是以快速接入和上线为主,在越来越多的三方特征介入之后,接口、特征、节点还有策略之间的关系网就变得非常复杂了。可能会出现衍生之上再产生衍生,依赖之上再产生依赖,关系错综复杂。特征有效性也需要定期进行复盘,以便特征更好地进行迭代。特征的调用逻辑的复杂以及盘点的缺失,会导致特征再下线的时候问题暴露得特别明显。
④ 缺监控
进行特征复盘的时候,策略和模型人员做了很多机械化、重复性的工作,导致时间成本、人力成本都很高。即便是定位到可以废弃的特征,但在下线的时候,虽然系统提供了检查的方式,但这种检查还是缺乏整体全局的视角,还是可能出现一些人为的操作风险。
--
02
解决方案1.0
在解决方案1.0中,思考的是如何在资源有限的前提下解决问题。主要依托现有的系统资源,没有进行新系统开发,解决了特征上线慢和复用难的问题。
资源永远都是有限的,如何满足需求让特征快速地上线,通过迭代的方式,先将重点问题逐个击破。
1. 加快上线速度
① 方案思路
② 前后变化
从整个流程来看方案上线前后变化:
原有的方式整个流程的环节比较多,参与的人员也很多,容易产生理解偏差,导致整个周期较长。所以对业务人员写的SQL或者Python代码进行简单的改造和性能测试,直接进行特征的部署,可以确保特征实现的语言是一致的,并且减少一些测试的工作。由于开发人员在离线环境实现过特征,所以在上线之后获取离线的特征的数值只要能与线上的符合,基本不会存在太多的问题。保持逻辑一致性之后,减少了测试工作量,降低了特征返工的可能性,这个举措在实际应用当中取得了很好的效果——特征上线的周期的频率,能够提升50%左右。
2. 优化需求评估
初步解决了特征上线的问题之后,接下来就是业务人员评估需求,在评估方面主要做了两件事情:
3. 优化特征评价
特征的表现分为两类,一种是特征调用情况,另一种就是特征数值情况。
做完这两件事之后,从业务反馈上来看,可以帮助他们定位出哪些特征是有价值的,哪些特征是可以下线的,便于他们做特征初步的筛选,反馈较好。
4、1.0任然存在的问题
1.0版本其实是在资源有限的情况下做的,还遗留下来一些问题。
问题主要是在特征整体的管理、加工方式以及性能方面。
举个简单的例子,因为特征是异步加工的,在缺少通知机制的前提下,它在加工和调用过程当中,类似于特征在调用和加工之间在进行赛跑,如果出现调用先到的情况,可能就会出现特征数据不完整的情况。
--
03
解决方案2.0
1. 建设特种工厂,完成特种全流程管理
百信银行针对特征的全生命周期管理,形成了从特征的注册、上线、评估再到下线,完整的管理机制。
① 特征注册
② 特征下线
特征下线一直是一个令人头疼的问题,下线前的评估不够充分可能会引发严重的生产问题。百信银行在这方面也作了一些工作,主要是做了一个严格的特征审批流程。根据特征的种类、级别、归属情况,做了一个特征下线的审批流程。在特征下线的时候需要所有特征涉及的相关方均收到这个通知,并要求主要负责人对其进行审批。
2. 特种需求统一收口,落地特种管理规范
从制度上和流程上消除特征下线因评估不足导致的风险问题,完成了特征的全流程管理。但是当需求不统一这种情况还存在的话,会出现“一人一把号,各吹各的调”的问题,所以需要特征需求统一收口,规范特征的落地。具体工作主要为把特征的需求制定一个标准的介入流程,形成需求的收口,便于对特征准入精确地把握,也更好地把特征管理办法进行落地。
3. 同步调用改为异步调用,有效应对流量激增
1.0方案还存在特征异步化调用的情况。
① 之前存在的问题
之前特征的获取方式基本上是异步化加工加同步调用,很多场景都是异步化的,即前端或者合作方都是异步的请求,但是特征调用是同步的方式,这样就可能导致前端的异步形同虚设,因为后端在获取特征的时候会存在同步超时的情况,如果一旦超时可能这次特征获取就是失败的,白白浪费了很多流量。
② 解决方案
通过引入用异步化请求和异步化调用的方式去解决这个问题。通过引入特征工厂,将特征获取从原来的同步变成了异步。这样做在系统资源不变的前提下,可以承接特征需求请求的量明显增加。
4. 精细化特征加工与调用流程
将异步化调用改造完之后,还要实现的是精细化的调用,以确保整个调用链路的执行效率是最优的,具体过程如下文所述。
① 存在问题:
从同步改到异步的时候,增加的节点/环节是很明显的。
② 解决思路:
通过引入了一个事件中心和一个调度中心,将异步加工的特征和异步通知进行了关联,即特征是异步加工的,通知也是异步的,所以需要将加工过程与通知过程做好挂钩。
③ 具体过程:
做好特征的挂钩,并且对特征执行要调用最优的路径,减少不必要的调用和加工耗时。整体流程为:
这个优化对于前端业务来说也有一定的好处,因为线程是一直在等待的,是个异步的过程,这样整个交易当中不会因为变量加工存在抖动或者超时而导致交易丢失,可以从根本上提升整个风控系统的交易吞吐量。
--
04
能否做得更好
目前大部分业务问题都找到了有效的解决方案,我们是否能否做的更好?用奥林匹克的精神去阐述就是要做到——更高、更快、更强。
1. 自助式特征开发,进一步降低特征使用门槛
接下来将着力自动化和智能化领域,降低特征获取门槛,优化人力成本消耗。
2. 自助式特征开发,进一步降低特征使用门槛
接下来期望使用智能化的方式帮助业务人员进行特征的筛选,前面的工作进行了特征的初筛,主要是对于特征的基本表现进行筛选,后面设想将这个评价过程做成自动化的,由于很多特征评估体系是相通的,这样可以减少业务人员机械重复的工作。
具体来说,接下来计划做这些事情:在交易过程当中产生了很多样本y,通过配置加定时的方式,可以生成不同的相当于y的样本包,对于样本包会有文字描述或者其他描述,通过基本特征信息,做一些基本衍生特征加工,例如缺失率等,之后通过模型训练,利用特征的表现使用模型(例如 XGBOOST)做重要性筛选,然后再将这个特征的IV值、KSI值、相关系数做一个输出,再将这些输出的结果做可视化的选型。最后,模型人员在平台上就可以直接基于样本包得到特征的一些表现,这样做可以释放更多的人力,加快模型和策略的迭代效率。
3. 整体规划应用
基于以上两个设想,整体设计一个特征应用,希望将特征的从挖掘到上线,再到分析这一过程形成一个闭环的平台,一站式解决业务人员的需求,降低特征成本的资源消耗,同时也通过提升特征迭代效率,进一步提升模型、策略迭代效率。
今天的分享就到这里,谢谢大家。
分享嘉宾:唐庚阳 中信百信银行
编辑整理:霍傲 九江银行
出品平台:DataFunTalk
01/分享嘉宾
唐庚阳|中信百信银行 大数据研发工程师
研究生毕业于班戈大学(英)。目前就职于中信百信银行,主要负责信贷类特征的开发、部署与管理;曾负责移动可视化项目、数据资产管理平台项目;获全行创新项目和个人创新奖。
02/报名看直播 免费领PPT
03/关于我们
DataFun:专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章700+,百万+阅读,14万+精准粉丝。
| 留言与评论(共有 0 条评论) “” |