本文主要是介绍腾讯社交广告高校算法大赛——总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转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(∑if−1(pi)n)p=f(∑if−1(pi)n)
除了stacking的模型,同时也考虑全集和滑窗特征上的单模型效果,还有每个component成绩,进行融合:
赛后总结
个人感觉在模型的stack方面,已经做到了很好的程度,实验的结果表明比单模型的效果要好且鲁棒性更高。但是决赛后期尝试使用ffm算法,但是效果一直不理想,所以只是稍微的加进去原来的模型中进行融合。
这篇关于腾讯社交广告高校算法大赛——总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!