Skip to content

lzneu/CMB-credit-card-department-prediction-of-purchasing-behavior-in-consumer-finance-scenario

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMB-credit-card-department-prediction-of-purchasing-behavior-in-consumer-finance-scenario

招商银行信用卡中心金融数据大赛--消费金融场景下的用户购买预测 rank2

https://www.datafountain.cn/competitions/287/details

说明

feature_engineering.py提取特征,xgboost_predict.py使用单模型xgboost进行预测,
stacking.py使用stacking的方法进行预测

赛题回顾

利用招商银行客户的个人属性、信用卡消费数据,以及部分客户在掌上生活APP上的一个月的操作行为日志,设计合理的特征工程与模型算法方案, 预测客户在未来一周内(4月1日-7日),是否会购买掌上生活APP上的优惠券(包括饭票、影票等)。评测指标:AUC。

参赛历程

  • 2018.6.5-2018.6.25
    数据可视化探索,划分验证集,特征工程

  • 2018.6.26-2018.7.5
    使用单模型进行预测,包括树模型:GBDT,RF,CatBoost,LightGBM,XGBoost以及线性模型 lasso。其中XGBoost效果最好,LightGBM次之,GBDT,RF和CatBoost 效果一般,lasso最差。A榜阶段使用的是单模型XGBoost, 成绩0.87049,连续两周排名前十,最后排名21,B榜成绩0.85975。

  • 2018.7.5-2018.7.15
    模型融合。尝试了两种方案。一种是直接将概率值进行加权融合,例如: 0.65 * XGBoost + 0.35 * LightGBM,结果提升不大。另一种是较复杂的stacking,效果提升显著。B榜成绩0.86314,最终排名第二。

比赛思路

本赛题提供了招商银行客户的个人属性、信用卡消费数据以及部分客户在掌上生活APP上的一个月的操作行为日志两个表。分析数据发现,其中个人属性、信用卡消费 数据有100000个用户的记录,操作行为日志有48875个用户的记录。训练集中的正负样本比例为:0.04134,正负样本不均衡。在脱敏的个人属性、信用卡消费数据上, 我们尝试了特征组合,分段统计,使用树模型构造新特征与原有特征合并后,一起训练等方法,结果发现,效果提升不明显,且容易造成线下得分提升,线上得分下降 的过拟合现象。最后,我们直接将个人属性、信用卡消费数据作为训练集的一部分,并没有构造新的特征。在APP操作行为日志上,我们提取了包括事件类型特征, 用户点击模块特征,用户触发时间特征以及点击模块-时间交叉特征共四种特征。

特征工程

关于特征筛选,我们基于xgboost来做特征选择,xgboost模型训练完成后可以输出特征的重要性,据此可以保留Top N个特征,从而达到特征筛选的目的。 经过筛选最后保留的特征如下所示:

事件类型特征

  1. 用户在APP上的操作次数
  2. 用户在微信小程序H5上的操作次数

用户触发时间特征

  1. 用户触发时刻的均值
  2. 用户触发时刻的方差
  3. 用户触发时刻的最小值
  4. 用户触发时刻的最大值
  5. 用户触发时刻的最小最大值之差
  6. 用户触发日期的均值
  7. 用户触发日期的方差
  8. 用户触发日期的最小值
  9. 用户触发日期的最大值
  10. 用户触发日期的最小最大值之差

用户点击模块特征

1)将点击模块看作整体。
例如,饭票-代金券-门店看作是一种点击模块。
1.1)用户点击的模块次数
1.2)用户点击的模块种类数

2)将点击模块切分。
例如,将饭票-代金券-门店切分成三个级别,饭票 看作是第一个级别里的一种,代金券看作是第二个级别里的一种。构造此特征的步骤如下:
1.将用户的点击模块切分成三个级别
2.对同一个级别内的不同模块进行编码
3.分别统计用户对各个级别各个模块的点击次数
4.最后形成除USRID外共815列的特征表
例如:特征EVT_1_num_12表示用户对第一个级别的第12个模块的点击次数,特征EVT_2_num_21表示用户对第二个级别的第21个模块的点击次数,依此类推。

点击模块-时间特征

这里将点击模块看作整体。
1)将一天划分成多个时间段:

  1. 用户在0:00-6:00的模块点击次数。
  2. 用户在7:00-9:00的模块点击次数。
  3. 用户在10:00-12:00的模块点击次数。
  4. 用户在13:00-14:00的模块点击次数。
  5. 用户在15:00-17:00的模块点击次数。
  6. 用户在18:00-20:00的模块点击次数。
  7. 用户在21:00-23:00的模块点击次数。

2)按周划分:

  1. 用户在周一的模块点击次数。
  2. 用户在周二的模块点击次数。
  3. 用户在周三的模块点击次数。
  4. 用户在周四的模块点击次数。
  5. 用户在周五的模块点击次数。
  6. 用户在周六的模块点击次数。
  7. 用户在周日的模块点击次数。

算法模型

A榜阶段,我们使用的是单模型XGBoost。在B榜阶段,我们采用了stacking的模型融合方案。从树模型中挑选了结果较好的XGBoost, LightGBM以及GBDT作为 第一层的基模型(base models),同时为了多样性,选择线性模型lasso作为第二层的元模型(meta model)。结果表明,相比单模型, 使用多个具有差异性的强学习算法进行融合,可以给性能带来较大的提升。B榜成绩提升了0.339个百分点。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%