最近做了第一个线上应用的离线模型,从0到1,全部过程由自己一个人完成,耗时近2个月,遇坑无数,虽然过程漫长而煎熬,虽然从底层数据到操作环境都残缺不全,(如果你有非常好的数据环境,请绕道),也是因为个人经验较少,有些坑总要踩过才知道,现在初步上线,终于有小部分时间喘口气,回头总结下两个月来的经历,这篇是方法方向,之后尽量抽空再写一篇技术篇(因为个人实力有限,技术篇怕被怼)。
背景是服务于风控业务,模型自动识别坏样本,需求是二分类。数据是灰样本中识别黑样本。方法是基础传统模型。基于hive,语音暂时用python。
Q1:关于数据和特征?
个人建议:优先考虑全局中几个特征维度,(比如账号,手机号等等,)比如有A,B,C,D四个特征维度;再考虑时间维度,比如近7天,近30天,近90天,近1天4个时间段,因此,每类特征有12个子特征了。现在可以在小本本上列出A类下可能哪些特征有用。初步筛选特征时,建议能想到的都列出来,之后再进一步筛选,这样可以避免多次算特征,因为整个流程中算特征是最麻烦且最耗时的。好,现在你已经绞尽脑汁列出你认为应该有的特征了,现在你该去请教业务同学,他们会给你一些建议,他们认为哪些特征可能会有用,加到你的小本本上。下面最重要的是要去查看现在线上应用的规则,可以的话先排个序,那些效果最好的规则,要转成特征列到小本本上。好了,现在你已经把能有的特征都列出来了,我想12个维度乘上去的话,应该过百了。
你以为下面就要筛选特征了?不,下面要去找数据。这里有很多要注意的问题,比如,你的坏样本和好样本在哪里取,你的标签用哪个字段,工程上,不会有明确的好坏样本的,需要多层加工,需要针对你的业务需求觉得哪些类别和字段可以分类你的样本。这时你会发现,你所需要的数据分布在多张表中,所以需要join多张表,制成包含你需要的所有字段的宽表,根据需要增量分区更新,由于我的是离线模型,小时级更新就好。这时要注意的是每张表里的需要的字段是否一致,比如加密方法,比如地址中是否有逗号分隔,比如每张表的时间分区,比如每张表的更新频率和方式等等,最重要的是要考虑你现在所用的数据形式一定要与模型上线后所能取到的数据形式要一致