点击率预估

点击率预估是广告技术的核心算法之一,它是很多广告算法工程师喜爱的战场。一直想介绍一下点击率预估,但是涉及公式和模型理论太多,怕说不清楚,读者也不明白。所以,这段时间花了一些时间整理点击率预估的知识,希望在尽量不使用数据公式的情况下,把大道理讲清楚,给一些不愿意看公式的同学一个Cook Book

点击率预测是什么?

·        点击率预测是对每次广告的点击情况做出预测,可以判定这次为点击或不点击,也可以给出点击的概率,有时也称作pClick

点击率预测和推荐算法的不同?

·        广告中点击率预估需要给出精准的点击概率,A点击率0.3% , B点击率0.13%等,需要结合出价用于排序使用;推荐算法很多时候只需要得出一个最优的次序A>B>C即可;

搜索和非搜索广告点击率预测的区别

·        搜索中有强搜索信号-“查询词(Query)”,查询词和广告内容的匹配程度很大程度影响了点击概率;点击率也高,PC搜索能到达百分之几的点击率。

·        非搜索广告(例如展示广告,信息流广告),点击率的计算很多来源于用户的兴趣和广告特征,上下文环境;移动信息流广告的屏幕比较大,用户关注度也比较集中,好位置也能到百分之几的点击率。对于很多文章底部的广告,点击率非常低,用户关注度也不高,常常是千分之几,甚至更低;

 

如何衡量点击率预测的准确性?

AUC是常常被用于衡量点击率预估的准确性的方法;理解AUC之前,需要理解一下Precision/Recall;对于一个分类器,我们通常将结果分为:TP,TN,FP,FN。



本来用Precision=TP/(TP+FP),Recall=TP/P,也可以用于评估点击率算法的好坏,毕竟这是一种监督学习,每一次预测都有正确答案。但是,这种方法对于测试数据样本的依赖性非常大,稍微不同的测试数据集合,结果差异非常大。那么,既然无法使用简单的单点Precision/Recall来描述,我们可以考虑使用一系列的点来描述准确性。做法如下:

1.  找到一系列的测试数据,点击率预估分别会对每个测试数据给出点击/不点击,和Confidence Score。

2.  按照给出的Score进行排序,那么考虑如果将Score作为一个Thresholds的话,考虑这个时候所有数据的 TP Rate 和 FP Rate; 当Thresholds分数非常高时,例如0.9,TP数很小,NP数很大,因此TP率不会太高;




3.  当选用不同Threshold时候,画出来的ROC曲线,以及下方AUC面积

4.  我们计算这个曲线下面的面积就是所谓的AUC值;AUC值越大,预测约准确。

为什么要使用AUC曲线

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。AUC对样本的比例变化有一定的容忍性。AUC的值通常在0.6-0.85之间。

如何来进行点击率预测?

点击率预测可以考虑为一个黑盒,输入一堆信号,输出点击的概率。这些信号就包括如下信号

广告:历史点击率,文字,格式,图片等等

环境:手机型号,时间媒体,位置,尺寸,曝光时间,网络IP,上网方式,代理等

用户:基础属性(男女,年龄等),兴趣属性(游戏,旅游等),历史浏览,点击行为,电商行为

信号的粒度:

Low Level : 数据来自一些原始访问行为的记录,例如用户是否点击过Landing Page,流量IP等。这些特征可以用于粗选,模型简单,

High Level: 特征来自一些可解释的数据,例如兴趣标签,性别等

特征编码Feature Encoding

1.  特征离散化:把连续的数字,变成离散化,例如温度值可以办成多个温度区间。

2.  特征交叉: 把多个特征进行叫交叉的出的值,用于训练,这种值可以表示一些非线性的关系。例如,点击率预估中应用最多的就是广告跟用户的交叉特征、广告跟性别的交叉特征,广告跟年龄的交叉特征,广告跟手机平台的交叉特征,广告跟地域的交叉特征等等。

特征选取(Feature Selection):

特征选择就是选择那些靠谱的Feature,去掉冗余的Feature,对于搜索广告Query和广告的匹配程度很关键;对于展示广告,广告本身的历史表现,往往是最重要的Feature。

独热编码(One-Hot encoding

假设有三组特征,分别表示年龄,城市,设备;

["男", "女"]

["北京", "上海", "广州"]

["苹果", "小米", "华为", "微软"]

传统变化: 对每一组特征,使用枚举类型,从0开始;

["男“,”上海“,”小米“]=[ 0,1,1]

["女“,”北京“,”苹果“] =[1,0,0]

传统变化后的数据不是连续的,而是随机分配的,不容易应用在分类器中。

热独编码是一种经典编码,是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

["男“,”上海“,”小米“]=[ 1,0,0,1,0,0,1,0,0]

["女“,”北京“,”苹果“] =[0,1,1,0,0,1,0,0,0]

经过热独编码,数据会变成稀疏的,方便分类器处理。

点击率预估整理过程:

三个基本过程:特征工程,模型训练,线上服务



特征工程:准备各种特征,编码,去掉冗余特征(用PCA等)

模型训练:选定训练,测试等数据集,计算AUC,如果AUC有提升,通常可以在进一步在线上分流实验。

线上服务:线上服务,需要实时计算CTR,实时计算相关特征和利用模型计算CTR,对于不同来源的CTR,可能需要一个Calibration的服务。

点击率预测的算法

-逻辑回归(Logic Regression)

Logistic回归是点击率预估必须入门的一种方法,使用简单,理论容易理解,甚至有些问题可以进行Debug,了解问题原因。它的核心想法就是通过Sigmoid函数,将Y值转化成0-1;其基本公式如下:



LR_SGD(随机梯度下降):

LR的模型有了,在训练过程中,为了提高训练的速度,常用的是SGD的优化方法。 SGD解决了梯度下降的两个问题: 收敛速度慢和陷入局部最优。梯度下降是一种常规的优化方法,但是SGD的S表示一定的随机性;梯度下降是每次都朝着全局优化方向前进,而SGD却由于随机性,有一定的曲折后,可能达到全局最优,也可能深陷于局部最优,但SGD的运行性能确实出色。



LR-FTRL

谷歌点击率预估在在线学习(Online Learning)积累好多年的经验,所谓在线学习就是通过线上实时处理数据而进行模型训练,而不是传统模式,把所有数据都放到一起处理(Batch Learning),得到离线的最优解。

LR-FTRL (Follow-the-regularized-Leader),Google在10年就提出了一些理论基础,在13年给出了Paper,并且带有FTRL的实现伪代码,在此之后,FTRL才大规模应用在工业界。



-FM(Factorization Machines)

Steffen Rendle于2010年提出Factorization Machines(FM),并发布开源工具libFM。凭借这单个模型,他在KDD Cup 2012上,取得Track1的第2名和Track2的第3名。在Kaggle的主流的点击率比赛中和实际广告系统的经验,factorization machine的效果完胜LR。FM的内核和LR也非常类似,但是多增加了一部分引入特征之间的交互因素,所以FM是非线性函数内核,它非常类似我们在特征工程中采用的特征交叉,但是FM是通过训练找到那些有用的特征叉值。



深度学习DNN

深度学习采用神经网络技术也在不断影响点击率技术的发展。特别是DNN的开发平台,更多的广告和用户数据,更大的计算资源(包括GPU),这都给深度学习解决点击率预估的问题,奠定了好的基础。

Google、百度等搜索引擎公司以 Logistic Regression(LR)作为预估模型。而从 2012 年开始,百度开始意识到模型的结构对广告 CTR 预估的重要性:使用扁平结构的 LR 严重限制了模型学习与抽象特征的能力。为了突破这样的限制,百度尝试将 DNN 作用于搜索广告,而这其中最大的挑战在于当前的计算能力还无法接受 10^11 级别的原始广告特征作为输入。作为解决,在百度的 DNN 系统里,特征数从10^11 数量级被降到了10^3,从而能被 DNN 正常地学习。这套深度学习系统已于 2013 年 5 月开始上线服务于百度搜索广告系统,初期与LR并存,后期通过组合方法共同提升点击准确率。

现在越来越多的深度学习的平台,例如谷歌的TensorFlow,使用起来也非常方便,大部分工程师1-2星期就可以上手实验,对于特征工程的要求没有LR高,DNN能够对特征进行自主的优取,但是对于大规模的计算,能够直接匹敌LR算法的,还需要一段长长的时间。

集成学习(Ensemble Learning

集成学习通过训练多个分类器,然后把这些分类器组合起来使用,以达到更好效果。集成学习算法主要有Boosting和Bagging两种类型。

Boosting:通过迭代地训练一系列的分类器,每个分类器采用的样本的选择方式都和上一轮的学习结果有关。比如在一个年龄的预测器,第一个分类器的结果和真正答案间的距离(残差),这个残差的预测可以训练一个新的预测器进行预测。XGBoost是非常出色的Boosting工具,支持DT的快速实现。

Bagging:每个分类器的样本按这样的方式产生,每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。这个类别有个非常著名的算法叫Random Forest,它的每个基分类器都是一棵决策树,最后用组合投票的方法获得最后的结果。



各大公司的一些点击率预估的算法:

1.  微软:微软在2010年曾经有一篇文章是关于使用《Web-Scale Bayesian Click-Through Rate Prediction for SponsoredSearch Advertising in Microsoft’s Bing Search Engine 》,但这并不代表这是微软现在的技术,据说现在的技术也是Online-learning和一些组合技术的融合,另外也在尝试DNN的解决方案。

2.  谷歌:谷歌是比较开放的公司,LR-FTRL对整个行业的online-learning都有整体的促进作用。《Ad ClickPrediction: a View from the Trenches》,谷歌内部也在不断尝试引入深度学习方法解决点击率问题,也包括展示广告的点击率预估。

3.  Facebook:

Facebook广告大部分情况下是没有关键词的,因此Facebook的点击率预估,其实是非常更难的问题。Facebook有一篇文章,《Practical Lessons from PredictingClicks on Ads at Facebook》,其中介绍Facebook结合GBDT训练出一些feature,然后再传入LR进行分类;



百度:基本全面使用DNN的训练和之前的一些LR;

小米:小米使用过多种方法,包括LR-SGD, LR-FTRL, FM等,同时也在通过组合的方式提升综合效果,另外也在积极探索DNN的解决方案。

点击率预测的成功要素

点击率预估的成功来源于两面:一面是实力,一面是运气,加油和好运!

作者简介:

欧阳辰,互联网广告技术老兵,小米MIUI架构师/主管,负责广告平台架构和数据分析平台,曾负责微软移动Contexual Ads广告平台,参与Bing搜索引擎IndexServe的核心模块研发,有空也会在个人微信公众号“互联居”中,分享一些互联网技术心得,订阅“互联居”公众号,与作者直接交流。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34108.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老鸟教你如何精确评估开发时间

一个程序员能否精确评估开发时间,是一件非常重要的事情。如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱经验十足对需求很了解延期风险小合格的软件工程师正规军,不是野路子 评估开发时间的重要性 首先,在一…

从FM推演各深度CTR预估模型(附代码)

作者: 龙心尘 && 寒小阳 时间:2018年7月 出处:https://blog.csdn.net/longxinchen_ml/article/details/81031736 https://blog.csdn.net/han_xiaoyang/article/details/81031961 声明:版权所有,转载请联系作者…

[项目管理] 如何评估工作量

1.1. 工作量估算的定义 工作量估算 即对开发软件产品所需的人力和时间的估算——人力成本是一个项目的主要成本。 我们可以根据预估的工作量决定具体由几个人、哪几个人参与该项目。 工作量通常以 人/天、人/月、人/年 的形式来衡量。 1.2. 为什么要进行工作量估算 做好工…

机器学习实战 | 综合项目-电商销量预估

作者:韩信子ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/article-detail/206 声明:版权所有,转载请联系平台与作者并注明出处 收藏ShowMeAI查看更多精彩内容 1.案例…

Python:实现进度条和时间预估

一、前言 在python当中可以用进度条来显示工作的进度,比如for循环的进度或者一些模型训练的进度。 在这里可以使用progressbar包以及tqdm包来实现。 使用pip install progressbar 安装progressbar包。 使用pip install tqdm安装tqdm包。 二、代码 1. progress…

如何科学预估开发时间

0. 我是前言 一个开发人员能否精确评估开发时间,是一件非常重要的事情。如果你掌握了这项技能,你在别人的眼里就会是这样: 1. 评估开发时间的重要性 首先,在一个项目中,所有的环节都是承上启下的,不管你是…

编译原理之代码生成

前面提到了经过了词法分析->语法分析->语义分析->中间代码优化,最后的阶段便是在目标机器上运行的目标代码的生成了。目标代码生成阶段的任务是:将此前的中间代码转换成特定机器上的机器语言或汇编语言,这种转换程序便被称为代码生成…

前端案例-跟随鼠标移动的天使

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域新星创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

前端代码在线编辑器:codepen、codesandbox

文章目录 单文件在线编辑器项目级在线编辑器 推荐两个前端代码在线编辑器 单文件在线编辑器:https://codepen.io/pen/ 项目级在线编辑器:https://codesandbox.io/ 单文件在线编辑器 codepen 相信使用 element-ui组件库的小伙伴应该知道 codepen在线编…

vue前端生成二维码并提供二维码下载

在一个管理后台的开发过程中使用到了需要前端自行生成分享二维码,并提供二维码下载功能,网上的解决方案很多,最终自己做完的思路和代码整理记录方便后续学习使用! vue版本为2.x 具体实现步骤: 下载安装依赖&#xff0…

总结本人学习b站黑马前端课程,各部分案例汇总

目录 1.Ajax: 对应课程: b站黑马JavaScript的Ajax案例代码——新闻列表案例 b站黑马JavaScript的Ajax案例代码——评论列表案例 b站黑马JavaScript的Ajax案例代码——聊天机器人案例 b站黑马JavaScript的Ajax案例代码——图书管理案例 2.ES6面向对…

前端——动态生成表格

案例分析 因为表格数据是不断更新的,我们需要js 动态生成。 这里我们模拟数据,自己定义好数据。 数据我们采取对象形式存储。所有的数据都是放到tbody里面的行里面。因为行很多,我们需要循环创建多个行(对应多少人)每…

Methodot低代码电影票房管理系统实战案例(二):前端低代码搭建系统后台

本次系统后台实战将使用Methodot应用工厂中的前端低代码组件完成搭建,无需注册域名、购买云服务器、虚拟机等,可在Methodot云端一体化完成开发、交付、访问、运维,3s即可部署至线上 免运维,在Methodot上可直接开发部署到线上 本次…

c语言源码代码生成器,SoEasyPlatform 代码生成器

介绍 一款轻量级开源的代码生成器,相对较动软代码生成器而言要轻量的多,支持多种数据库,所用到dll组件也都在github有源码,代码非常的简单有点基础的看源码可以把生成的项目改成自已的风格。 特色 该代码生成器最大的特点就三个简单 ,无需安装,生成的代码 简单并且有教学…

基于GPT-4的免费代码生成工具

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

前端直接生成GIF动态图实践

前言 去年在博客中发了两篇关于GIF动态生成的博客,GIF图像动态生成-JAVA后台生成和基于FFmpeg的Java视频Mp4转GIF初探,在这两篇博客中都是采用JAVA语言在后台进行转换。使用JAVA的同学经过自己的改造和开发也可以应用在项目上。前段时间有朋友私下问&…

利用JS代码完成动态生成表格案例及解析

思路&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

屏蔽必应(bing)搜索引擎点开一个页面下面会出现“浏览 6 个相关页面”的网页推荐方法

如以上图片显示&#xff0c;“浏览 6 个相关页面” 的推荐内容是网页里面的js实现的&#xff0c;无法取消&#xff0c;微软官方也回复说不能关闭的&#xff0c;只能通过浏览器的屏蔽广告插件可以实现&#xff1a; 我用的是这个uBlock Origin插件根据这位大佬的帖子安装的&…

基于chatgpt-on-wechat的微信个人对话机器人搭建

1.开源项目选定 现在gpt很火,git中大佬们都创建了很多高星项目,我这里选用了chatgpt-on-wechat(项目地址:https://github.com/zhayujie/chatgpt-on-wechat),这个项目在扩展时也很舒服,大家可以去拉下来看看,学习源码才能方便后续的扩展 2.服务器选定 国内服务:前置条件需要走…

【模仿】调用微信聊天功能和分享功能

今天整理个不是问题的问题&#xff0c;没学到啥&#xff0c;主要完成功能&#xff1a; 老大要求能调用手机号码然后通过微信聊&#xff0c; 我去&#xff0c;说白了老大看到了应用-通讯录plus-的微信功能&#xff0c;要我模仿。 首先&#xff0c;坑啊&#xff0c;我以为是开放…