基于移动网络通讯行为的风险用户识别

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/t6_17/article/details/80863955

基于移动网络通讯行为的风险用户识别


比赛地址:基于移动网络通讯行为的风险用户识别,该比赛是联通大数据公司发起的,同时作为我们的实训的比赛。下面是自己参加比赛过程的报告:

第一次参加这种比赛,发现自己经验明显不足。初赛0.787(52/624),复赛0.784(71/624),虽然成绩很差,但是感觉对新手来说是一次很好的锻炼机会。简单的介绍一下自己的一些思路。

这次比赛分为初赛和复赛两部分,自己的比赛代码也有好几个版本,这里选取得成绩最好的一次讲讲思路。


特征工程

用户通话记录数据表

预处理

对start_time的时变量做除以2变换,对opp_len进行分组,避免one-hot变换后分布太稀疏(对线性模型有影响),同理对天变量除以5(或者对用户的生活作息时间进行分组).

统计特征

  • 统计每个用户的号码通话的所有与不同的号码数量,以及与均值的差
  • 统计用户通话in、out的不同号码数量,in、out的差值,以及所占比例。
  • 统计一些特殊号码,如opp_head为100的,像运营商的号码;170、171虚拟号码段
  • 统计不同opp_head的unique_count
  • 通话时长的相关统计量,如均值, 最大值,中位数,标准差,最小值等
  • 统计不同call_type下的opp_num
  • 统计不同opp_len下的opp_num

One-hot编码特征

  • 通话类型做one-hot编码,同时与in、out做特征交叉,统计数量
  • 对start_time的天变量和时变量做one-hot,统计数量
  • 对天变量,统计不同日期的通话数量的相关统计量,如均值, 最大值,中位数,标准差,最小值等

用户短信记录数据表

预处理

先统计所有opp_num,再清洗掉opp_head为000的系统短信;对opp_len进行分组,对start_time的时变量和天变量做类似通话数据的处理。
统计特征

  • 统计每个opp_num所有与不同的号码数量,与均值的差
  • 统计用户接收短信in、out的不同号码数量,in、out的差值,以及所占比例。
  • 分组统计一些特殊号码的所有与不同的数量以及与均值的差,如opp_head为100的,像运营商的号码;170、171虚拟号码段,106的通知类短信
  • 统计不同opp_len下的opp_num数量以及与均值的差
  • 统计不同opp_head的数量

One-hot编码特征

  • 对start_time的天变量和时变量做one-hot,与in、out做交叉,分别求count和unique_count

用户网站/App访问记录数据表

预处理
wa数据有很多缺失值,对wa_date缺失值填充-1做其他类别处理,将天数做除以5变换。求名字长度wa_len,对wa_len分组处理。

统计特征

  • 统计用户访问的wa_name所有与不同的名字的数量,与均值的差统计用户访问的名字的长度分组的数量。
  • 统计用户访问的次数的相关统计量,如均值, 最大值,中位数,标准差,最小值等。
  • 统计用户访问时长的相关统计量,如均值, 最大值,中位数,标准差,最小值等。
  • 统计用户上传流量的相关统计量,如均值, 最大值,中位数,标准差,最小值等。
  • 统计用户下载流量的相关统计量,如均值, 最大值,中位数,标准差,最小值等。
  • 统计不同opp_head的数量

One-hot编码特征

  • 对访问的日期进行one-hot编码,与up_flow、visit_cnt,down_flow、做交叉特征,求相关统计量,如均值, 最大值,中位数,标准差,最小值等。
  • 对访问的类型进行one-hot编码,与up_flow、visit_cnt,down_flow、做交叉特征,求相关统计量,如均值, 最大值,中位数,标准差,最小值等。

多项式特征:

最后根据feature_importance来选择一些特征进行做多项式组合

  • 将访问类型为网站的unique_count与sms的in类型的opp_head为106的做二次多项式组合
  • 将访问类型为网站的up_flow与sms的in类型的unique_count做二次多项式组合
  • 将访问类型为网站的unique_count与sms的in类型的unique_count为与voice的unique_count做二次多项式组合

LGB单模型

树模型

使用lgb单模型,选择gdbt,使用GridSearchCV挑选最佳参数。主要调’min_data_in_leaf’和’num_leaves’这两个参数

尝试使用stacking将多个模型融合,尝试发现效果并不明显,故最后没有采用。

总结

赛后发现自己提取的特征明显不够,还有一些重要的特征没有考虑到,如没有对voice,sms,wa出现频次最多的top-k以及对voice和sms的opp_head进行one-hot变换;还有它们两次的最近的一些时间间隔等等。虽然自己也做了很多尝试,如分别对voice,sms,wa每天的一些特征统计量进行处理,但是因为特征方面没有大的提升。到后面复赛赛心态有点崩了,最高的一次分数还是第一次提交时候。赛后才发现对分数提升最大的就是对opp_head进行one-hot之后,本地cv是0.87,提高了大概0.07的分数,这才是拉开差距的主要特征。

附上github代码地址
数据集下载

展开阅读全文

没有更多推荐了,返回首页