IJCAI-18 阿里妈妈搜索广告转化预测总结

一.比赛数据

     本次比赛为参赛选手提供了5类数据(基础数据、广告商品信息、用户信息、上下文信息和店铺信息)。基础数据表提供了搜索广告最基本的信息,以及“是否交易”的标记。广告商品信息、用户信息、上下文信息和店铺信息等4类数据,提供了对转化率预估可能有帮助的辅助信息
     用于初赛的数据包含了若干天的样本。最后一天的数据用于结果评测,对选手不公布;其余日期的数据作为训练数据,提供给参赛选手。
     在上述各张数据表中,绝大部分样本包含了完整的字段数据,也有少部分样本缺乏特定字段的数据。如果一条样本的某个字段为“-1”,表示这个样本的对应字段缺乏数据。

二.评价指标

通过logarithmic loss(记为logloss)评估模型效果(越小越好), 公式如下



三.数据预处理

1.缺失值处理:由于某些列出现缺失值,因此我们用-1去填补缺失值,但是经过测试发现,把缺失值填充后线上效果反而变差,所以后面也就没有对缺失值进行处理。

2.数据离散化:我们对商品类目,商品属性和预测类目属性分别离散化。其中,由于商品类目一共有三种,并且是从属关系,所以我们把最细的类别作为商品最终的类别。

3.用户和商品基本属性组合:用户包含年龄、性别、职业和星级四个属性,商品包含价格、销量、收藏和展示次数四个属性,我们把这四个用户属性都相同的用户定义为相似用户,四个商品属性都相同的商品定义为相似商品。不过经过测试发现这样效果不好。

四.特征提取

1.基础特征

直接把基础属性作为特征

2.转化率

用户转化率、商品转化率、商户转化率、类别转化率、小时转化率

年龄-性别-职业-星级组合转化率、价格-销量-收藏-展示次数组合转化率

3.统计特征

一共三部分:标签区间、特征区间、特征区间中is_trade=1

用户浏览数、商品浏览数、商户浏览数、类别浏览数

用户-商品浏览数、用户-商户浏览数、用户-类别浏览数、用户-品牌浏览数、用户-页面浏览数、用户-价格浏览数、用户-收藏浏览数、用户-销售浏览数、用户-星级浏览数、用户-评价等级浏览数、用户-好评率浏览数、用户-商铺等级浏览数、用户-服务评分浏览数、用户物流评分浏览数、用户-描述评分浏览数

用户每小时浏览数、商品每小时浏览数、商户每小时浏览数、类别每小时浏览数

用户-商品每小时浏览数、用户-商户每小时浏览数、用户-类别每小时浏览数

4.排序特征

用户浏览时间正反序

用户浏览商品时间正反序

用户浏览商户时间正反序

用户浏览品牌时间正反序

用户浏览类别时间正反序

用户-类别,商品浏览时间正反序

5.受欢迎度特征

一个属性中某一类受欢迎度=该类对商品行为数除以总的行为数

6.其他特征

最小类别匹配度:预测类别中第几个类别和商品的最小类别匹配,都不匹配给0

top属性数:商品属性中属于top n的个数

一天内,用户第一次行为和最后一次行为的时间差

是否是用户第一次和最后一次浏览该商品

五.特征选择

我们主要参考了xgb对每个特征的重要度,然后再根据自己对数据的理解适当的增减特征

六.模型选择

我们最终选择的是xgb,不过我们也尝试过lgb,但是经过测试发现lgb的效果不如xgb。

param = {'booster': 'gbtree',
         'objective': 'binary:logistic',
         'eval_metric': 'logloss',
         'eta': 0.03,
         'silent': 1,
         'max_depth': 5,
         'colsample': 0.8,
         'subsample': 0.8,
         'scale_pos_weight': 1,
         'min_child_weight': 18}

plst = param.items()
bst = xgb.train(plst, dtrain, num_boost_round=500)

七.失败之处

此次比赛分为初赛和复赛,初赛给出的是正常天数的数据,复赛给出的是特殊天数的数据,我们猜测复赛给的数据中包含双11,因为统计发现有一天的数据量特别的大。在复赛的过程中,由于我们采用了和初赛同样的滑窗方式,没有考虑特殊天数,所以效果很不好。在赛后和top前几的选手交流过程中发现他们在复赛的时候基本都是用特殊天数的数据来作为标签区间来预测,采用7号上午作为标签区间,7号之前的作为特征区间,其中,可以对7号上午的数据抽取部分来做线下验证。此外,在交流的过程中还发现预测类目属性很可能是一个强特,它主要分为三个方面来提特征,第一是和商品类目来做交集,统计数量;第二是可以直接用来统计,划类别;第三是可以用来提取排序特征。

八.总结

做此次比赛之前由于中途去准备考研,所以有大概一年的时间没怎么写代码,一开始做的时候自己还挺懵逼,因为以前做的比赛和这个比赛有很多不一样的地方,不过还好有师兄师姐的帮助,自己很快就上手,真的特别感谢他们。

最后附上前2名选手的分享

https://github.com/YouChouNoBB/ijcai-18-top2-single-mole-solution

https://nbviewer.jupyter.org/github/plantsgo/ijcai-2018/blob/master/eda_solve.ipynb

猜你喜欢

转载自blog.csdn.net/zh11403070219/article/details/80852090