我是靠谱客的博主 贪玩哈密瓜,最近开发中收集的这篇文章主要介绍(干货)轻量级基础离线全栈模型踩过的坑(方法方向篇一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近做了第一个线上应用的离线模型,从0到1,全部过程由自己一个人完成,耗时近2个月,遇坑无数,虽然过程漫长而煎熬,虽然从底层数据到操作环境都残缺不全,(如果你有非常好的数据环境,请绕道),也是因为个人经验较少,有些坑总要踩过才知道,现在初步上线,终于有小部分时间喘口气,回头总结下两个月来的经历,这篇是方法方向,之后尽量抽空再写一篇技术篇(因为个人实力有限,技术篇怕被怼)。

背景是服务于风控业务,模型自动识别坏样本,需求是二分类。数据是灰样本中识别黑样本。方法是基础传统模型。基于hive,语音暂时用python。

Q1:关于数据和特征?

个人建议:优先考虑全局中几个特征维度,(比如账号,手机号等等,)比如有A,B,C,D四个特征维度;再考虑时间维度,比如近7天,近30天,近90天,近1天4个时间段,因此,每类特征有12个子特征了。现在可以在小本本上列出A类下可能哪些特征有用。初步筛选特征时,建议能想到的都列出来,之后再进一步筛选,这样可以避免多次算特征,因为整个流程中算特征是最麻烦且最耗时的。好,现在你已经绞尽脑汁列出你认为应该有的特征了,现在你该去请教业务同学,他们会给你一些建议,他们认为哪些特征可能会有用,加到你的小本本上。下面最重要的是要去查看现在线上应用的规则,可以的话先排个序,那些效果最好的规则,要转成特征列到小本本上。好了,现在你已经把能有的特征都列出来了,我想12个维度乘上去的话,应该过百了。

你以为下面就要筛选特征了?不,下面要去找数据。这里有很多要注意的问题,比如,你的坏样本和好样本在哪里取,你的标签用哪个字段,工程上,不会有明确的好坏样本的,需要多层加工,需要针对你的业务需求觉得哪些类别和字段可以分类你的样本。这时你会发现,你所需要的数据分布在多张表中,所以需要join多张表,制成包含你需要的所有字段的宽表,根据需要增量分区更新,由于我的是离线模型,小时级更新就好。这时要注意的是每张表里的需要的字段是否一致,比如加密方法,比如地址中是否有逗号分隔,比如每张表的时间分区,比如每张表的更新频率和方式等等,最重要的是要考虑你现在所用的数据形式一定要与模型上线后所能取到的数据形式要一致,时间分布也要考虑好。底层表包含所有字段,之后无论怎么修改特征,都可直接根据底层表计算。

底层数据有了,现在需要动工计算特征了,这是最关键的一步,如果你的特征计算错误,之后模型怎么调,作用也是微乎其微(不用把模型想的太魔性,特征才是王牌)。如果你后面模型有问题,那8成是因为特征计算有问题。第一步需要确定特征存取形式,通过踩坑经验,个人认为,通过维度形式存储比较方便。特征也可分为历史特征和当天特征,(实时模型这里不考虑),历史特征包含近7天,近30天等,这些可以放到一张表里,每天更新一次,当天特征根据需要定时更新。再通过取数任务,取出你需要的数据,分别去join历史特征和当天特征。(这里之前踩过的坑是,一次性计算了包含当天特征和历史特征,也就是把当天特征值加到了历史特征中,这样不仅每次计算量庞大,计算速度慢,而且,之后特征筛选也会不便,且不科学。)存储形式如下:双分区表:type, time。type是主维度:ABCD(甚至A+B,A+C等等)。

typekey1key2type_fac1_30dtype_fac2_30dtype_fac2_7dtime
typeAvalueA 2332016/1/1
typeBvalueB 2462016/1/2
typeCvalueC 2412016/1/3
typeDvalueD 2522016/1/4
typeACvalueAvalueC2432016/1/5

这样存储好处:1. join特征时,可以限定type 和时间可以快速查找;2. 需要增加或者减少特征可以快速整齐加入或减少。3. 通过union形式直接查询拉平特征,且一次查到多个特征。如果不熟悉hive窗口函数,何种方式是比较方便的最少join的形式存储。特征一定一定要保证准确性,算好后,脚本要定时跑并把特征表存储好。

现在你已经有了特征,现在要看下数据了。有同学说应该先看数据再算特征,其实个人认为,并无差,因为需要你解决问题得业务数据,不会好到哪里去,肯定不是符合正太均匀分布得数据。如果先把数据可视化,大概会令你很纠结,我先算好想要得特征,如果认为这个特征很重要,即使没数据,也要想法设法靠近。对于数据,我简单看了下样本分布,正负样本比例,评估了近期数据的异常性,不要有特殊情况存在就可以了,用上采样方式,把样本调到了1:1.5,因为是灰中找黑,所以没有调成3:7,不要想着某个特征有一招致命的功效,其实大部分特征效果都不明显。数据调好了我先用全部特征跑了模型,此时我同时用了5个模型,结果当然不太好,但是让我大概锁定了2个模型:随机森林和adaboost。下面开始筛选特征

筛选特征是个漫长的过程,首先通过特征重要性和与Y值相关性,筛选一波,再过模型,也可以参考一下特征的分布情况,反复几次,找了60个左右的特征,再针对我们所关注的准确率及召回率将这些特征一个一个过模型,看看哪个特征倾向与你想要的结果。

 

 

最后

以上就是贪玩哈密瓜为你收集整理的(干货)轻量级基础离线全栈模型踩过的坑(方法方向篇一)的全部内容,希望文章能够帮你解决(干货)轻量级基础离线全栈模型踩过的坑(方法方向篇一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部