专栏首页何颖的专栏【SPA大赛】移动app广告转化率预估算法优化思路及解决办法
原创

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

一、引言

本次腾讯社交广告算法大赛以移动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的结果,另一方面对于一些通过我们对业务的理解觉得重要的特征我们进行单独的验证,渐渐的我们的成绩有了提高。做特征时我觉得最重要的就是要细心,每一个细节可能都会有小小的提高。

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

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

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

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

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

以模型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等差异性较大的模型进行融合得到更好的结果。

三、展望

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在react底下安装环境

    王小婷
  • 干货-GitHub 使用中的一些细节

    第一次使用 github 的朋友相信都会挺陌生的,因为是纯英文的页面加上不适太熟悉内部的操作,所以一些常规的操作却找不到操作的入口,甚是捉急,本文就几个操作细节...

    進无尽
  • monkeyrunner入门例子(pyt

    #!/usr/bin/env monkeyrunner # -*-...

    py3study
  • Python常用库-Pillow图像处理

    在Pyhton图像库「Python Imaging Library」支持大量的图片格式,是图像处理和批处理的最佳选择,可以用这个来创建缩略图、文件格式之间的转换...

    叉叉敌
  • Python常用库-Pillow图像处理

    在Pyhton图像库「Python Imaging Library」支持大量的图片格式,是图像处理和批处理的最佳选择,可以用这个来创建缩略图、文件格式之间的转换...

    叉叉敌
  • Nginx入门指南

    NGINX 是一款来自俄罗斯的HTTP 和反向代理(reverse proxy)服务器、邮件服务器,以及通用的 TCP/UDP 代理服务器,以其高性能被业界广泛...

    用户1263954
  • View.Post()保证UI带你装逼带你飞

    因为当onCreate()方法被调用的时候会通过LayoutInflater将xml文件填充到ContentView。 填充过程中只包括创建视图,不包括设置...

    先知先觉
  • 五个值得一看的TED AI 演讲:盲目信仰大数据的时代必须结束

    【新智元导读】 如果您想更多地了解AI和机器学习的力量和潜力,一个好的地方是TED Talks。这篇文章推荐的五个演讲包括:机器人能通过高考吗;盲目信仰大数据的...

    新智元
  • Qt音视频开发28-Onvif信息获取

    严格意义上来说,Onvif处理这块算不上音视频开发的内容,为何重新整理放在音视频开发这个类别,主要是为了方便统一管理,而且在视频监控处理这块,通过onvif来拿...

    feiyangqingyun
  • 利用神经网络算法的C#手写数字识别

    尽管在过去几年已经有许多系统和分类算法被提出,但是手写识别任然是模式识别中的一项挑战。

    人工智能资讯小编

扫码关注云+社区

领取腾讯云代金券