腾讯广告算法大赛第一位周冠军是……
咳咳……
听说Ta不是第一次拿周冠军,
听说Ta是谜一般的存在,
听说Ta不想让照片上推送,
没关系,这里我们不看脸,求教经验最重要!
大家好,我叫郭达雅,是中山大学的一名本科生。这次比较侥幸的再续周冠军,也让我有机会和大家分享一下比赛经验及心得。
1、数据处理
这次比赛的数据量比较大,性能比较差的机器可能没办法把数据一次性读入内存并且跑出结果来。这里有两种方法可以处理这类问题,第一是使用流式训练的模型,如FFM,这类的模型有个好处是训练快,并且每次可以单独读取一个batch大小的数据进行训练,不需要一次性把全部数据读进来。第二是将数据分成五份,分别训练五个模型,对最终的结果取平均值,该方法是我们去年决赛进前十所使用的方法,不仅保证了性能也能使性能差点的机器能够跑起来。
2、特征工程
特征工程在这类比赛中非常重要,可以说是直接决定排名的地方。对于特征工程,我们给出两点建议,第一是使用小数据集去寻找强特征,这次我们只使用了1%的数据去寻找特征。第二是了解具体的业务,数据是能够反映真实情况的,所以了解业务是很有必要的,所构造的特征也应该往实际情况去考虑。比如说,不同的广告特性对于不同年龄段的人吸引度是不一样的,所以我们能够构造新的ID特征(如aid_age)。这次比赛中,广告和用户的交叉特征是非常有用的,如简单的进行上面的组合ID特征,也能够帮助提升不少的成绩,当然还可以统计不同广告特性对于不同年龄段的比例等。此次比赛,我们使用了bryan的baseline加上交叉特征和相应的交叉统计特征达到了0.755的成绩。
3、模型选择
我们这次比赛使用了GBDT和deepFFM,这两种模型各有优势。前者的性能非常出色,但缺点是无法进行流式的训练,这也导致了数据读取和训练的过程非常缓慢。而后者的训练速度快,但由于需要数据预处理,寻找特征时会浪费不少时间。因此,我们结合了两个模型的优势,利用GBDT在小数据集寻找特征,然后将特征给deepFFM学习。由于deepFFM是自己实现的,我也在里面添加了dropout层和修改loss function,使性能得到很大的提升,最后deepFFM单模型是达到0.753的成绩。
最后祝大家能够享受比赛的过程,也希望能够取得不错的成绩。
领取专属 10元无门槛券
私享最新 技术干货