可能有些人还不知道,黄姐姐消失的这几个月,去生了个孩子。宝宝满月去打疫苗,被医院震耳欲聋、此起彼伏的小朋友哭声吓到了,回来后哭闹了好几天。于是乎,黄姐姐这个新手妈妈开始各种咨询医生,老人家,并在网上查:宝宝受到了惊吓怎么办?经过筛选,尝试了几种操作性比较强,且不那么吓人的方法:

1.安全感:多抚摸,多抱,让宝宝时常听到妈妈的声音;

2.吹气:冲著额头吹气,让宝宝眨眼,重复几次;3.趴在手臂上睡:一个神奇的抱娃姿势;4.补充微量元素:主要是钙和锌;

5.吃药:治疗「惊悸不眠」的药《猴枣散》;

6.半夜叫魂:晚上宝宝睡著后,念到:摸摸毛(头发),吓不著;摸头芯儿,吓一阵儿;摸摸耳,吓一会儿;xx回来吧。7.敲床:敲著床边念到:床帮床帮神,俺的小孩丢了魂,您给俺找,您给俺寻,找来交给他母亲。8.贴纸:在一张纸上书写「天皇皇,地皇皇,我家有个夜哭郎。过路君子念三遍,一觉睡到大天亮」,并贴到人来人往的街道上,希望更多的人可以看到并念出来。

黄姐姐向来以唯物主义者自居,不信什么鬼神说。所以,当然黄姐姐先是用了方法1-5,三天后并没有任何改善,于是在第四天,才在外婆的商(bi)量(po)下,用了方法6-8。

神奇的是,到了第五天,宝宝竟然可以安心睡觉了,而且也不再哭闹了。

这时,外婆问了句:你觉得,是哪种方法管用了?

黄姐姐实在不想说是6-8管用,便回答个「不知道」敷衍过去了。

其实,这像极了黄姐姐经常被问到的一个问题:从哪个角度可以看出这是个欺诈分子?以及哪个栏位比较好用?

如果单纯地从理性分析(暂且忽略鬼神说的不可解释性),1-8被黄姐姐分成两组:

组A:1-5;

组B:6-8。

整理一下:组A应用了4天,组B应用了1天,且最终结果为True。

那么,最终结果为true,可能是组A作用力的累加效果,也可能是组B立竿见影的效果。想要确定,还需要进行重复实验。确定了组A和组B后,还可以进一步拆分分析。比如,可能是组A的方法1加上组B的方法6起到的作用。

一个著急的母亲,会同时采用多种方法来解决宝宝的非正常哭闹;一个反欺诈从业者,也希望一下子把所有栏位输入模型,跑出个结果来防范欺诈。但正如黄姐姐所做的,先去掉操作性不强的,再去掉不吓人的方法;由于一些栏位的杂讯很大,同样需要我们先予以去除,然后再进行系统的分析。这一过程需要充足的样本和不断的思考和实践,著实费时费力。

不过,基于一些项目经验,黄姐姐尝试了很多处理不同list的方法。以下分享几个比较有效的处理方法。

App list:Apriori+统计分析

先科普一下Apriori,以免有些读者不了解。Apriori是关联关系挖掘一个比较经典的演算法,其一个著名的应用就是指导超市货架上物品的摆放位置——「尿布啤酒」问题。也就是,通过对顾客购买商品的关联分析,发现购买了尿布的人中也有很多购买了啤酒。单纯想一想觉得很不可思议,而通过调查发现,去超市购买尿布的多为男人。反正也要跑到超市买尿布,索性再给自己捎上两罐啤酒,算是自己的「跑腿费」了。是的,Apriori演算法对于发现这些可能违背常识的事物和事物之间的内在联系是非常有效的。而团伙欺诈,也属于这一类问题。很多欺诈团伙的作案手法,在被揭发前,也是不为人知且看上去匪夷所思的。但鲜有将Apriori演算法应用于反欺诈的,究其原因,大概是由于关联浓度过低以至于难于检测。试想,假设一个平台,拥有2000万用户,其中有100个人,采用(同一IP 10.10.10.10 +同一小时注册23:00:00+同一手机前缀1880000xxxx)这一组合发起了虚假注册。如果采用Apriori来计算支持度,可以想像,由于巨大的分母,这一组合的置信度会非常低。这与「尿布啤酒」不同,欺诈检测的栏位更多,栏位值更丰富,直接运用值(value)来做关联挖掘,几乎是不可能完成的事情。这就像把一勺盐扔进一片海,企图提高整片海域的咸度一样。

对App list的挖掘,也有类似的问题。APP name太多太复杂,直接调用Apriori很难看到效果。但其实我们稍微动动脑筋,就会发现,「尿布啤酒」问题中,我们得到的结论是「尿布」+「啤酒」这一组合常常出现,而不是「青岛啤酒」+「帮宝适尿布」,对吗?相信大家已经看到了问题所在,是的,我们在对App list进行Apriori运算时,采用品类数据可能会更好。事实的确如此,我们可以做如下操作:

  1. 先将采集到的所有app进行人工标注品类(有现成的品类数据更好),如:理财类,学习类,贷款类,商城类,游戏类等等;
  2. 分别对好人和坏人的app list进行apriori运算,并计算区分度;
  3. 如果区分度明显,可停止计算。如果区分度不好,继续统计每一品类的个数,例如:理财3,学习2 表示理财类app装了3个,学习类app装了2个,并再次分别对好人和坏人进行apriori运算,得到好人坏人app品类的个数组合倾向。

以上,便可得到一些比较有趣的组合。例如,黄姐姐发现:

  • 安装了学习类app的逾期率低,其中以「作业帮」最为典型;
  • 安装支付宝但没有安装微信的用户逾期率高。黄姐姐事后诸葛亮一下,可能是新刷的机器,而这次借款申请需要芝麻分授权,所以只安装了支付宝,没有安装微信;
  • 对于现金贷产品,安装同类app多,逾期率反而低,只安装本借款app的,逾期率反而高。同样事后诸葛亮一下,可能是欺诈分子更懂得包装,所以在申请借款前,会先清机,删除其他同类借款产品;
  • 对于消费分期产品,安装x个借款类app+y个游戏类app的人逾期率偏高(在黄姐姐的项目中,数字为3个借款了app和2个游戏类app)

统计分析可以从以下几个角度进行:

  • Odds:统计每个app的好人坏人比,并按照从小到大排序,作为风险系数/风险等级;
  • 个数:统计安装app的总个数(需要排除预装软体),以及每个品类的个数。(黄姐姐发现,app安装特别少的机器逾期率较高)
  • 是否命中黑中介常用app:如一键新机软体、GPS模拟软体等;(这需要一个list,最好有一个人负责维护这个list,黄姐姐的list从休产假后就没再更新了,需要的可以私信留邮箱)

举个例子,在一个项目中,黄姐姐统计的部分借款类app的odds,如下:

黄姐姐将其分成三个风险等级:高、中、低。并做了人工的keywords提取处理,以涵盖更多的新app(可能未在统计列表中,以及未来可能会出现的借款app名称),例如:将「来借贷款」、「借点钱贷款」、「贷款123」和「搜易借贷款」四个的公共词「贷款」提取出来,作为keyword入模型,其风险等级为「中」,风险系数(odds)为14.88。如此这般,假设有一个新的借款app,名称叫「黄姐姐诚信贷款」,便也会被纳入这一等级,并赋予此风险系数。

此列表需要在每次模型更新时重新计算,建议维护时间为每月或每季度一次。

Wifi list:keywords+UML

wifi list主要有两个用途,一是可以匹配关键词,如「借款」,「贷款」,「钱」等;二是可以对wifi name做聚类,发现那些地理距离很近的人群,甚至是在同一个房间的人群。

衍生建议:

Risk_wifi_ssid:是否命中高风险关键词,value = true / false

简讯list:统计分析+keywords

这里,我们将简讯拆成两个元素:一是简讯号码,二是简讯内容。对简讯号码的处理比较简单,主要是进行统计分析,我们可以这样:

  1. 统计所有坏人的简讯list号码,并按照出现的频率排序,作为风险指数(需要排除10086、95555等);
  2. 统计所有用户的简讯list号码,按照(号码,时间)对统计同一天/同一周的用户。

衍生建议:

  • Loan_app_message_day:同一个简讯号码在同一天接收,且多头借贷用户;
  • Loan_app_message_week:同一个简讯号码在同一周接收,且多头借贷用户;

对于简讯内容,建议采用两个极端:极好和极坏。

衍生建议:

  • HitGkeywords:命中好关键词;根据简讯内容,命中好的关键词,如:运营商查询简讯回复(注意,是用户主动查询,不是运营商主动发送的内容);快递/外卖简讯。此类信息表示这是一个正常使用的手机号码,好人的概率大;
  • HitBkeywords:命中坏的关键词;例如贷款、赌博相关(六合彩等)等关键词;

通讯录list:统计分析+keywords

通讯录也可拆成两个元素:一是存储的昵称;二是存储的号码。这个也是个挺有趣的事情,黄姐姐的项目中,发现有些统计真的让人匪夷所思。比如,通讯录4个字昵称占比较高的用户逾期率高;非11位手机号码占比高的用户逾期率也高。这个很难有一个特别合理的解释,但事实就是如此,就像文章开头关于叫魂的灵异方法一样。

衍生建议:

  • Contact_no: 通讯录条数;
  • Not_11bit_ratio: 通讯录非11位手机号占比;
  • Contact_city_no: 通讯录联系人归属地个数;
  • Contact_is_user_no: 通讯录中申请了本平台借款的人数;
  • Name_4char_ratio:通讯录中4个字的昵称的比例(同理可看5个字/6个字等的比例);
  • Contact_each_other:如果紧急联系人也是产品用户,那么,双方的通讯录是否有彼此,value = true / false;

Keywords也挺有趣,黄姐姐发现,存储的昵称中,如果包含了地址关键词,则逾期率较高;还有些人,爸爸妈妈的号码就存了十几个,请问谁是你的亲爸亲妈?其他都是干爹?还有一类比较常见的,就是有明显属性的词,例如:贷款中介黄经理。

衍生建议:

  • Parent_no: 命中如下关键词的个数:爸爸、妈妈、爸、妈、老爸、老妈、Dad,Mum,Daddy,Mummy
  • Risk_name:是否命中风险关键词,如中介、贷、款、借等;
  • City_no: 存储的昵称中,包含地址关键词,如:上海黄姐姐。

通话详单list:统计分析+LR

由于通话详单数据量通常非常大,所以常常需要先做过滤处理。

过滤方式有两种:

一是把主叫和被叫都是本产品的客户的用户过滤出来;

二是过滤掉被叫时常超过15秒(或其他阈值,根据数量级确定)的通话;

通话详单可以做如下统计:

  • 6_month_times:最近6个月与紧急联系人的通话次数;
  • 1_month_times:最近1个月与紧急联系人的通话次数;
  • 1_week_times:最近1周与紧急联系人的通话次数;
  • 1_day_times: 申请当天的通话次数;
  • Call_freq_ratio: 呼出比例;
  • Early_freq_ratio: 凌晨(例如:2:00-5:00)通话次数比例;
  • Call_city:通话城市个数
  • Frequent_call_city: 最常用通话地;
  • Call_in_contact_ratio:通话电话号码在通讯录中的比例;
  • Tel_ratio: 固定电话占比;
  • Virtual_ratio:虚拟号码占比;
  • Length11_ratio:11位号码占比;
  • Length10_ratio:10位号码占比;
  • 400_ratio: 400号码占比;
  • Refuse_ratio: 拒接/未接占比;
  • Other_city_ratio: 对方归属地个数;

衍生建议:

  • 1_month_freq:最近一个月沟通频繁(1_month_times/6_month_times >=x,x根据数据分析确定)
  • 1_week_freq:最近一周沟通频繁(1_week_times/1_month_times>=x,x根据数据分析确定)
  • 1_day_freq: 申请当天沟通频繁(1_day_times/1_week_times>=x,x根据数据分析确定)

以上数据作为罗辑回归(LR)的输入,最合适不过,效果很好。

GPS list:GPS渔网+xgboost

GPS list严格来讲,应该是GPS网格list。操作方式非常简单,把目标区域按照一个一个方格划分(例如:100m*100m),然后根据坏人标签统计每个方格内的坏人浓度,可以把格子按照黑白灰划分,或者按照更多的等级划分,以此来决定是否对某一个方格内的用户放款,或者将其作为xgboost的一个输入,效果也很好。

写在最后

风控建模要处理很多list,对各种list进行合适的处理并衍生出有效的特征,对模型效果大有裨益,对A卡KS等指标的贡献也会比较显著,虽然有些list的组合看起来那么让人匪夷所思。但这世间的事,本不是都能解释的,就像文章开头,连自诩为坚定的唯物主义者的黄姐姐都开始叫魂了,你还在等什么?如果将每一种list的处理结果都生成一个风险分,作为A卡的一个输入,相信你会让自己的模型起死回生。

BTW:如果有足够的样本,黄姐姐真的挺想用机器学习研究下治疗小儿惊吓的方法,会不会成为砖(wu)家(po)呢?哈哈哈……


来个硬广:

想跟黄姐姐一样成为风控小巫婆的童鞋,欢迎关注以下招聘信息


推荐阅读:
相关文章