腾讯社交广告高校算法大赛——总结

xiaoxiao2021-02-28  23

转https://blog.csdn.net/ben3ben/article/details/74838338

腾讯社交广告高校算法大赛——总结


题目描述

http://algo.tpai.qq.com/home/home/index.html


成绩

决赛第7名


赛题分析

  比赛中,我们比较关心的一个问题在于:数据线上线下分布不一致:1、某些app和用户的记录比较少;2、数据的时效性要求较高。这对于特征工程会是一个比较大的要求,在比赛中有许多的特征会使得线上的成绩下降,比如各种差分的特征。


特征工程

特征的提取主要有以下几个方面:

基础特征:计数特征、转化率、比例特征等各种基本的特征;线上的特征:基于当天数据统计的用户行为、app行为的特征;用户行为挖掘特征:word2vec计算用户行为与历史行为的关联;

特征提取方式有以下几个方面考虑:

基于cv统计、贝叶斯平滑等方法,能够很好的修正线上线下的特征分布不一致的问题;特征提取主要有基于全局的数据统计以及滑窗的历史统计。  基于全集的数据统计生成的特征:是决赛中主要的特征提取方式,效果比较平稳,而且信息量比较多,但容易会有信息泄露的问题需要通过cv统计来避免,而且难以反映时间变化的信息。基于滑窗的生成特征:能反映时序上的信息,不会有信息泄露的问题。但是生成的特征数量多,线上线下的分布差异比较大,特征工程方面的工作量比较大。

因此,比赛中我选择了两种生成特征的方式来产生不同的模型进行融合。


特征选择

在初赛阶段,主要有以下三种方式来筛选特征:1、删除线上线下均值差异30%以上的特征;2、通过xgboost计算的特征重要性,删除重要性较低的特征;3、通过wrapper的方式选择特征。通过以上方式能够保证线上线下的特征稳定,但这工作在决赛数据量大的情况下会比较耗时。在决赛阶段,每加入一部分特征,通过线上的成绩反馈来选择特征的去留。

模型方法

  比赛中主要使用stacking 的方式,其中一个模块的示意图如下: 

  如图所示,模块中使用cv的方法,把数据分成5份来进行训练和预测,这样模型的效果会比单模型的要好些(相当于投票的一种策略)。此外模块中stack3层,每一层使用原有的特征和预测值作为下一个模型的输入,增强模块的精度。模型中使用xgboost和lightgbm。   这种模型的缺点在于,效率是单模型的十几倍,因此需要一种策略来保证效率。这里我使用分而治之的思想,每一次训练使用上一个模块的预测值和当前新提取的特征,作为下一个模块的输入进行训练,不断迭代。这样相当于把所有的特征分成很多部分分开训练,并且在决赛中通过线上成绩反馈来选择特征的去留。最终模型的流水线如下:     Component就是模型的一个模块(cv5份和stack3层的模块),每次提取新的特征则加入到新的component中训练。这里流水线中使用了15个模块。   实验中,随着加入的特征越多,模型效果变得更好。模型的效果如下:   


模型融合

主要有两种融合的方式:

加权融合:当融合的模型效果差异大时,根据线上的成绩人工设定融合的权重;logistic平均:当融合的模型效果差异小时,采用以下公式进行融合:p=f(if1(pi)n)p=f(∑if−1(pi)n)

除了stacking的模型,同时也考虑全集和滑窗特征上的单模型效果,还有每个component成绩,进行融合: 


赛后总结

  个人感觉在模型的stack方面,已经做到了很好的程度,实验的结果表明比单模型的效果要好且鲁棒性更高。但是决赛后期尝试使用ffm算法,但是效果一直不理想,所以只是稍微的加进去原来的模型中进行融合。

转载请注明原文地址: https://www.6miu.com/read-2350268.html

最新回复(0)