概要:

微软研究院的人写的文章,提出用逻辑回归来解决ctr预估问题,是以后ctr的经典解决方式,经典文章。


详细内容:

名词:
CPC —— cost per click
CTR —— click through rate

1. 研究初衷

搜索引擎主要靠商业广告收入,在广告位上面打广告,用户点击,之后广告商付费。在通用搜索引擎,通常广告位置是在搜索结果之前,或者在搜索结果右边。

商业广告收入 = pClick * CPC

要提升广告收入,关键问题是在有限的广告为上面,放什么广告?非常自然的想法就是,放用户可能点击的广告,而且放每次点击广告商付费多的广告,如上面公式所看到的。总而言之,计算广告的点击率就是问题的关键。

一点常识:
* 搜索广告平均点击率是2.6%。(个人记得展示广告的平均点击率比这个要低一个到两个数量级,能超过千分之中的一个就不错了)
* 搜索广告的点击率和广告的展示位置关系很密切,通常排在第一个的广告的点击率要远超过排在后面几个的广告

2. 问题抽象

对于某个广告,要素:bid term(query命中这些term,则有机会展示这个广告)、广告本身、广告商等等
当用户搜索的query命中了bid term的时候,此时会索引到一系列广告,计算这些广告在当前情况下(query、用户等)的点击率,而且依照点击率进行排序、展示。

3. 朴素的想法

用极大似然方式来预计点击率,即广告被点击的次数除以广告的总展示量。
缺点:
* 广告实际被点击的次数可能非常少,计算误差会比較大
* 对于新广告,无法解决冷启动问题

Regelson and Fain的方法:
对于冷启动问题,这两个人用该广告bid term中的其它广告的ctr来对其进行预測


4. 本文的方法

整体思路:把点击率预測问题转换成机器学习问题,将详细广告、环境抽象成特征,用特征来进行达到泛化的目的,从而对冷启动中的广告进行预測。

详细来说:

p(click|ad, pos) = p(click|ad, pos, seen) * p(seen|ad, pos)

当中,ad表示广告,pos表示展示位置,seen表示广告被用户看见。上述表示:用户在当前位置点击广告的概率等于用户在当前位置看到广告的概率及看到广告后点击广告的概率。对于上述概率进一步简化(在直观上作简化),得到:

p(click|ad, pos) = p(click|ad, pos, seen) * p(seen|ad, pos) = p(click|ad, seen) * p(seen|pos)

对于每一个广告位置,能够预计广告放在这里被用户看到的概率——非常多追踪眼球运动的装置能够发现用户观看搜索结果的情况——这样p(seen|pos)的值就能够预计出来。
问题的关键转成计算p(click|ad, seen)的值。

作者把概率预计问题转成回归问题(曲线拟合问题),只是用的是逻辑回归、而不是线性回归。对此,作者的解释是,逻辑回归(不考虑最后的阶跃函数来分类)将函数值映射到[0,1]区间,这个区间和概率的区间是一致的,所以就用它了。

训练方式:
对于某个广告,依据历史统计广告的经验点击率,并从广告和广告位等信息中抽取特征,有些是实值特征,组成<特征....,经验点击率>这种训练样本,用来进行训练。
而如今实际经常使用的系统中,往往採用的是0-1特征,而输出值,也是0-1,表示这个广告在当前是否被点击。这样的话,随着广告被不断展示,可以不断进行增量训练。而原文作者这样的方式,仅仅能是积累了一段时间之后,又一次统计,生成新的经验点击率,然后再进行又一次训练。并且,原文这样的方式,不可以利用那些稀疏点击——否则依据MLE来预计的“经验点击率”会非常不准确(这也是本文要解决的问题),这时候会影响训练。

数据选择:
选择那些展示了100次以上的广告,进行训练。避免数据稀疏问题。

评測方式:
依照广告商来区分训练集和測试集——这样,训练集中的经验点击率用于训练,測试集中的经验点击率用于測试。
两个评測标准:MSE和KL距离

作者提道了一句:作者也尝试了回归树(MART: multiple additive regression trees),就像通用搜索做的那样,只是后来发现效果和逻辑回归非常接近,就採用逻辑回归了。

5. 特征选择

在模型确定之后,在deep learning延伸到这个领域之前,特征project就是最重要的——差点儿是唯一——的能够做的事情了。

对于每个数值特征,假设count是c,则作者同一时候用了log(c+1)和c^2作为特征。作者把这些特征归一化到均值是0方差是1的正态分布中。

5.1 term ctr

和当前广告用同样bid term的广告的ctr,计算方式为:
f = {alpha * average_total(ctr) + N(ad_term) * ctr(ad_term)} / {alpha + N(ad_term)}

当中,average_total(ctr)是指训练集合中全部广告的总的ctr,N(ad_term)是指同当前广告具有同样term的广告的数目,ctr(ad_term)是指这些广告的平均ctr

5.2 related term ctr

对term ctr中的term进行扩展——字面意义上相关的term,如:red shoes 和 buy red shoes

5.3 ad特征

* 外观
* 是否吸引眼球
* 广告商信誉
* 广告页面质量
* 广告与query的相关性

作者还用了unigram特征:选择1w个在广告title和正文中常常出现的词语作为特征。值得注意的是,作者以前用这些词的词频作为特征,来取代如今用的0-1特征,只是效果没有明显变化。

5.4 广告的specificity特性

基本假设是:假设一个广告是非常明白的针对某种类别的,如:衣服、鞋、等等,则这个广告更加easy被用户点击;相反,假设一个广告所针对的类别、受众的人群非常模糊,则不easy被用户点击。

作者的做法是:通过bid term来作为搜索query,进行搜索,在搜索结果中作文本分类(伪相关反馈,不求精度,用NB就能够),用各个类别组成的熵来反映这个广告是仅仅针对某种特定的类别(熵非常小)还是面向非常多类别(熵比較大),将这个熵值作为特征加进去。须要注意的是,这个过程能够进行离线计算,不必在线计算。

5.5 外部数据特征

bid term在搜索引擎中返回的页面数量等等。由于这个数值差异比較大,作者没有进行通常意义上的归一化,而是把它bin化,即分成几个桶(20个),不同区间的数值映射到不同的桶中。


6. 试验和讨论

哪些特征比較好?或者说起到的作用比較大?
作者单独用某类特征,取得的提高例如以下:
(1)广告质量特征,提升12%;当中,广告词语的unigram特征就提升了10%
(2)广告specificity特性,提升9%
(3)搜索数据体征(外部数据特征)提升3%

注意:
1. 不可以依据特征的权重大小来决定特征的好坏,由于各个特征事实上不是独立的
2. 某些特征(如:某些词)会对点击率起到非常正面的作用,此时有两个用处:(1)当广告上买bid term的时候,给广告商推荐这些词;(2)当某些广告商恶意的购买这些词的时候,通过该广告商广告的ctr的剧烈变化,能够侦測到这个情况,从而进一步处理。

7. 未来工作

引入term的相关词特征

【点击模型学习笔记】Predicting Clicks_Estimating the Click-Through Rate for New Ads_MS_www2007的更多相关文章

  1. 【点击模型学习笔记】Modeling contextual factors of click rates_MS_AAAI2007

    概要 并没有觉得这是篇高质量的文章,非常奇怪为什么可以发表在AAAI上面. 文章的创新点比較单薄:在传统点击率预測模型(LR)的基础上增加了两类新的特征,一个是位置特征.一个是广告上下文特征--即和它 ...

  2. 概率图模型学习笔记:HMM、MEMM、CRF

    作者:Scofield链接:https://www.zhihu.com/question/35866596/answer/236886066来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  3. NIO模型学习笔记

    NIO模型学习笔记 简介 Non-blocking I/O 或New I/O 自JDK1.4开始使用 应用场景:高并发网络服务器支持 概念理解 模型:对事物共性的抽象 编程模型:对编程共性的抽象 BI ...

  4. Pytorch线性规划模型 学习笔记(一)

    Pytorch线性规划模型 学习笔记(一) Pytorch视频学习资料参考:<PyTorch深度学习实践>完结合集 Pytorch搭建神经网络的四大部分 1. 准备数据 Prepare d ...

  5. LDA主题模型学习笔记5:C源代码理解

    1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...

  6. HMM模型学习笔记(前向算法实例)

    HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...

  7. 微软CodeDom模型学习笔记(全)

    CodeDomProvider MSDN描述 CodeDomProvider可用于创建和检索代码生成器和代码编译器的实例.代码生成器可用于以特定的语言生成代码,而代码编译器可用于将代码编译为程序集. ...

  8. GAN︱生成模型学习笔记(运行机制、NLP结合难点、应用案例、相关Paper)

    我对GAN"生成对抗网络"(Generative Adversarial Networks)的看法: 前几天在公开课听了新加坡国立大学[机器学习与视觉实验室]负责人冯佳时博士在[硬 ...

  9. 深度学习在美团点评推荐平台排序中的应用&& wide&&deep推荐系统模型--学习笔记

    写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运 ...

随机推荐

  1. 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON() —(转)

    一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...

  2. iOS 8 Metal Swift教程(一) :开始学习

    在本篇教程中,你将应用到3D图形中的一系列矩阵变换,并会学习到如下内容: 如何使用模型(model),视图(view)以及投影变换(projection transformations). 如何使用矩 ...

  3. sql语句中BEGIN TRAN...COMMIT TRAN

    BEGIN TRAN标记事务開始  COMMIT TRAN 提交事务  一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TR ...

  4. Unity 读取CSV与Excel

    前几天看到我们在游戏中需要动态加载某些角色的游戏策划值,关于这个问题怎么解决呢?其实办法很多种,归根到底,就是数据的读取.我们可以想到的存储数据的载体有很多.例如:txt,xml,csv,excel. ...

  5. spring mvc + mybatis + spring aop声明式事务管理没有作用

    在最近的一个项目中,采用springMVC.mybatis,发现一个很恼人的问题:事务管理不起作用!!网上查阅了大量的资料,尝试了各种解决办法,亦未能解决问题! spring版本:3.0.5 myba ...

  6. HTML 表格入门

    每个表格都是由 table 标签开始. 每个表格行由 tr 标签开始. 每个表格数据由 td 标签开始. 这样是一行三列: <table border="1"> < ...

  7. 文摘:威胁建模(STRIDE方法)

    文摘,原文地址:https://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx 威胁建模的本质:尽管通常我们无法证明给定的设计是安全的,但我们可以从自己 ...

  8. OD调试1--第一个win32程序

    OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于 ...

  9. TRI 解题报告

    题目大意: 在一个平面上有N(N <= 1000)个点,其中任意三点不共线,求这些点组成的三角形的面积和每和三角形内部含的点数的个数和. 数据范围: 20%的数据 N <= 50, 30% ...

  10. Tomcat学习笔记 - 错误日志 - Tomcat安装版安装后第二次启动后闪退(转)-- javac不是内部或外部命令 -- 配置java环境教程

    如果安装成功并且安装完成第一次启动是成功的,第二次就闪退的话,原因之一是没有配置java的环境.在网上找的配制方法有很多错误,测试javac命令时候会提示不是内部或外部命令,找到一个正确的教程.如下, ...