【SPA大赛】腾讯社交广告大赛心得分享

1. 数据分析

大赛题目是转化率预估,这也是第一次接触这类赛题,所以遇到的问题比较多。首先是对数据的理解就花了不少心思,数据中有不少除label不同外其他数据都相同的样本,刚开始也是像处理其他问题一样将这些样本看作是噪音,只保留了label为正的样本,后来发现在线上测试集中同样存在一部分数据都相同的样本,这时训练出来的模型对这些样本的预测值都是相同的,所以对于这些样本就不能简单的当作噪音来处理了。目前我们针对这种情况的处理参考了之前大神分享的经验,通过添加一些特征来标记他们之间的先后顺序。还有关于label不准确问题的处理,因为有些回流的时间超过5天还有最后几天的回流可能还没有反馈回来,这些就会使得label取值不准确。针对这种情况,我们通过统计所有数据的回流时间,发现:90.00%的回流发生在一天之内,99.00%的回流发生在两天之内,99.90%的回流发生在三天之内。这一分析我们如何构造选取线下训练集和验证集很有帮助。

2. 模型选择

关于模型选择,看到好多人都选择xgboost,而我们选择的是lightgbm,之所以选择它是因为之前做比赛的时候对比过这两者的训练时间与预测结果。有实验表明lightgbm在学习效率与准确率上都比xgboost表现得好,而且它还有这更低的内存消耗。

3. 构造训练集

通过之前的数据分析,我们直接舍弃了30日的数据。考虑自身设备情况,我们仅选取了两天的样本作为训练集。比如以27,28两天的样本为测试集,以29日样本为线下验证集。这样构造训练以及验证集可以有效避免数据泄露问题。具体构造训练集与测试集可以根据自身设备情况多取几天的样本。比赛开始阶段,我们使用一个模型进行预测,后期,使用了模型融合,分别训练了4个模型,对此,数据集的划分如图1所示。

4. 特征工程

我们首先对数据中age属性进行了等值域划分,然后通过统计找出对原始数据中维度较小那些基本特征,对这些特征进行了one-hot编码,这样不至于出现特征维数很大的情况。其次就是组合特征了,组合特征是相对比较重要的。组合特征是不能盲目胡乱组合,要多想想实际情况,做一些统计分析,当然也可简单的通过训练结果的来测试组合特征的重要性。

4.1 基本特征与特征one-hot

选取原始数据中维数较小的特征进行one-hot编码,主要包括用户的年龄、性别、婚恋状态、教育程度,广告的advertiserID、AppID、appPlatform,上下文的sitesetID和positionType。

4.2 特征交叉

不同特征之间的组合能起到更大的作用,我们分别使用户的年龄、性别、婚恋状态、教育程度、居住地与广告的creativeID、appID和positionID两两进行交叉,同时记录在这两个特征交叉时,广告CTR的排序特征。

4.3 特征贝叶斯平滑

在交叉得到的特征中,经观察,发现很多广告的CTR值并不准确,某些广告CTR值因为该广告总点击数较少而导致CTR较高,所以进行了贝叶斯平滑,贝叶斯平滑过程主要借鉴了博客上的思路。

4.4 离散化

在得到基本特征和处理后的特征后,主要针对统计出的广告CTR特征进行离散化,这种操作的目的是保证广告CTR值可以再预估时按照自身的重要性发挥不同的价值。

竞赛刚开始阶段,并没有注重交叉特征的构造和特征的贝叶斯平滑操作,只针对基本特征和基本特征上的统计特征进行处理,结果非常差,后来加入交叉特征和对特征进行贝叶斯平滑后,效果慢慢变好。这部分内容可以参看很多博客文章。

目前阶段,我们对特征的总体处理如图2表示。图2中其他特征包括了除图中列举出的特征以外的其他特征,绝大多数是统计特征。

5. 模型融合

四个模型分别采用lightgbm进行训练,使用四个模型进行预测,对4个预测结果进行线性融合以得到最终结果。融合后的结果比单个模型的预测结果好,但是线性模型融合需要调整4个模型参数,加大了工作量。

6. 比赛心得

首先,要保证训练集的构造没有问题,如果训练集有问题,再怎么提特征,调参数都没用。下来是特征的提取,可以说这个过程是整个过程中最重要的,因为特征的好坏直接决定了预测结果的好坏,特征不好,模型调的再好结果还是不行。最后就是模型调参了,这部分相对也比较重要,调参要理解参数背后的意义以及调参后会带来的影响,毫无规律的乱试能调出好的参数的概率渺茫。

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

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

编辑于

申星的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2488
来自专栏跟着阿笨一起玩NET

winform treeView 数据绑定

1092
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

1082
来自专栏跟着阿笨一起玩NET

C# 通过HttpWebRequest在后台对WebService进行调用

http://www.cnblogs.com/macroxu-1982/archive/2009/12/23/1630415.html

3242
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

22010
来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

1531
来自专栏CreateAMind

文字描述生成视频的开源项目

Tensorflow implementation for the paper Attentive Semantic Video Generation usin...

1282
来自专栏C# 编程

C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用

//注意:请使用VS2010打开以下的源代码。 //源代码地址:http://pan.baidu.com/s/1j9WVR using System; usi...

2550
来自专栏玩转JavaEE

RestTemplate的逆袭之路,从发送请求到负载均衡

上篇文章我们详细的介绍了RestTemplate发送请求的问题,熟悉Spring的小伙伴可能会发现:RestTemplate不就是Spring提供的一个发送请求...

1.2K4
来自专栏DT乱“码”

简单的考勤系统

连接数据库类 package com.lianrui.it; import java.sql.Connection; import java.sql.Driv...

3729

扫码关注云+社区