首届腾讯社交广告“高校算法大赛”落幕 专访冠亚季军团队参赛心得

2017 年 7 月 12 日 数据玩家

导 读  




 7月6日,首届腾讯社交广告“高校算法大赛”正式落幕。在众多参赛团队中,来自南京大学的三人组合“nju_newbie”一举夺得决赛冠军,将30万元奖金收入囊中。决赛第二、第三名分别归属“Raymone”“我很难受”两支队伍都是由来自跨高校的算法达人组成的。



本次算法大赛的赛题是“移动App广告转化率预估”,即在给定广告、用户和上下文的情况下,预测广告被点击后发生激活的概率。以往,大多数广告系统受广告效果数据回流的限制,只能以曝光或点击作为投放效果的衡量标准,再开展优化。而基于广告转化数据训练转化率预估模型(pCVR,Predicted Conversion Rate),允许广告主在广告排序中优化投放效果,提升ROI。


从今年4月12日正式开放线上报名至今,近18000名参赛者经过了层层筛选和激烈竞争,同时也在竞赛中互相交流心得,在获得算法优化乐趣的同时收获了宝贵的实践经验。

   

拿下大赛冠军的“nju_newbie”夺冠历程可谓颇具传奇色彩,自称“菜鸟”的他们在决赛阶段成绩飞速提升,异军突起,将优势一直延续到了最后。而他们对自己的算法模型能够取胜保持了相当谦逊的态度。获得第二的“Raymone”团队以“数据清洗”为ACE,在验证特征的路上痛并快乐着,不断挑战着过去的自己。“我很难受”团队的名字则很直白的反映了参赛者某些时刻的竞技状态。纵然算法模型会带来瓶颈,却挡不住冲破困境继续前进的决心。


不妨通过以下对三支团队的采访实录,来感受一下算法大牛们的心路历程吧!

 


“nju_newbie”团队 



Q1  能否介绍一下团队的几位成员?


我们团队的3位成员杨毅、梁雨、沈少峰都来自于南京大学。杨毅的主要研究方向是nlp与推荐系统,梁雨的研究方向主要是数据降维与图像识别,沈少峰的研究方向主要是线形模型与集成学习。在这次比赛中,梁雨和沈少峰主要负责特征工程和参与模型讨论,杨毅主要负责模型改进与实现。


Q2  为什么会叫“nju_newbie”这个名字?


这个名字包含两部分,”nju”和”newbie”,其中”nju”是南京大学的简称,把nju放在前面是希望表达对南京大学的感谢,“newbie”是菜鸟的意思,代表在大数据面前我们是菜鸟,要以一颗求知的心去学习大数据中的技术,也是对我们自己的鞭策。


Q3  为什么会来参加腾讯社交广告高校算法大赛?


能参加腾讯社交广告高校算法大赛并拿奖其实有很大的机会成分在里面。队长杨毅在比赛开始时刚好在研究推荐系统和点击率方向的最新论文,从系群里看到有这个比赛,于是想要将最前沿的技术放在实际应用中衡量一下效果,没想到能取得这么好的成绩。队员沈少峰处于硕士快要毕业的阶段,想要通过比赛测试一下自己的能力,同时也接触一下工业界的数据,为即将到来的职业生涯打个基础。成员梁雨也是抱着理论实际应用的目的,将理论和实际结合起来,加深理解,从而提高自我。


Q4  据说你们在决赛中的成绩一直在火速提升,并获得了决赛第二周的周冠军,请问你们是如何让成绩快速提升的?


初赛时,我们使用深度学习模型效果并没有GBDT好。进入复赛后,由于数据量大大增加,深度学习模型的效果也大幅度提高,超越了初赛时效果最好的GBDT模型,这是我们决赛成绩能够进步的最大因素。其次,在复赛中,我们挖掘了几个非常有用的特征,并且对深度学习模型的结构做了一些优化。


Q5  比赛中遇到了哪些困难,如何克服这些困难?


比赛中遇到的问题可以归纳为精神上的困难和技术上的困难。第一是精神上的困难,参赛队伍都很优秀,每天排行榜上的成绩都会有很大提升,给人的压力很大;另一方面,每当遇到瓶颈时都是对精神的挑战,加上数据量很大,实验过程比较枯燥无味,对精神也是考验。面对这些精神上的困难我们会相互鼓励,偶尔会一起出去通过爬山、吃饭、唱歌来减压。第二是技术上的困难,比赛过程中不可避免的会遇到各种技术问题。为了攻克难关,我们互相讨论,查阅论文和资料,最后会请教老师。


“nju_newbie”团队代表答辩环节演讲


Q6  请简要描述你们的解题思路及算法亮点,并具体谈一下特征抽取、训练模型的建立,以及模型的训练思想。


大家的解题思路都比较相似。我们解题步骤分为数据预处理、数据去噪、特征提取、模型构建和模型融合5个部分。由于在特征上提出了稀疏特征的转化率编码方案,在模型上提出了nffm系列模型,并解决了一系列模型训练以及模型实现问题,我们才能取得好的成绩。特征抽取分为4个部分,即转化率、点击特征、安装特征和时间特征。模型上,我们采用了4种不同的模型,包括一个传统的GBDT模型,以及另外三个深度学习模型,分别是wide&deep网络、pnn网络和nffm网络。GBDT模型我们使用的是lightgbm,而wide&deep网络、pnn网络和nffm网络都是我们使用tensorflow和tflearn自己实现的,也正基于这点,使得我们很容易做模型改进、微调,这是非常有趣的事情。


Q7  如何看待这次的赛题内容?


这次的赛题非常有意义,我们应用的数据是腾讯公司的宝贵真实数据,这在国内也是屈指可数。这些数据对于在读的学生来讲是很难获取到的,无疑是一笔珍贵的财富。本次赛题的目标是转化率预测,相比于一般的点击率预测,转化率预测更困难,用户数据更稀疏,影响转化率的因素更多,这都是对于参赛选手的挑战。


Q8  在比赛中最大的感受是什么?


最大的感受是中国计算机行业的学生实力越来越强了,比赛的竞争越来越激烈。


Q9  对于未来参加这类算法大赛的同学,你们有什么经验或建议可以分享?


分享3点心得:

   1)坚持不懈,不断突破。比赛的过程是很长的,如果只靠一时的激情是无法获得最终胜利的,遇到困难一定要坚持。

   2)不破不立,勇于创新。不要拘泥于现有的模型和框架,一定要有自己的思考,要敢于创新。

   3)相信自己还远远没有达到极限。比赛的过程就是不断提高的过程,无论什么情况,一定要坚信还有提升的空间,除非达到了完全正确的程度。

 


“Raymone”团队



Q1  能否介绍一下团队的几位成员?


我们的团队由李淼、栗强、李达三名成员组成,来自大连理工和清华大学,分别负责数据分析、预处理,特征提取、模型设计、模型融合、模型训练等方面。


Q2  为什么会叫“Raymone”这个名字?


Raymone是我(李淼)的QQ昵称,最开始我们三个是单独组队的,当时我的队名选用的就是我的QQ名,后来他们两个直接加入进来,队名也就继续沿用了Raymone。


Q3  为什么会来参加腾讯社交广告高校算法大赛?


主要是想通过比赛与各位大佬交流学习一些东西,也希望借此机会接触一些公司实际应用中的数据。当然更希望通过打比赛获取好名次来为秋招和实习打基础。


Q4  你们在整个比赛中的成绩如何?对于自己的表现还满意么?


初赛最好的时候取得过第二名,初赛最终排名第13。决赛曾经短暂的位列第一,最终成绩第二名。对于成绩我们很满意。


Q5  比赛中遇到了哪些困难,如何克服这些困难?


比赛中还是遇到了很多困难。总结一下有两点:


首先是复赛数据量较大的问题。我想这也是所有参赛队伍都要面对的。由于数据量较大,所以我们对训练集进行了筛选,最后选用的是26-30的数据为训练集,且对30号的数据进行了预处理,过滤掉平均转化回流时间较长的app。另外,我们使用的训练验证集的划分方式是五折交叉验证的方式。虽然训练集筛选掉了一大半的数据,但是五折交叉验证跑26-30号数据的全集仍需要6小时以上(特征维度50+),所以我们在换b榜之前经常选用随机采样的方法来验证特征的有效性,采样比例是0.3。这样能最大限度的提高工作效率。


第二点,关于特征的提取,相信很多队伍也遇到过瓶颈。事实上,我们选择的方式是多思考赛题的实际意义。赛题要求是预测广告被点击后发生激活的概率,而用户点击广告后是否激活的一个主要驱动力就是用户对广告是否有需求,以及用户自身的安装力,所以用户的点击、安装历史以及用户针对具体某个App的点击安装历史尤为重要。基于这样的思考,我们构造出了一系列效果显著的特征,包括用户前一段时间内是否有点击、安装的记录;用户-App对是否在之前出现过、出现过多少次;用户-App对出现的次数等。此外,广告的位置信息也尤为重要。不同的广告位受到的关注度不同,所取得的推广效果也不同。


基于此,我们挖掘了数个与广告位相关的特征,包括转化率特征、历史点击量特征,以及用户、App与广告位的一些组合特征。此外,很多人都注意到了转化率特征的重要性,但很多人容易忽略的一点是用户的转化率特征。需要注意的是在利用用户转化率时需要进行恰当的分类,以免出现拟合的现象。


“Raymone”团队代表答辩环节演讲


Q6  请简要描述你们的解题思路及算法亮点,并具体谈一下特征抽取、训练模型的建立,以及模型的训练思想。


我们的算法框架为:数据清洗、数据划分、特征提取、模型训练、模型融合。


数据清洗应该算是我们的一个亮点了。由于转化回流时间有长有短,所以最后五天的label可能是不准确的,尤其是第30天。如果将第30天的数据全部删除,将会丢失掉大量有用信息;如果全部保留,又引入了相当程度的噪声。而我们发现,转化回流时间是与App ID有关的。于是我们统计了每个App ID的平均转化回流时间,并且删除掉了第30天中平均转化回流时间偏长的数据。这样处理之后,性能稍微有了一些提升。


此外,此前介绍,我们对特征也进行了充分的分析。对于position ID的充分挖掘、对于用户交互历史的充分分析都为我们带来了显著的提升效果。此外还有交叉特征的转化率在后期也起到了一定的效果。


数据划分部分,由于机器条件的限制,我们使用了第26天-第30天的数据。关于训练集验证集的划分,我们采用的是5折交叉验证。


特征提取部分,我们将其分为四项:

   1)基础特征,包括用户的基本特征、广告的基本特征、上下文特征;

   2)统计特征,对基础特征进行交叉后再统计,包括count操作和unique操作;

   3) 时间相关特征,主要统计了用户或用户-App在前一段时间内的点击次数或者安装次数;

   4)概率估计特征,对很多ID类特征,包括交叉ID类特征做了概率估计。


模型训练部分,我们刚开始一直使用的是LightGBM,训练速度非常快,在验证特征有效性方面可以大大缩短时间。我们的模型融合采用的是Stacking方法。除了LightGBM之外,我们又训练了FFM、LR、GBDT、ET模型。最终Stacking帮助我们提高了2.5个万分点左右。


Q7  如何看待这次的赛题内容?


本次赛题以移动App广告为研究对象,预测在给定广告、用户和上下文的情况下,广告被点击后发生激活的概率。赛题让我们接触到了真实场景中的数据,对社交广告点击转化率有了一定程度的了解,很有实际意义。


Q8  在比赛中最大的感受是什么?


比赛中最大的感受就是一个字——累。体力上的累只是一方面,更多的是心理上的累。前一天成绩不提升,第二天中午十二点的时候排名绝对会下降。可以说是和时间赛跑,几乎每天都在绞尽脑汁地去分析赛题构建与验证特征,承受着构建特征无价值以及想不出新特征又要提高成绩的压力与痛苦。当然,每次突破瓶颈成绩大幅提升的时候,兴奋之情是无以言表的。


比赛的全过程,从初赛到决赛,再到赛后的答辩准备阶段压力都很大。但正是比赛过程中成绩的压力让我们始终保持着一种紧迫感,保证了学习和coding的高效率,从而也成长了许多。也感谢各支参赛队伍的激烈竞争,大家都在竞争中进步。


Q9  对于未来参加这类算法大赛的同学,你们有什么经验或建议可以分享?


从前两年的找比赛做到今年的选比赛做,最近几年国内的比赛越来越多,也说明了国内各个公司对机器学习相关岗位的重视程度。很多同学参加比赛的目的主要是两类,一是想学东西,一是想拿奖金,其实如果做好了两者可以兼得。所以建议参赛的同学有条件的情况下找老司机带路,多在比赛的群里与大佬交流学习,多看周冠军的总结。另外也要注意赛题的实际意义。在很多比赛中都是特征为王,所以多结合赛题的实际意义总会挖掘到很有用的特征。此外,想多了解比赛的奥义就要多看kaggle,多看大佬们的开源代码。只要认真去做,每个比赛的过程都会学到很多。我们也是随着比赛而逐渐成长,所以很高兴在此与各位同学交流,希望大家都能从腾讯的比赛中有所收获。

 

“我很难受”团队



Q1  能否介绍一下团队的几位成员?


我们团队有三位成员,分别是李智,李强跟李博。李强是团队队长,他来自吉林大学,李智来自北京航空航天大学;李博来自北京邮电大学。比赛中,我们分工合作,配合默契,分别负责数据分析,特征挖掘以及整个框架设计;各种模型的尝试和比赛进展整体安排;以及模型融合相关工作。


Q2  为什么会叫“我很难受”这个名字?


其实这个名字之前参加比赛就有了。起这个名字是因为在比赛的过程中,真的很容易陷入一段瓶颈期,看着自己排名一直下降,连续几天没有提高是最难受的事情,后来发现这个名字也很符合我们的状态,参加比赛,难受并快乐着。希望在今后的比赛中,我们的状态会越来越好。


Q3  为什么会来参加腾讯社交广告高校算法大赛?


腾讯平台好,奖金丰厚,会吸引很多的算法大神来玩,这样就可以跟大佬们一起同台竞技了。而且都是学生参赛,交流更加顺畅,是非常好的学习机会。另外,通过比赛,可以让自己的实力得到大家的认可,非常棒。我跟队友之前比赛配合比较默契,考虑到一来可以继续学习,二来可以获得招聘绿色通道,三来也许还会有奖金收获,就一起参加比赛了。


Q4  你们在整个比赛中的成绩如何?对于自己的表现还满意么?


因为参加比赛的时候已经快要到决赛阶段了,时间上比较紧张,所以最后拿到季军基本算是完成了目标。但是这次比赛的成绩还没有达到我们的上限,虽然对于这次的表现还算满意,但是我们觉得可以做的更好。


Q5  比赛中遇到了哪些困难,如何克服这些困难?


在比赛中我们常常会遇到内存溢出的问题,每当看见晚上通宵跑的代码显示Memory  Error我们真的很难受,因此不断地通过优化代码来减少空间复杂度。比赛中也常常会遇到瓶颈期,在成绩长时间无法提高后,往往是最痛苦的时候,这时候千万不能放弃,要相信自己以及队友,静下心来好好分析。火箭往往在一系列的尝试之后才会顺利起飞。


“我很难受”团队代表答辩环节演讲


Q6  请简要描述你们的解题思路及算法亮点,并具体谈一下特征抽取、训练模型的建立,以及模型的训练思想。


比赛的题目是广告转化率问题,我们将它转化成了二分类问题。我们定义了App非当天转化率,并在删除错误样本比例和保留样本比例中找到了平衡点,充分使用了数据。在特征提取中我们会根据业务理解以及自身的经验提取特征,并对每个特征做分析,比如特征间的相关性,特征不同取值下转化率是否有明显变化。我们使用了xgb,lgb,ffm作为最后的模型,在xgb,lgb模型中我们使用了连续特征和类别特征训练,而ffm模型中我们使用xgb模型的输出作为ffm模型的输入,最后将三个模型通stacking的方法融合。


Q7  如何看待这次的赛题内容?


这次比赛赛题非常契合我们的生活,因为我们经常使用各种App,所以这个赛题在生活中很容易找到应用场景,并且可以把整个App下载激活流程演练一遍,以此来思考赛题要我们分析的内容。我记得有一支决赛答辩队伍还特意申请了一个广告主,去体验广告是怎么发布的。所以整体给我们的感觉就是赛题代入感很强。


Q8  在比赛中最大的感受是什么?


最大的感受就是比赛竞争很激烈,压力也很大,不过同时也学到了很多东西。我们比赛的分享精神很足,一直在跟着各路大神学习,自己水平也提高了很多。特别是比赛的组织者和负责联络的人员态度和服务都非常好,一直在耐心解答我们的问题,在决赛答辩期间也非常努力,给所有的工作人员点个赞。


Q9  对于未来参加这类算法大赛的同学,你们有什么经验或建议可以分享?


纸上得来终觉浅,绝知此事要躬行。机器学习和数据分析也是一样的,不能仅仅在书本里面学习,还要参加实际的项目比赛。参加比赛的时候可以一边学习一边竞技,不一定非要准备的多么完善才能参加(其实永远有学不完的东西)。大家在参加比赛的时候一定要理清思路,特别是赛题理解和特征提取,把整个比赛做成模块,每个部分高效进行,改进也更方便。另外要合理分配时间,特别是特征提取和模型融合的安排。最后也是我认为最重要的,就是要及时总结,做笔记,不论是源码笔记还是算法原理笔记,提升非常大,大家可以尝试一下。祝大家今后的比赛取得好成绩!




登录查看更多
1

相关内容

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。
商业数据分析,39页ppt
专知会员服务
160+阅读 · 2020年6月2日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
97+阅读 · 2019年12月14日
2019腾讯广告算法大赛方案分享(冠军)
大数据技术
12+阅读 · 2019年8月26日
一个统计方向毕业生的2017年数据科学从业之路总结
数萃大数据
5+阅读 · 2018年2月21日
YesOfCourse团队在Kaggle文本匹配竞赛中获得优异成绩
中国科学院网络数据重点实验室
10+阅读 · 2017年6月15日
Arxiv
5+阅读 · 2019年4月8日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
6+阅读 · 2018年3月29日
VIP会员
Top
微信扫码咨询专知VIP会员