前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SPA大赛】移动app广告转化率预估算法优化思路及解决办法

【SPA大赛】移动app广告转化率预估算法优化思路及解决办法

原创
作者头像
何颖
修改2017-06-19 18:55:52
2.8K0
修改2017-06-19 18:55:52
举报
文章被收录于专栏:何颖的专栏何颖的专栏

一、引言

本次腾讯社交广告算法大赛以移动app广告转化率预估为背景,以移动App广告为研究对象,预测App广告点击后被激活的概率:pCVR=P(conversion=1 | Ad,User,Context),即给定广告、用户和上下文情况下广告被点击后发生激活的概率。大赛为我们提供了非常珍贵的真实数据,使得我们有机会把平时所接触到的理论加以实践,下面我们分享一些我们参赛过程中的心得体会。

二、数据,特征与模型

数据使用方面,几位周冠军同学都做了很好的分享,合理的选择线下测试集,使线下线上同步即可,唯一需要注意的就是数据的时序性,提取特征时要小心不要发生数据泄漏。在模型方面,因为之前没有转化率预测方面的经验,我们查看了kaggle上类似的几个比赛的成功经验,发现在这类问题上表现较好的大概有两类模型:ftrl与ffm这类针对id类稀疏特征的模型,以及xgboost这类主要采用dense特征的模型。

经过了一些尝试,我们发现ftrl,并没有取得预期的结果,这个不知道是我们的使用姿势不正确,还是app激活数据本身与广告ctr数据有所区别。后来通过同学们在公众号以及qq群中的分享,我们转向了xgboost模型,专注于点击数,激活数,转化率等各类统计特征,并进行组合特征的提取。这样粗暴的做法使得我们的特征维数很快就超过了100维,但是成绩并没有相应的提高,反而大大的增加了模型训练时间,于是我们开始着手精简手上的特征,精简的方式,一方面是通过查看xgboost的feature importance的结果,另一方面对于一些通过我们对业务的理解觉得重要的特征我们进行单独的验证,渐渐的我们的成绩有了提高。做特征时我觉得最重要的就是要细心,每一个细节可能都会有小小的提高。

这里分享一下我们最初做的数据分析:

[1496974948065_5430_1496974945447.png]
[1496974948065_5430_1496974945447.png]
[1496975042552_6871_1496975039874.png]
[1496975042552_6871_1496975039874.png]
[1496975049762_3005_1496975046854.png]
[1496975049762_3005_1496975046854.png]
[1496975070756_4819_1496975067810.png]
[1496975070756_4819_1496975067810.png]
[1496975077595_1894_1496975074649.png]
[1496975077595_1894_1496975074649.png]
[1496975083406_7245_1496975080466.png]
[1496975083406_7245_1496975080466.png]
[1496975089694_534_1496975086784.png]
[1496975089694_534_1496975086784.png]
[1496975095060_4511_1496975092093.png]
[1496975095060_4511_1496975092093.png]

初赛后期很多队伍进行了模型融合,取得了非常显著的提高,这里我们介绍一下我们的融合策略。我们分别尝试了模型加权平均,blending,stacking三种模型融合方式。采用融合的模型为xgboost模型,lightgbm模型以及scikit learn的ExtraTreesClassifier模型,对于不同的模型我们进一步的采取了不同的特征进行训练,进一步的增加模型的多样性。其中stacking方法提升最为显著,这里详细介绍一下。

相比于简单的模型加权平均以及blending,stacking可以更好的利用训练数据,这以 5-Fold Stacking 为例,说明下说明下我们的融合策略,train集上的操作如下图所示:

[1496975283588_1790_1496975281014.png]
[1496975283588_1790_1496975281014.png]

我们在stacking第一层选取xgboost1,xgboost2,lightgbm1,lightgbm2,ExtraTreesClassifier五个模型进行融合,上图即描述了具体的融合过程。对于模型1xgboost1,首先我们将训练数据随机的分成5份,用其中的4份数据(上图左侧蓝色部分)预测余下的1份数据(上图左侧黄色部分),重复上面过程5次,将5次预测结果放到一起就得到了上图中右侧的新特征1,对于五个要融合的模型重复上述过程,我们就的到了5维新特征。这5维度新特征将会在stacking第二层的中起到训练数据特征的作用。

对与test数据在是在stacking第二层的5维特征,我们通过下图方式得到:

[1496975291266_9683_1496975288323.png]
[1496975291266_9683_1496975288323.png]

以模型1xgboost1为例,上面已经说了在train集上用其中的4份数据预测余下的1份数据这个行为被重复了5次,每一次我们不止预测余下的1份数据,我们也对整个test数据集进行预测,这样我们就对test集预测了5次,对5次预测取平均,我们就得到了test集上的新特征1。对模型2到模型5我们在test集上重复上述过程,得到另外的4维特征。这样我们便在test集上得到了与train集上5维新特征对应的特征。在stacking第二层,我们依然选取xgboost模型,此时train和test集上的特征即为地一层stacking生成的新特征。

我们目前采取的融合策略还是相对简单的,模型数量和种类相对较少,所选模型都是tree based model,复赛中我们希望能结合ftrl,ffm等差异性较大的模型进行融合得到更好的结果。

三、展望

初赛已经接近了尾声,整个过程学到了非常多的知识,从特征的处理再到模型的选择,参数的调节,都有了更深的认识,非常感谢主办方能让我们接触到这么珍贵的数据,期待复赛更大数据给我们带来的挑战。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、引言
  • 二、数据,特征与模型
  • 三、展望
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com