概要:

微软研究院的人写的文章,提出用逻辑回归来解决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. Hacker(六)----黑客藏匿之地--系统进程

    windows系统中,进程是程序在系统中的依次执行活动.主要包括系统进程和程序进程两种. 凡是用于完成操作系统各种功能的各种进程都统称为系统进程: 而通过启动应用程序所产生的进程则统称为程序进程. 由 ...

  2. [SQL学习笔记][用exists代替全称量词 ]

    学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ...

  3. CentOS6.5 --安装orale 11g(上)

    Linux内核版本:Linux version 2.6.32-431.23.3.el6.x86_64 (1)     在Windows上安装Xmanager Enterprise 4工具,该工具是用来 ...

  4. HTML与CSS入门——第三章 理解HTML和XHTML的关系

    知识点: 1.以HTML创建一个简单网页的方法 2.包含每个网页必须有的所有HTML标签的方法 3.用段落和换行组织页面的方法 4.用标题组织内容的方法 5.HTML.XML.XHTML和HTML5之 ...

  5. Android Studio ---------------- 软件使用小细节(更新中。。。。。。)

    ###鼠标放到相关类或方法等上,没有提示. *解决方法:File----Setting-----Editor-----General------Show quik documentation on m ...

  6. UIScrollView 滑动试图

    UIScrollView --->UIView //创建UIScrollView testScrollView=[[UIScrollView alloc]init]; testScrollVie ...

  7. VisualStudio2013快捷键

    visual studio 2013 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.VS 2013 中新增了很多提高 ...

  8. javaScript给元素添加多个class

    <html> <head> <style type="text/css"> .div2{ font-size:16px; color:orang ...

  9. hdu1166 经典线段入门

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. java基础知识2

    58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...