或许是个能上86的思路分享
目前最优得分结果是规则 模型的分数
最新得分
写在前面
这试腾讯的第三届广告算法大赛,也是我第二次参加,18年很意外的拿到第十一名,虽然距离决赛只差一步,不过结果还是很令我满意的,毕竟去年的我只是初打比赛不久的小白。作为过来人,我想在此分享下我的基本解题思路。让我们一起打比赛吧!!!
参加2018年腾讯广告算法大赛决赛是一种怎样的体验?
2018腾讯广告算法大赛总结/0.772229/Rank11
分享内容不会有任何相关代码!
分享内容不会有任何相关代码!
分享内容不会有任何相关代码!
1.赛题分析
这次比赛完全不同于17和18年的CTR方面问题。本次竞赛将提供历史n天的曝光广告的数据(特定流量上采样), 包括对应每次曝光的流量特征(用户属性和广告位等时空信息)以及曝光广告的设置和竞争力分数;测试集是新的一批广告设置(有完全新的广告id, 也有老的广告id修改了设置), 要求预估这批广告的日曝光。
第一眼:看到这个赛题我想到了两点:1.这是一个回归问题;2.和时间有关,或许可以当成时间序列问题来解决。然后我就开始回想相关的比赛有哪些,常用的解决方法有哪些。
第二眼:看数据到数据时,其实并没有想到数据里面居然有很多需要进行清洗的。比赛前两天写好的baseline,然后一看到具体数据,完全懵了。如何构建训练样本都成了一个问题。主要从三个方面看数据:1.是否缺失 2.各类别分布 3.大概能构造什么特征,这也就完成了基本的工作。另外由于数据比较大,每次读取很麻烦,尝试h5格式,飞一般的感觉!!!(pandas.DataFrame.to_hdf - pandas 0.24.2 documentation)
第三眼:看评价指标,比较特别,SMAPE还好点,主要是单调相关指标,然后跟我来读下描述“由于竞价机制的特性,在广告其他特征不变的前提下,随着出价的提升,预估曝光值也 单调提升才符合业务直觉。”公式:
显而易见,预估曝光值和出价成正比时,这里才能得到高分。举个例子:有三个相同广告id的样本,其出价是{1,10,100},曝光量是{1,1.1,1.2},可以看出随着出价的提升,曝光值也在提升,符合单调性,故满分。想想看,我们是很容易得到60分的,然后仅使用一行代码就能得到79 。
有了初步的了解,我开始对问题进行建模,一起来构建baseline(当然,这里是没有代码的)
2.问题建模
我发现,即使对赛题有了一定理解,可是还不知道怎么进行问题建模,这个怎么没有给标签啊,该怎么构建标签呢?
这里,我给出三步介绍,从而有一个初步的思路
第一步:简化问题。当拿到数据知道如何建模,不要想的太复杂,先得到一个基础结果,然后再慢慢改进。目标是广告日曝光值,我们可以通过日志数据统计得到,groupby('广告id',‘请求月’,'请求日')进行组合统计出现频次即刻。
那么问题来了,相同广告的出价一直在变,要不要加上出价进行组合呢?官方解释出价会动态调整,看来是个不确定的值,所以我们先放一放,不考虑出价这个特征。
第二步:原始特征。看看有什么可以用的特征,主要是比较稳定,不会有太多问题的特征,所以我给出的原始训练特征有广告id,素材大小,广告行业id,商品类型,商品id,广告账户id,恰好测试集都包含这些特征,然后构造好的广告id和标签数据与广告静态数据经行合并。这样特征就对应上了。
第三步:交叉验证。特征构造好了,接下来就需要进行线下验证。这里给出两个验证方案,1.由于是时序问题,为了避免数据泄露,常选择训练集最后一天进行线下验证。2.K-folds交叉验证,这个线下应该会比方案1线下好些。
这样走下来,你就可以直接训练模型了,记住“先得到一个结果,然后再不断地调整优化”(这是吴恩达说的,可不是我说的)
3.探索性数据分析(EDA)
3.1 离群点处理
bid散点图
quality_ecpm散点图
totalEcpm散点图
3.2 时间的重要性
每天的总曝光量
可以看出不同时间得总曝光量是不同的,所以我们可以选择保留请求时间特征。
4.特征工程
当然,原始特征远远不够的,我们还需要挖掘更多特征。接下来要使出我的“三刀流”特征构建大法。
第一刀:目标编码,一切问题都可以考虑根据目标变量进行有监督的构造特征。此题也不例外,目标变量为广告日曝光值,那么我们就可以构造与目标有关的特征。然而这会存在一个问题,特别容易过拟合。
记得OGeek比赛刚一开始,我的好友小幸运刷刷刷的就分享了一个baseline,比较简单,帮助很多人很快进入到比赛。但是也让很多人陷入到困惑,为什么线下非常好,线上却崩了。究其原因是进行目标编码的时候没有防过拟合处理,导致数据泄露。有效的办法是采用交叉验证的方式,比如我们将将样本划分为5份,对于其中每一份数据,我们都用另外4份数据来构造。简单来说未知的数据在已知的数据里面取特征。
鱼遇雨欲语与余:天池-OGeek算法挑战赛Baseline(0.7016)zhuanlan.zhihu.com
第二刀:统计特征,一切皆可统计,类别特征可以计数统计,可以nunique统计,数值特征可以均值统计,最大最小,中位数等。官方解释把该问题抽象成一个符合正相关性的CTR预估问题,也就是说pctr越大,其曝光量就应该越大。既然广告曝光预测问题不好理解,我们可以将其转为CTR问题。这样就可以根据相关赛题,联想到很多特征。
第三刀:历史平移,对于这种包含时间的时序问题,测试集的具体数据是不知道的,我们可以使用前n天来曝光量,或者是pctr作为测试集的特征。如下图,d-1天的信息作为d天的特征,这种相近日期的数据相关性是非常大的。在群里也能看到很多人直接用前一天的曝光量才填充,这种规则就能得到很高的分数。
5.模型选择
作为基础的模型,lightgbm和xgboost都非常合适。为什么选择这两个模型呢,主要因为树模型对特征处理的要求不高而且效果也相当不错,不管是类别特征,连续特征效果都很友好,同时多缺失值也可以训练,不需要填充。(有时缺失值也是有意义的,随意填充可能导致预测结果变差)