京东JData算法大赛-高潜用户购买意向预测
我们在该次比赛获得Top57/4241的成绩。
解题思路
用户模型
训练集,验证集,线上集划分
我们选取目标预测期间前7天与第8类商品有过交互的用户(过滤曾经购买过第8类商品的用户,官网说明不会重复购买) 来构造样本。划分如下:
取2个训练,验证集
第一个
- 验证集特征提取区间 [2016-02-01 00:00:00, 2016-04-06 00:00:00)
- 样本构造区间 [2016-03-30 00:00:00, 2016-04-06 00:00:00)
- label提取区间 [2016-04-06 00:00:00, 2016-04-11 00:00:00)
第二个
- 验证集特征提取区间 [2016-02-06 00:00:00, 2016-04-11 00:00:00)
- 样本构造区间 [2016-04-04 00:00:00, 2016-04-11 00:00:00)
- label提取区间 [2016-04-11 00:00:00, 2016-04-16 00:00:00)
线上测试集
- 验证集特征提取区间 [2016-02-11 00:00:00, 2016-04-16 00:00:00)
- 样本构造区间 [2016-04-09 00:00:00, 2016-04-16 00:00:00)
数据预处理
读取action的3个文件并将其拼接成1份。
然后再根据以user_id以及sku_id为键将Comment,Product,User信息并成一张表。
如果数据集过大,可以删除从来没有登录过第八类的人
读取action的3个文件并将其拼接成1份。然后再根据以user_id以及sku_id为键将Comment,Product,User信息并成一张表。如果数据集过大,可以删除从来没有登录看过第八类的人
官方发表声明表示一个用户只会购买一个商品。
官方评测的子集在第八类商品中。也就是说我们只要预测第八类商品的购买情况。
根据往常的数据统计每天的购买人数大概在200-400个之间。
官方给我们2月1日到4月15日的数据。预测16号到20号的购买情况,大约2000个购买。因为有部分人的购买可能是16号看,17号买之类的。所以真正可以预测的数据大概是1000+。
精简版特征
- 用户属性特征 ¡ 用户等级 ¡ 用户注册时间距离(注册日距离预测区间第一天距离) (单位: 天)
- 在前1/3/5/7/14/60天的登陆天数的次数
- 在前1/3/5/7/14/60天的登陆第八类天数的次数
- 用户在浏览第八类商品的时间段(0-4/4-8/8-12/12-16/16-20/20-23)
- 用户的等级1/2/3/4/5级别
- 在近3天的浏览中是否有添加购物车
- 在浏览第8类的商品中时是否还额外的查看了别的类。
- 年龄/性别/浏览的model/浏览的brand
- 近7天看的次数(10min没有持续访问,视为一次)
- 看过的商品类别数量/a1属性/a2属性/a3属性
- 最近登陆时间与预测时间距离
使用xgboost模型2分类预测
我们提取了2个训练集,以及验证集。在第一个模型调参的途中,不断的优化拟合,为到达最佳的拟合效果。但是也为了防止出现时间段性质的局部学习。所以我们选择了两个集合。拿前者的训练模型来预测后者。看这两者的预测准确程度是否都成上升状态。
若是两个模型都是到达了最大的调优后,便是到达了最佳的拟合状态。我们就停止了对模型参数的调改。
使用sku_id模型
特征有:总行数,年龄段,性别,用户等级,a1最多,a2最多 ,a3最多,牌子种类数量,浏览天数,浏览次数,是否处于第一类别,该类行数 ,该类占比 ,a1 ,a2 ,a3, brand ,浏览天数,浏览次数 ,浏览时间段 ,购物车等等
在用户-商品模型中。使用此种模型:
userA ,skuA,特征1,特征2,特征3。。。
userA ,skuB,特征1,特征2,特征3。。。
userB ,skuB,特征1,特征2,特征3。。。
userB ,skuA,特征1,特征2,特征3。。。
在这种模型下,xgboost模型会输出prob.我们可以发现在相同的用户下,商品的概率是不同的。我们选择在用户下面那个概率最大的商品,作为最终的购买。
模型选择与训练
商品模型依旧采用xgboost算法,由于样本数量较大,cv调参速度慢,只调整了部分参数。 由于用户模型与商品模型的正负比例极度不均衡且正例数目极少,在训练模型的时候为了保 证更多的正例被学习到,我们并没有划分部分数据用于观察模型的loss来控制模型的拟合程 度,而是直接使用了全部数据训练,通过5折交叉验证获取最佳迭代次数,这为B榜成绩带来 一定的提升。