消费金融场景下的用户购买预测-简单回顾
@ qq: 60959119
@ github:https://github.com/makoer/merchants_bank
@ 转载请标注https://blog.csdn.net/xiaopc3357/article/details/81064779
成绩很一般,希望能抱个大腿一起学习!!!,哈哈!!!,简单回顾一下,有利于下次进步!!!投入时间大概20天!!!
这个比赛 本人 A榜:53名,B榜:48名,这是我参加的第2个比赛,还有很多地方不足,希望能向大佬学习!!!github挂载baseline代码!!!
1. 任务
利用招商银行客户的个人属性、信用卡消费数据,以及部分客户在掌上生活APP上的一个月的操作行为日志,设计合理的特征工程与模型算法方案,预测客户在未来一周内(4月1日-7日),是否会购买掌上生活APP上的优惠券(包括饭票、影票等)。考虑到客户隐私,客户的个人属性数据与信用卡消费数据,采用脱敏并标准化处理为V1,V2,…,V30数值型属性。客户在APP上的行为日志,一些字段也进行了相应加密。
评价指标: AUC
2. 数据介绍
- 个人属性与信用卡消费数据(agg文件):包含80000名信用卡客户的个人属性与信用卡消费数据,其中包含枚举型特征和数值型特征,均已转为数值并进行了脱敏和标准化处理。(无缺失)
- app操作行为日志(log文件):上述信用卡客户中,部分已绑定掌上生活app的客户,在近一个月时间窗口内的所有点击行为日志。其中,点击模块名称均为数字编码(形如231-145-18),代表了点击模块的三个级别(如饭票-代金券-门店详情)(有缺失,缺失一半以上)
- 标签数据:包括客户号及标签。其中,标签数据为用户是否会在未来一周,购买掌上生活app上的优惠券。
3. 解题分析
官方给出训练集数据和测试集数据,训练集给出80000用户在3月份的数据,以此预测测试集20000用户(用户ID与训练集不重复)是否在4月1日-7日是否购买优惠券。
赛题分为A榜和B榜,分别采用测试集的50%作为评测。
训练集:
80000名信用卡用户的个人属性和信用卡消费,以及部分用户的APP操作行为日志数据,其中一半以上用户APP操作行为日志数据缺失,并且正负样本严重不平衡,80000样本中只有3000多正样本。
测试集:
包括20000名与训练集不同用户的个人属性与信用卡消费,以及部分用户的APP操作行为日志数据,其中一半以上用户APP操作行为日志数据缺失,标签未知。
本题本质上就是利用大部分用户的历史数据预测另外少部分用户未来的购买意向,因此需关注个人属性与消费数据以及APP操作行为于购买的关系。
由于个人属性与消费数据进行了脱敏和标准化操作,我们难以挖掘出每一个特征所表征的意义是什么,因此重点对APP操作行为日志进行挖掘,对个人属性和消费记录数据只做简单处理。 处理数据时,由于训练集和测试集用户ID不重复,将训练集和测试集放在一起进行特征提取,更加有利于整体的特征提取。
3.1 特征工程(baseline,共273列特征)
3.1.1 log数据挖掘
由于log数据均以时间为关联,故而挖掘重心偏重于时间特征;
a. 统计每个用户一个月内的的总点击次数,1列(目的:分析点击总数与是否购买关联);
b. 统计每个用户在历史一个月中每天的点击次数,31列(目的:分析某一天的点击量是否与购买关联)
c. 点击模块分为三个级别(如饭票-代金券-门店详情),第一级唯一数值个数为21个,将其one-hot化,再单列累加(目的:分析用户对购买对象的偏好),第二级为178列,将其one-hot化,再单列累加(目的:分析用户对购买什么券的偏好),至于第三级,由于列数过多,不进行统计。
d. 将浏览类型one-hot,共两种浏览方式,APP和H5共2列,再单列统计
e. 统计每个用户每次点击间隔(秒为单位) 最小值-最大值-均值-标准差,4列
f. 统计最后7天每个用户点击累计次数 6列
3.1.2 agg个人属性和消费数据挖掘
a. 首先分析正负样本每列特征的最大值和最小值,比较正样本的负样本的数据分布;
b. 统计每列特征的唯一数值个数统计,以区分是否为连续或离散数据,统计发现,将唯一数值低于30的默认为离散数据,并将其进行离散化和one-hot处理,单独训练,效果相比原始特征提升明显,但后来训练发现,这造成过拟合的嫌疑过大,因此将这类特征待定;
c. 考虑交叉特征的非线性,首先将agg的每列疑似离散的特征(唯一数值个数不超过100)按重要性排序,然后采用多项式特征交叉融合,删除低标准差特征后,提取top 10特征,叠加one-hot,相比one-hot的agg性能有所提升,但后期训练依旧过拟合验证,故而将这类特征待定;
d. 由于以上特征的过拟合,考虑采用皮尔曼相关性系数进行相关性分析处理完,仍然存在过拟合,接着考虑将其PCA处理,由于PCA后的维数难以确定,故而将所有agg挖掘特征待定,只将原始30列特征加入baseline特征。
3.2 扩增特征工程(扩增,其中很多会导致过拟合,但本人不知道如何找出与剔除,故而之后的成绩一直没超过baseline,希望路过的大神指点一下!!!)
总要扩增log日志特征,扩增agg特征在baseline特征中待定;
3.2.1 扩增全局特征
a. 有无APP,考虑用于有无APP的影响,统计发现,有APP的用户购买率远远大于无APP操作记录的用户,1列
b. 最后7天的点击趋势(斜率),用最后7天累计次数/相应的天数
c. 一个月中用户点击次数的平均值-最大值-最小值-标准差 4列
d. 最后10天用户点击次数的平均值-最大值-最小值-标准差 4列
e. 最后7天用户点击次数的平均值-最大值-最小值-标准差 4列
f. 最后3天用户点击次数的平均值-最大值-最小值-标准差 4列
g. 用户点击间隔平均值-最大值-最小值-标准差(天为单位)4列
h. 用户最近点击日期 , 1列
i. 用户最近点击日期+间隔均值/最大值/最小值 3列
j. 星期分析,分别分析周一到周天的平均值-最大值-最小值-标准差 4*7=28列
k. 星期点击比率,用户周1(2-7)次数/用户总点击次数, 7列
l. 点击模块第1级的平均值-最大值-最小值-标准差 4列
m. 点击模块第1级每一对象的点击率 21列
n. 点击模块第2级的平均值-最大值-最小值-标准差 4列
o. APP操作点击次数大于等1的用户标记为1,反之为0 1列
p. H5操作点击次数大于等1的用户标记为1,反之为0 1列
q. APP和H5操作点击次数都大于等1的用户标记为1,反之为0 1列
由于以上某些特征相似度极高,这是不允许的,所以本人通过以下方法进行剔除,不知道是否有效,请路过的大神指点指点!!!!
方法1:(暴力)
a. 对比每列特征数值,将缺失数据大于60%的特征去除并去重(耗时);
b. 采用皮尔曼系数分别求每列特征与标签的相关性,将特征进行相关性排序,高分排前,低分排后;
c. 将第一个特征分别对比之后的每一个特征,如果发现相似度高于95%则剔除后排特征;
d. 以此类推,直至循环结束。
方法2:(依旧暴力)
a. 先区分agg和log特征,因为这两种类型的特征相似性肯定不高,agg数据完整,而log数据缺失严重;
b. 分别对agg和log特征进行重要性排序;
c. 然后对agg和log特征分别去重,以及去除重复性很高的特征,删除方法与方法1相似。
方法3:采用PCA降维
采用PCA线下评测降分明显,因此未拿PCA特征进行线上评测。
4. 模型
4.1 模型1: XGBoost
4.2 模型2: Lightgbm
设置early stop round 提前停止迭代参数,防止过拟合,其他参数采用随机搜索寻优。
按线上评测,生成多个特征组,使其每个特征组具有较为明显的差异性,然后采用XGBoost和lightgbm分别建模加权,结果略微提升!!!但由于时间有限,之后没时间也不怎么会融合就停止了一段时间没弄!!!之前考虑过blending和stacking,发现前期融合效果也不明显,而且十分耗时,故而一直没用上。