编辑导读:如今,银行和互联网大厂的和合作越来越频繁。其中,一项重要的合作是联合建模。本文作者根据自己的一次风险联合建模的经历,从中总结出一些问题,希望对你有帮助。
最近雷帅慢银行着实愁坏了,行内消费信贷业务新增客户越来越少,活跃度也越来越低了。疫情长期结束不了,消费下滑经济下行,监管持续趋严,资产规模和质量都开始面临很大的增长压力。
雷帅慢银行寻思,这么下去不是办法,形势再差,也要人为,得主动出击去找优质资产。
怎么找,流量和质量都掌控在互联网大厂手上。
于是,找到了雷帅快大厂,你把优质用户给我,我们来做款产品,一起分润。
互联网公司都是在做流量变现,雷帅快大厂就爽快同意了。
win-win。
那快大厂怎么把优质用户给慢银行呢?
快大厂虽然自己也做消费信贷业务,也有内部风险评分。但风险是由用户和产品决定的,慢银行想要的是适合他们产品的优质用户,快大厂的优质用户虽然不错,但不是最优。
这就是合作中最重要的一环,联合建模。
慢银行提供一批有风险表现的用户给快大厂去匹配特征,风险是慢银行的,特征是快大厂的。
由慢银行同学去建模,有了模型之后就可以对快大厂的流量做精准风险评估了。
一般来说,谁用模型谁建模。
于是慢银行和快大厂分别成立了一个小组,两方各自指定了个负责人,专项对接该模型开发工作。
一、立项会议
小组成立之后,马上开了一次语音会议,聊这个模型怎么建。
两方负责人先拉了个微信群,把慢银行和快大厂这次联合建模相关的人员都拉进去了。
慢银行一堆问题就跟机关枪一样发射了,
- 你们有多少特征,能回溯到什么时候?
- 需要用什么主键去匹配特征?
- 你们的数据能不能传给我们,我们直接在行内建模?
- 我们要建xgb模型,你们xgb模型怎么部署?
- ……
快大厂不爽了,你们急个毛线,
- 我们数据多着呢,近两年都可以回溯,身份证和手机号做主键,我们上千个特征不出库,我们准备好电脑和建模环境,你们带着标签过来。
- 你们准备多少样本建模,最好多带点?
- 你们自己怎么定义标签的?
- 你们准备建几个模型,输出几个字段?
一来二回,都觉得对方不给力。
慢银行嫌快大厂特征数据不出库,还要他们派模型同学驻场建模。
快大厂嫌慢银行能带出的样本太少了,建模效果不好的话还要怪数据质量。
但好歹,一些事情还是确定下来了。
慢银行指定了一个模型同学(慢A),快大厂也指定了个同学(快B)。
然后,慢A去准备建模需要的10w样本,走申请流程带出。
快B就去准备了两台电脑,搭建建模环境。
二、数据准备
慢A同学在慢银行苦心经营,找了许多人开了许多会,终于确定了如何选取这10w样本。
又潜心写了几行代码抽取这些样本,还请同事帮忙review一下这几段sql。
然后走起了漫无边际的审批流程,匹配加密的主键,样本出库等。
这个时候的慢A觉得自己是张骞。
此时,快B同学在快大厂申请了两台旧电脑,确保了无网络访问权限,然后安装了下必备的Python包。
然后开始准备怎么做都有问题的特征,从特征库里选择了几张合适的稳定有效的特征表,开始做一些脱敏处理。
变量的值要脱敏,例如分段处理,变量的含义也要做脱敏,巴不得改名为变量1、变量2……。
无所不用其极,这个时候的快B觉得自己是SB。
最后,还要计算变量的分布,确保分段处理后的变量分布逐月稳定且合理。
三、无穷无尽的拉扯
许多天以后,慢A终于准备好了样本,快B被慢银行骂了几次SB后,变量的含义还是没改,不过加了一个维度列。
这些加密的主键被发送到快B,匹配了早已不知道是什么的特征。
终于,慢A带着这10w个好坏样本,不情不愿地来到了快大厂的所在地,快B给安排了工位,电脑桌面放好了10w个样本的匹配结果。
慢A开始了无脑的数据分析,统计了数据的匹配情况,对着f1、f2……的特征强压着内心的怒火。
在旁边拿出了自己带来的电脑,连上热点,开始了百度一下。
找出了早已备好的计算woe、iv的代码块,对着所有的变量跑了一通,筛出了一些区分度高的变量后,又看了他们的风险分布。
问天,这个单增的变量是不是应该单增;问地,这个单减的变量是不是应该单减;问自己,这个U型分布变量是个什么鬼。最后问快B,快说,我有刀。
时间无情的流逝。
模型终于建好了,慢A算了几个KS,不由得想骂人,怎么有点低,怎么波动这么大。
找快B,找慢银行,多方讨论,也没有什么高招,只好就这样。
然后定了个阈值做了一些业务指标的测算,出了一个报告。
慢A把成果发送回了慢银行,进行了远程汇报……
最后,模型就这么定了。
这个阶段慢A很烦躁。
四、模型部署
慢A把模型文件和模型变量交给快B之后,就逃也似的离开了快大厂。
此时的快B觉得气定神闲,上线过很多个模型之后,谁还会把这这当回事呢。
然后不紧不慢地打开了慢A给的文件,差点没吐血。
这些变量咋还被再次处理了,给的变量都被分段好了,还合并分组干什么,不知道xgb是二叉树嘛。
怎么入模了这么多变量。
模型文件一解析,又发现这树怎么长这样,这xgb参数也太扯淡了。
快B大叫一声不好,一个电话打给了慢A,慢A说有些变量分组人数太少就合并了,参数是网格搜索找出来的。
快B很吐血,这意味着,要多一层特征处理作业,这一步很容易出错。另外,模型打分作业耗时久,需监控的变量多。
因为徒增了这些工作,重要但不紧急的模型部署变成了重要又紧急的todo。
但好歹,模型文件给到了快大厂,离线打分总远远好于实时打分。
模型终于被部署好了,并经过了一致性校验。
这个阶段快B很暴躁。
五、我说
有件事情特别重要,而很多建模的同学并没有意识到。
离线打分再把分数推送至线上接口,会比推送特征线上实时计算分数容易地多。
前者,模型复杂度就不太重要,计算作业再耗时也不是什么大问题。
但后者,就注定不能用太多变量,不能让模型过于复杂,因为推送几百个特征至线上是很困难的,保证接口响应速度是很吃资源的,验证分数的一致性也是更不容易的。
这决定了你如何去做特征工程,如何去训练模型。
所以,最为要紧的事情是,在启动建模前就必须想清楚最终将如何上线应用。
负责建模的A和B同学,一定要清楚这个流程,即使他们本人还没有这些经验,也需要有人告知并提醒他们。
并且保持一定频率的交流。
如果你们在联合建模,或者任何建模,确保你有办法知晓更全的信息。如果没办法,我可以尽一点绵力。欢迎交流。