【SPA 大赛】简述一些平滑方法在 CTR 预估中的应用

在网络广告投放指标评估中,CTR(click-through rate)是众多有效的评估手段中的一种,而预测CTR也是数据挖掘上一个热门的领域,在腾讯TSA举办的SPA大赛中,预测移动APP广告转化率,也有一定的相关性,所以前人在预测CTR中用到的方法也很值得在这次比赛中借鉴与学习。而对CTR的平滑处理这是这些方法的其中一种,并且在初赛实践中发现,平滑处理后相较于未平滑处理有0.0005~0.002之间的分数提升(这里面的区别跟统计的方法,还有参数设置等等有关,笔者也没有特别的把握,加了就能有这样的提升)下面文章将分三个方面:1、为什么要加入平滑处理 2、相关细节介绍 3、针对天数不同可以做的额外处理。

一、为什么要加入平滑处理

首先,我们在进行CTR预测时常常会加入一个广告ID或者用户等等过去的转换率作为特征,并且这个特征往往在最后训练中占有较大的权重,但是简单的计算转换率往往会由较大的方差。如:广告A过去被看到200次,而被转换了4次,最后的转换率是2%,广告B被点击了10次,转换了0次,转换率是0%,我们是否就能得出A的转换率比B高呢,我想这里面的稳定性是很低的。

并且时常会出现,近期新出现的广告需要预测,而这类广告的历史出现次数都是很低的。而这时候就需要平滑点击次数少的广告,降低低点击次数的噪音,并且避免对样本多的数据造成较大的影响。

二、相关细节介绍

(1)Add-Lambda Smoothing

首先介绍最简单的Smoothing 方法,

,其中将分子与分母加上lambda(如0.001、1、10等),这样就能够避免上面讲到的,因为没有被点击过而有可能错误的将其点击率估计为0%。

然而Add-One Smoothing 也有它的弊端,即使加上1之后,因为样本少的原因,这样计算出来的点击率仍旧是存在较大的方差的。

(2)Additive smoothing and generalized to the case of known incidence rates

当我们除了这个特征以外,在其他特征上有对应较好的转换率作为先验的话,就可以将这个信息加入到我们的平滑方法中去,

μ = (μ1, …, μd)是对应的其他特征上的转换率。如在TPA比赛中,因为connectionType特征维度低,样本数量够大,我们可以将connectionType的转换率作为我们的μ,使得我们平滑后的转换率噪音更低,避免了过拟合并且符合真实情况,而这个方法也是笔者在Owenzhang在kaggle avazu 上的solution中学到的,读者可以前往进行深入的学习。但是这里仍然存在一个问题,这里的lambda到底要设多少,我也没有很好的解决方案(如果读者有更好的想法,欢迎交流),可能这里也是需要调参的地方,而这会花费大量的时间。

三、针对天数不同可以做的额外处理

首先,我们在统计前几天转换率时,大部分时间我们是对天数统一看待,每一天在统计转换率的权重都是相同的,而真实情况下,前一天的转换率相较于再前一天的转换率有更高的可信度,此时我们可以给每一天设置一定的权重,并增加近期转化率的权重,降低较远时间上转化率的权重,以使得构造的特征更具有可信度。而这个方法是在 Yahoo实验室发的一篇关于CTR的paper上看到的1具体方法,可以前往查看。

(PS:笔者在使用这个方法上得到的提升没有上面的方法得到的提升更有效)

最后,因为刚接触CTR比赛的原因,所以上面的一些见解可能存在偏颇,所以,若有发现,希望能够指出,并希望在比赛中,能够与伙伴们一同进步。

Reference Link:

1.http://cs229.stanford.edu/notes/cs229-notes2.pdf 2.https://www.cs.jhu.edu/~jason/465/PowerPoint/lect05-smoothing.ppt 3.http://www.cs.cmu.edu/~xuerui/papers/ctr.pdf 4.https://github.com/owenzhang/kaggle-avazu

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

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

编辑于

连庆的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1411
来自专栏c#开发者

jquery easyui datagrid mvc server端分页排序筛选的实现

1自定义一个ModelBinder public class filterRule { public string field { g...

4239
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3136
来自专栏C# 编程

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

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

2540
来自专栏菩提树下的杨过

SqlTransaction事务使用示例

using System; using System.Data; using System.Data.SqlClient; using System.Co...

1988
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

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

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

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

3232
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

26010
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

1152
来自专栏张善友的专栏

Using sqlite with .NET

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

2488

扫码关注云+社区