前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019腾讯广告算法大赛入门-Part1(竞赛小白晋升之路)

2019腾讯广告算法大赛入门-Part1(竞赛小白晋升之路)

作者头像
Coggle数据科学
发布2019-09-12 17:39:20
9890
发布2019-09-12 17:39:20
举报
文章被收录于专栏:Coggle数据科学Coggle数据科学

或许是个能上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都非常合适。为什么选择这两个模型呢,主要因为树模型对特征处理的要求不高而且效果也相当不错,不管是类别特征,连续特征效果都很友好,同时多缺失值也可以训练,不需要填充。(有时缺失值也是有意义的,随意填充可能导致预测结果变差)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 1.赛题分析
  • 2.问题建模
  • 3.探索性数据分析(EDA)
  • 4.特征工程
  • 5.模型选择
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档