【 SPA大赛 】腾讯社交广告大赛初赛阶段小结

引言

大家好,我是香港大学机械工程专业的一名在读研究生.在大四学年瑞典皇家理工学院交流学习的过程中,阴差阳错的将machine learning当作机械类课程选择,从此打开了我通往机器学习的大门.这篇分享算是对我初赛阶段的工作与成果做一个总结,也分享一些心得,希望能帮助到更多对机器学习及广告系统的感兴趣的同学.

我是<神经图灵机>队伍的唯一一个队员, 一个人做优点是自己非常清楚比赛的节奏,以及目前结果的优劣,因为从数据处理,特征工程,模型搭建,训练调优这一系列过程完整的做下来后,对比赛想不了解都难.但还是羡慕组队的同学,毕竟一个人思维会有限制,而且工作量也大大提升. 不过建议在未来比赛中,大家在对数据与题目有充分了解的情况下,做出较为满意的成绩,再与其他成绩相仿的同学组队,这样会事半功倍,结果也会有较大的提升.

1. 对赛题及其工业背景的深入了解

虽说目前的机器学习工具包功能强大,诸如xgboost等的分类器使用默认参数就可以从没有处理过的数据中提取出有价值的信息,做到效果很好且繁华能力很强,但想要更上一层楼,还是要脚踏实地.

首先,我所花时间最长,也是感觉最重要的一环,是对赛题与数据要做到非常充分的了解.比赛名为腾讯社交广告算法大赛,那么我们一定要花一些时间了解一下当今媒体广告包括腾讯广点通平台的运营和收费机制,这些知识虽然看似与赛题不想管.但在我目前来看,对我特征工程和数据处理起到了潜移默化的巨大的影响.举个例子,在比赛数据中,出现了广告主-推广计划-广告-素材这样的4级树关系,应该所有同学都能从字面上理解这样的层级关系,在数据处理时进行类似树结构的方式也并不难想到,但其实仔细推开社交广告运营的机制,我们还能从这样的关系中发掘更多潜在的机器学习分类器很难自我学习,却有价值的特征.

2. 数据可视化及分析

对数据分布统计在每一个数据竞赛中都会需要, 较为体系化的分析流程与开源代码教程也不难找到. 本次大赛的另一个特点便是数据带有时序性, 这给数据处理与分析造成不小的困难. 我这里主要分享一些我所做的涉及时间序列的分析工作与成果.

(1) 截止至该日共出现的各个变量的不同值的数量

可以看到, 每日都会有新的之前从未出现的userID以及appID加入(对ad, creative, campaign, advertiser也等同). 这就意味着除了按日期划分的训练集中各个变量不一致外, 在线上预测集中一定会有训练集中不存在的ID. 所以在选择特征与训练集时要尽量做到将ID类特征抽象, 例如统计转化率, 做聚类等, 而避免直接使用ID类特征.

(2) 转化率分析

转化概率是本次比赛预测的objective, 与其最为相关的便是各个sample对应的CVR了, 官方所给baseline就是将历史统计的转化率来直接作为概率进行预测.

下图所示为每日所有sample的平均转化率. 其中蓝色线为原始数据, 考虑到最后五天的训练数据label有误, 又额外做出绿色线(转化时间小于等于1天), 红色线(转化时间小于等于两天). 可以看到, 转化率在20日及以后较为稳定, 在18,19日出现转化率的剧烈变化, 且这两日的数据总数也明显少于平均水平, 可能是恰逢节日或数据上传误差等因素, 综合考虑, 20日之前的数据暂时被弃用.

(3) 时序分析

笔者还对日转化率进行了ACF, PACF分析及ARIMA拟合, 但由于总日期数过少, 且CVR波动较大, 可能属于非稳定时间序列, 并不能通过去趋势等方法进行较好回归.

3. 训练集选取与特征提取区间

如果说在机器学习中有比特征还要重要的, 那就是训练集的选取了. 最好的训练集莫过于与线上测试集的变量分布完全相同, 这样的情况下线下的训练结果可以完美的用于线上数据的预测. 这种情况在一些特定的, 数据分布较为稳定的机器学习问题中可以实现.

但对本次社交广告算法大赛, 首先训练样本有时间先后关系, 而且如2中分析, 每日的user, ad都各不相同, 所以存在这样的一个隐含因素, 即若预测31日数据, 则使用越接近31日的数据训练, 则预测效果应该会越好. 但同时另一个问题, 即26日以后的数据, 由于回流时间为5日, 所以截止至31日时并不能准确统计广告是否转化, 且该问题在29, 30 两日尤为严重, 所以最后结合线下与线上测试, 我选择了26, 27, 28三天的数据进行线下CV与训练, 并用于线上测试. 在初赛阶段, 线下线上误差基本一致, 且增减情况良好.

4. 特征工程

在对赛题与数据有了充分的了解后,第二步就是特征工程了.特征工程上,我目前还没有非常得意的大家日日所念的magic feature, 我基本上是每天优化一些自己的特征,每天的成绩虽然进步不大,但也在稳步前行.交流群中几位大佬多次提及的强特征我至今也没有悟到,但也许后面就会慢慢发现,也许我已经提出了出来.

在特征工程上,最重要的, 也是三周里每一组周冠军都提到过的, 线上线下一致. 好多同学对这点理解不清, 其实用逆向思维, 首先对31日的预测集提取特征,因为是最后一天,所以无论如何都不会发生数据泄露. 这个时候再仿照31日数据特征提取的方式与时间区间, 一步一步提取, 就可以有效的规避数据泄露. 有效的避免数据泄露, 可以做到线上线下同增减, 这样的情况下, 当我们加入新特征线下误差降低时, 我们便可以推断出该特征有益, 反之亦然. 考虑到预测集为31日, 其前5天的label有不准确的情况, 但仍然可以进行统计. 但生成训练集时, 必须对特征提取区间模仿31日数据做处理(代码如下), 例如处理28日的数据, 那么提取之前的特征时, 只能够提取转化时间小于28日0点的数据, 否则会造成训练集与预测集特征不一致.

def fix_label(df_tmp, clickDay):
    mask = df_tmp['conversionTime'] >= clickDay*10000
    df_tmp.ix[mask, ['label', 'conversionTime']] = 0
    return df_tmp

同时, 另一个难点是在根据历史观测值进行转化率统计时, 出现了样本稀疏的情况, 则根据中心极限定理, 观测概率并不能较好的代表真是概率. 在CTR预估中, 两个经典的方法便是贝叶斯平滑与指数平滑. 相关博文在互联网都不难找到.

我这里再说一点我结合本次大赛数据, 对贝叶斯平滑做的一点点小的修改. 例如对我们数据中存在的 root -> advertiser -> campaign -> ad -> creative 层级关系(root为训练集中全部样本), 这样的层级关系隐喻了在同一个父节点下的子节点, 其来自于同一个Beta分布, 所以我逐层进行了贝叶斯平滑, 且建立层级关系还有一个好处, 即对预测集出现的数据, 若该creativeID 在训练集从未出现过, 则在pandas.merge时该值为空, 则向上寻找其父节点的统计值, 最高一层为root, 是基与全部训练数据的统计, root的值不进行贝叶斯平滑, 且一定存在, 这就保证了当在预测集中遇到了未出现的样本时, 使用最合理的缺省值进行补全.

5. 机器学习模型

目前我在使用xgb与lgb两种模型, 好处是模型泛化能力强且速度快, 可以最快得到结果以进行特征筛选与调试. 模型stacking和bagging是提升最终结果的利器,但不建议大家太早使用,一是浪费时间,2是这样的大杀器是否使用,对我们结果本质的提升是没有帮助的,因为如果现在使用融合效果提升,那么未来其他同学加入模型融合后,也必然会赶超自己.

6.总结

最后,还是希望大家脚踏实地,使用python或自己喜欢的语言静下心来,一步一步的做好数据分析,多从数理统计的角度想问题, 增加每一项特征或对训练集与模型的没一点修改, 都要有理论支持. 这样不仅比赛成绩会一步一步的变好, 更重要的是在积累下了扎实的数据挖掘与分析基础, 真正实现参加比赛提升自我的目的.

参考

http://wnzhang.net/share/rtb-papers/cvr-est.pdf

http://www.cs.cmu.edu/~xuerui/papers/ctr.pdf

https://arxiv.org/pdf/1604.06737.pdf

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

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

编辑于

王照彬的专栏

1 篇文章1 人订阅

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏美图数据技术团队

深度模型DNN在个性化推荐场景中的应用

随着深度神经网络在语音和图像识别上取得的巨大成功,AlphaGo 战胜人类围棋顶尖高手,以深度网络为基础的人工智能迎来第三次高潮。与此同时互联网所面临的信息超载...

902
来自专栏AI研习社

DeepMind 弹性权重巩固算法让 AI 拥有“记忆” ,将成机器高效学习的敲门砖

一直以来,计算机程序都是个“左耳进,右耳出”的“傻小子”,它们很快就会忘掉所做过的任务。DeepMind 决定改变传统的学习法则,让程序在学习新任务时也不忘掉旧...

2985
来自专栏CSDN技术头条

2015伦敦深度学习峰会笔记:来自DeepMind、Clarifai等大神的分享

上周,我有机会参加在伦敦举行的第三届深度学习峰会,上两届分别在旧金山和波士顿举行。 深度学习峰会由 RE.WORK主办,汇集了从工业领域到学术领域不同背景的专业...

1678
来自专栏大数据文摘

Yann LeCun说是时候放弃概率论了,因果关系才是理解世界的基石

1174
来自专栏AI科技评论

动态 | DeepMind 弹性权重巩固算法让 AI 拥有“记忆” ,将成机器高效学习的敲门砖

一直以来,计算机程序都是个“左耳进,右耳出”的“傻小子”,它们很快就会忘掉所做过的任务。DeepMind 决定改变传统的学习法则,让程序在学习新任务时也不忘掉旧...

3558
来自专栏新智元

谷歌与全球顶级医学院联手,Jeff Dean等扛鼎首篇电子病历论文,康奈尔大学王飞解读

作者:王飞,康奈尔大学威尔医学院助理教授 编辑:闻菲 【新智元导读】本周谷歌在ArXiv上公开了一篇众人期待已久的论文,也很可能是谷歌在电子病历建模分析方面的首...

35710
来自专栏机器之心

业界 | 谷歌推出神经网络可视化库Lucid,推进模型的可解释性工作(附GitHub)

2516
来自专栏AI科技评论

观点 | 中科院自动化所赫然:大规模人脸图像编辑理论、方法及应用

AI 科技评论按:2018 年 4 月 14 日-15 日,中国图象图形学学会围绕「生物特征识别」这一主题,在中科院自动化所举办第四期「CSIG 图像图形学科前...

943
来自专栏AI科技评论

重磅丨谷歌是在炒作么?大牛详解神经网络算法为什么不适合自然语言处理

谷歌在2016年发布了全新的神经机器翻译系统(GNMT),并表示由于神经网络算法的介入,该系统相比传统机器翻译降低了80%的错误率,已接近人工翻译的水平。 但对...

3307
来自专栏深度学习自然语言处理

计算机视觉如何入门

目前,人工智能,机器学习,深度学习,计算机视觉等已经成为新时代的风向标。这篇文章主要介绍了下面几点: 第一点,如果说你要入门计算机视觉,需要了解哪一些基础知识...

1042

扫码关注云+社区