Awesome
IJCAI-18 阿里妈妈搜索广告转化率预估rank41方案
队名: 真香
复赛最终成绩:0.13953 排名 41/5204
文件说明
data_preprocess.py: 读取原始文件,预处理后生成基础特征文件
gen_click_count_feat.py: 生成用户、商品基础点击统计特征
gen_duplicate_click_feat.py: 生成用户重复点击统计、时差特征
gen_mean_value_feat.py: 生成均值统计特征
gen_item_ctr_feat.py: 生成转化率特征
train.py: 模型训练与预测
主要特征(按提升大小排序)
重复点击特征
因为参加过去年的腾讯赛,将其中重复点击的trick思路应用到这个赛题,很自然能够想到可以对用户重复点击商品、品牌、类别、商店、城市、页面等进行挖掘,参考这里分享的方案,我们对这部分数据标记了点击位置、与首次点击时差、与最后一次点击时差等特征,这一部分特征提升大于3个千分点。
点击次数\个数统计特征
原始特征主要包括商品、用户、商店三部分,从不同的时间粒度(当天、小时、分钟)统计了用户和商品\商店交互、以及用户和商品的各种的cumcount、count、nunique等聚合特征,这部分特征提升大于2个千分点。
均值特征
用户、商品、商店属性均值,比如用户点击的商品价格、销量均值,商品\商店每天活跃用户均值等。这部分特征想法来自于这里。
转化率特征
对id类特征item_id、item_brand_id、item_city_id、shop_id统计转化率,由于6号的转化率较低,只选取了5号之前的6天做统计,并对转化率做了平滑处理,平滑前后相差1个万分点;尝试过加入用户转化率,但没有提升,可能是普遍点击次数较少的原因;关于组合特征转化率,尝试过但没有效果;关于滑窗,尝试过切分7号前几个小时用于统计,效果不理想。
其他特征
context_timestamp是用户的搜索时间,对用户同一搜索进行挖掘;对7号之前的点击统计;对商品属性间做除法得到sale_by_collect、sale_by_pv、collect_by_pv等;商品实际property和预测property之前的Jaccard相似性等;这部分特征提升相对没那么明显,没有整理出来,供参考吧。
数据划分与特征筛选
数据划分
我们的特征用全部数据训练得到的线上均值大概是0.039,虽然均值和线上差距不大(我们测过线上的平均转化率和小时转化率,平均转化率是0.035),但是预测出的小时转化率趋势是下降的,与线上趋势不符;后来发现仅使用七号训练得到的线上结果虽然均值高很多,但趋势与实际的更加接近,而且考虑到七号数据分布差异太大,所以后期我们选择仅用7号进行训练,用11点做线下验证,可保证线上线下一致。线上结果队友Seaty根据测的线上均值进行了后处理。
特征筛选
这方面并没有很多经验,因为复赛数据只用了第七天训练,所以训练数据不是很大,使用lightgbm默认的0.1学习率得到线下验证结果大概在30秒以内,所以能很快得到新特征的验证效果;当然在前期因为使用了全部数据训练,所以也使用过lgb的特征weight和gain重要性对特征做一些增删;增加特征前可通过均值方差分析特征在线上线下分布是否一致。
模型训练
模型方面乏善可陈,主要使用的是lightgbm,队友Seaty尝试过FFM, 但表现远落后于lightgbm,可能的原因是用户点击次数太少,用户与商品特征组合过于稀疏,模型无法有效训练,所以最终仅将FFM用于生成stacking特征,同时也采用了全部数据训练得到第七天的stacking特征,stacking第二层同样采用的是lightgbm; 由于模型缺乏多样性,最终融合只取得2个万分点的提升; 关于stacking,这方面的内容可参考这里 。
总结
复赛初期使用的全部数据训练,最高排名第5,有点盲目自信了,没有从数据分布出发去冷静分析训练方式,在用全部数据和七号数据训练两者间摇摆不定,浪费了多次提交机会;由于缺乏完整的比赛经验,比赛中没有做合理的阶段性任务划分,效率不高。
最后,感谢我的大佬队友Seaty全程carry,learn a lot from you !