1. 大赛介绍

    计算广告是互联网最重要的商业模式之一,广告投放效果通常通过曝光、点击和转化各环节来衡量,大多数广告系统受广告效果数据回流的限制只能通过曝光或点击作为投放效果的衡量标准开展优化。腾讯社交广告(http://ads.tencent.com)发挥特有的用户识别和转化跟踪数据能力,帮助广告主跟踪广告投放后的转化效果,基于广告转化数据训练转化率预估模型(pCVR,Predicted Conversion Rate),在广告排序中引入pCVR因子优化广告投放效果,提升ROI。
    本题目以移动App广告为研究对象,预测App广告点击后被激活的概率:pCVR=P(conversion=1 | Ad,User,Context),即给定广告、用户和上下文情况下广告被点击后发生激活的概率。
    详情链接:http://algo.tpai.qq.com/

  2. 队伍介绍
    我们队伍是由两位中大与一位香港科技大学的硕士所组成的队伍,队伍成员都是第一次参加数据挖掘的比赛。经验上有很多不足的地方,很多细节也没有处理得很好。在初赛和复赛都曾到达过第三的成绩。但是最终决赛却没有进入前十,还是觉得很遗憾。

  3. 技术方案
    萌新队伍真的是一点经验没有。全程都是摸爬打滚的。所以代码架构很乱,很多细节都没有处理好。比赛结束后简单总结了一下我们队伍的整个比赛方案流程。主要包括下面几点:

    特征构造:
    比赛中特征主要包括三大类,主要包括用户信息,广告信息,上下文信息。基础的特征都是离散的id信息,对于一些类别比较少的id的是可以做onehot的。但是由于我们后期改用了统计类的特征,它们与id类特征的onehot后是重复的,所以后面我们都没有使用onehot的特征。我们统计的特征主要包括四大类:某个id(或两个id组合)的点击次数、某个id(或两个id组合)的转换次数、某个id(或两个id组合)的转换率、一个组合在其中一个id下的条件概率。
    除了简单的统计类特征,我们还根据预测集简单构造了一些leakage的特征。比如某个用户当天的点击广告的前后时间差之类的。这些特征是对成绩有很大提高的,但是实际业务中不可能获取。

    特征抽取与清洗:
    我们尝试遍历了所有的统计类特征,然后抽取一部分样本放进去xgboost进行重要性排序。然后再结合皮尔森系数进行特征的清洗。这个流程我们是自动化处理的,这样子提取到的特征其实就已经能够拿到一个很好的分数了。但是就是因为我们太过暴力简单地遍历,导致上限也十分明显。

    模型训练:
    我们比赛主要使用了xgboost、lightgbm与ffm这三个工具。ffm是在决赛时候才使用的。我们也尝试使用过sklearn的随机森林与gbdt的库,但是线下成绩都不理想,所以就直接弃用了。xgb与lgb相信参赛的队伍都使用得十分熟练了,所以也不想说明太多。相对于其他队伍而言,我们的ffm的方案的成绩是比较好的。FFM的数据预处理十分重要,主要是针对特征进行离散化。不同类型的特征的离散化方案是不一样的,比如对于长尾分布明显的特征(比如某个id的点击次数)需要先取log进行分箱操作。而对于平滑后的转换率类的特征,其实可以比较简单的进行归一化之后直接分箱。而且gbdt输出的叶子节点是一个很强的特征,把gbdt的叶子节点加入FFM,可以让FFM有一个很大的提升。

    模型组合:
    我们队伍的模型组合真的是迷一样的操作。基本没有什么提升,哪怕是FFM与gbdt的ensemble都没有明显提升。stacking的效果也不好。总之很迷,个人觉得是出现了数据泄露之类的问题。可是又想不清楚哪里数据泄露了。。。所以这里就不要作介绍了。

  4. 比赛反省
    这里才是我最想写的部分。对于这个比赛,从头看了一遍自己的代码与架构,发现真的乱得惨不忍睹。今天要提交代码,一度想连前20的资格都不想要。这里将分成代码与架构、模型、特征、数据分析、拓展性五部分进行反省。

    代码、架构与工具:
    虽然本人对机器学习还是有一定了解的。但是却对很多开源好用的工具没有涉及。整个比赛的代码架构,基本都是自己边写边琢磨的。很多统计类的特征,都是自己用python的字典硬刚统计,基本没有使用过pandas、sklearn等机器学习的好用的工具。总之在这个方面,个人真的有很大的短板,也严重影响了开发效率。特别是前期的数据分析阶段,基本都没有做过。而且这个也导致整个代码的架构很凌乱,复用性很不强。个人感觉真的需要看看别人的开源框架,从逻辑层将代码分离。

    模型:
    我们很大部分的精力都集中在了特征工程上,这个是没错的,因为特征真的决定了上限。但是我们却对模型没有太深究,这个直接导致了我们最后面的决赛的模型融合阶段是完全瞎操作。其实特征工程和模型选择两者没有本质的冲突,在特征工程的时候,应该多了解更多相关可以解决比赛的模型。这个是很有必要的,不要盲目地调用api,要根据自己的特征对模型进行修改才是真正能上得了台面的大神。

    特征:
    虽然我们花了很多时间在特征上面,但是并不代表我们的特征工程是做得很好的。相反,30名左右的队伍的特征工程可能都做得比我们要好。在初赛阶段,我们尝到了特征遍历的甜头(轻松进前十),导致我们认为只要遍历特征,选取重要性高的特征其实就可以了。这种想法真的太naive了。。。现在想想都觉得羞耻。个人觉得很多大神的分享还是很有用,不应该直接暴力遍历特征,那样子对机器的要求太高,而且准确度也不一定高,拓展性不强。
    统计类特征其实是不需要太操心的。因为根据不同的模型,我们可以改换使用onehot,组合特征的表示,如果使用deep and wide这样的模型,也是可以解决的。 这种特征其实并不需要花太多的心思。重要的magic的特征从来都是从业务出发的。所以在构造的特征的时候,并不需要优先遍历所有的特征,而是应该从业务分析一些模型没有办法自动组合出的特征。比如一个用户的历史点击序列(01串)之类的特征,额外的辅助文件(比如这次比赛的action与install)生成的特征。其实很多的特征从业务上就能够判断是否关联偶尔,比如上下文的特征,其实是不需要做任何的关联的,上下文的特征往往都是一个bias而已。
    再者,我们在比赛中对数据的处理太粗糙。虽然树类模型是不需要做归一化处理的,但是我们甚至前面生成转率特征之类连平滑都没做,缺省值的情况都没有处理。而且其实在前期就做归一化,离散化地处理对后面的其他模型的组合有大帮助。

    数据分析:
    这个和工具有一定关联。在这个比赛中,我们直接就开始了特征工程,只是进行了一些简单的分布分析,看分布来选取了训练集和测试集。其实这个是很不合理的,特别是比赛中明显交代了最后几天的数据不是完全准确的。我们的选择方案是直接弃用最后一天,但是却没有想过前后两天的信息关联性很大,前一天出现的id往往在后一天也会出现。总而言之,我们并没有针对测试集和训练集中的id分布做分析,这个真的是一个很愚蠢的事情。。。也是导致我们没有进前十的一个很重要的因素。

    拓展性:
    这个拓展性主要包括代码的拓展性和数据的拓展性。我们的代码拓展性真的做得很烂,基本写一个操作就要换重新换写一次脚本,一个脚本处理一个问题,参数都是写死在脚本里面,没有写那种可以通过传参动态处理问题的脚本。还有就是我们数据的拓展性做得很差,我们生成了一堆特征文件,但是都只是6天的,导致我们想增加训练天数的时候,根本没有拓展性可言。这个也和我们代码没有拓展性有一定关系。

  5. 最后总结
    总而言之,我们整个比赛的方案流程是存在严重问题的。初赛与复赛的任务分配都很蠢。初赛应该在注重特征工程的同时,让自己的代码架构更具有复用性,方便复赛使用。而且在初赛后期的阶段其实就可以做一些简单的模型组合的尝试了,但是我们也没有。
    最后再总结一下自己需要做的改变:
    1.多了解数据挖掘的开源工具,对一些经典的方案与源码进行研究。
    2.多一点写代码,优化自己的代码风格,还有编码的架构思维,毕竟在数据挖掘中的python使用和面向对象的编程还是有很大区别的。
    3.多一点尝试复现别人的模型,这个可以和第一点结合。选取一些比较outperform的论文进行分析,和代码复现~

第一届腾讯社招广告大赛总结相关推荐

  1. ios kvo 要引入_腾讯社招iOS面试记录

    毕业好几年了,上周发送了简历给腾讯,参加了腾讯面试.具体部门这边就不说了.这次面试还是收获到了很多. 一面电话面试: 面试官主要是针对iOS相关的基础问题. 先简单自我介绍一下自己 对mrc和arc的 ...

  2. BeautifulSoup4:抓取腾讯社招页面的招聘信息

    Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. 正则.Beautiful Soup.lml对比 lxml 只会局部遍历,而Bea ...

  3. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

  4. 计算机网络课程思政教学设计,信息与网络工程学院成功举办第一届课程思政教学设计大赛...

    为有效贯彻全国高校思想政治工作会议精神,强化课程思政建设,全面提高人才培养质量,根据<教务处关于举办第一届课程思政教学设计大赛的通知>要求,结合学院工作安排,7月18日,信息与网络工程学院 ...

  5. 网络爬虫--17.【BeautifuSoup4实战】爬取腾讯社招

    文章目录 一.要求 二.代码示例 一.要求 以腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifuSoup4 ...

  6. 腾讯社招 —— 腾讯游戏后端工程师(一面)

    腾讯社招一面 事情已经过去差不多3星期了,还是鼓起勇气来记录一下腾讯社招的两个部门的面试,被问的怀疑人生.觉得自己毕业一年了,什么都没学会. 这是继上次电话面试之后,第二天中午,让我晚上到科兴科学园面 ...

  7. 记工作一年后腾讯社招面试经历

    腾讯社招面试经历 电话面试 在某招聘APP投了腾讯一个C++后台开发岗位后,收到电面邀请,时间是晚上7点半.当时还没下班,提前跑到办公楼外面接电话.主要问了一些语言.数据结构方面的基础知识,聊了将近5 ...

  8. 腾讯社招面试复习系列之一,C++篇

    腾讯社招面试复习系列之一,C++语言篇 最近在准备复习面试腾讯游戏开发,接下来会出一系列复习文章,总结一些他人的面试题与经验,以及之前自己面试时经验,并给出一些自己的见解,供大家一起学习. C++语言 ...

  9. “世格杯”第一届全国大学生外贸跟单技能大赛顺利举行

    2012年12月1日上午10时,"世格杯"第一届全国大学生外贸跟单技能大赛在江苏经贸职业技术学院顺利举行.来自全国47所院校的102名参赛选手进入赛场,进行外贸跟单技能的比试. 转 ...

  10. 网易互联网雷火互娱22届校招及社招内推

    一.网易互联网 内推时间:6.29-9.16 内推对象:2022届毕业生技术岗 内推优势:优先筛选简历 内推步骤: 点击链接获取专属内推码 [网易]2022届网易互联网校园招聘内推开始啦!给你分享我的 ...

最新文章

  1. 神经网络的演变与发展(Part 2)
  2. ps拨号服务器原理_呼叫中心的原理和功能
  3. 卧槽?用 Python 还能玩 Git?
  4. weblogic12 linux部署,linux系统中安装部署weblogic12.1.3
  5. L1-008 求整数段和(解题报告 C语言实现)(11行代码AC~!)
  6. jmeter吞吐量_深入理解Jmeter常用定时器
  7. 【背包】小明逛超市(jzoj 2148)
  8. mysql 变量定义和赋值_MySQL变量解析
  9. hadoop中4种压缩格式的特征的比较
  10. linux可以同时有两个mysql吗_Linux 同一系统安装两个MySQL
  11. UWP 手绘视频创作工具技术分享系列
  12. freenas 11.2踩过的坑
  13. android客户端设计,图文详解Android客户端界面设计教程
  14. 安装linux时如何选择内存,安装Linux时硬盘划分以及挂载点问题
  15. 知乎高赞!怎么自学 python,大概要多久?
  16. mysql组合索引,abc索引命中
  17. [转]用友NC单据UI基本代码示例
  18. 堆结构(二) - 左倾堆的原理与实现
  19. 第一节:服务注册与服务发现
  20. Docker可视化工具

热门文章

  1. python进行主成分分析_python 主成分分析
  2. Linux CentOS安装增强功能--完整版命令
  3. 水题 ZOJ 3880 Demacia of the Ancients
  4. 《洛神赋》髣髴兮若轻云之蔽月,飘飖兮若流风之回雪
  5. ie edge浏览记录文件_如何在Microsoft Edge中清除浏览历史记录
  6. 参与者模式(Actor model)
  7. 美团秋招高频面试问题汇总!(内附答案!)
  8. 实对称矩阵性质的数学证明
  9. WIN10 激活系统
  10. 净推荐值(NPS):用户忠诚度测量的基本原理及方法