《计算广告》第三部分计算广告关键技术——笔记(中下)
文章目录
- 前言
- 第13章 竞价广告核心技术
- 竞价广告计价算法
- 搜索广告系统
- 查询扩展
- 基于推荐的方法。
- 基于主题模型的方法
- 基于历史效果的方法
- 广告放置
- 广告网络
- 广告检索
- 布尔表达式的检索
- 相关性检索
- 点击率预测
- 点击率预测模型
- 点击率模型的校正
- 点击率模型的特征
- 点击率模型评测
- 智能频次控制
- 探索与利用
- UCB方法
- 考虑上下文的bandit
前言
篇幅较长,所以独立出来。可惜的是对重要的点击率预测没有涉及最近的深度学习,也没有涉及RTB算法,有些章节介绍的也略显草率。
第13章 竞价广告核心技术
竞价交易是整个在线广告市场最关键的一次产品进化,同时也带来了广告技术的迅速发展。
竞价广告计价算法
对于一个CPC 结算的竞价广告系统,需要先得到广告候选集合,并计算每个候选的点击率,这对应了竞价广告两个最关键的计算问题:广告检索和广告排序。竞价广告中根据eCPM对广告进行排序,主要就是点击率预测和点击价值估计两个任务,在CPC 计算的竞价广告中,点击价值是广告主的出价,不需要估计。可参考https://blog.csdn.net/qq_38163755/article/details/123877725?spm=1001.2014.3001.5502。
搜索广告系统
优化目标:
max a 1 , ⋯ , T ∑ i = 1 T { μ ( a i , c i ) ⋅ b i d C P C ( a i ) } \max_{a_{1,\cdots,T}}\sum_{i=1}^T\{\mu(a_i,c_i)\cdot bid_{CPC}(a_i)\} a1,⋯,Tmaxi=1∑T{μ(ai,ci)⋅bidCPC(ai)}
估计点击率,没有用户信息,其实是可以有的,个性化搜索。
主要通过实时的查询,即上下文信息,离线受众定向过程可以被忽略。
查询扩展
需求方需要通过扩展关键词获得更多流量;供给方则需要借此来变现更多流量和提高竞价的激烈程度。
基于推荐的方法。
如果把用户一个会话(session)内的查询(query)视为目的相同的一组活动,可以在{session,query}矩阵上通过推荐技术产生相关的关键词,利用搜索的日志数据。
给定一组用户会话 s = { 1 , ⋯ , M } s=\{1,\cdots,M\} s={1,⋯,M}和一组关键词 s = { 1 , ⋯ , N } s=\{1,\cdots,N\} s={1,⋯,N},可以产生一个对应的交互强度矩阵 { x m n } M × N \{x_{mn}\}_{M\times N} {xmn}M×N,元素可以是该用户在一段时间内搜索过该词的次数。推荐的基本任务就是根据这个矩阵中已知的元素值去尽可能预测性地填充那些历史上没有观测到的单元。这样根据群体用户的选择关联性进行推荐的问题也被称为协同过滤(Collaborative Flittering,CF)问题。
在推荐问题中,应该把那些未观测到的交互单元视为未知,而在文档主题模型中,合理的方法是认为未在某文档中出现的词交互强度为0。
通过推荐算法对矩阵平滑,缓解了元素稀疏的问题,可以稳健地比较关键词的相似度。
基于主题模型的方法
利用文档数据,即利用文档主题模型对某个查询拓展出主题相似的其他查询。
在主题模型的描述下,每个词 w n w_n wn都可以对应于一个文本主题组成的矢量 { z n 1 , z n 2 , ⋯ , z n K } \{z_{n1},z_{n2},\cdots,z_{nK}\} {zn1,zn2,⋯,znK}。于是,也可以用两个词对应的主题矢量来计算它们相似度。这种方法与上一种方法相比,主要考虑的是语意上的相关性,而非用户意图上的相关性,因此效果会差一些,只能作为用户搜索行为数据不足时的补充方法。
基于历史效果的方法
利用广告本身的历史eCPM数据来挖掘变现效果较好的相关查询,对提高营收起到的效果往往还要好于前面的两种方法。
广告放置
带北区广告条数约束的eCPM优化问题:
max ∑ i = 1 T { ∑ s = 1 n i r ( a i s . c i . N s ) + ∑ s = n i + 1 n i + e i r ( a i s , c i , E s − n i ) } , s . t ∑ i = 1 T n i ≤ T C \max\sum_{i=1}^T\{\sum_{s=1}^{n_i}r(a_{is}.c_i.N_s)+\sum_{s=n_i+1}^{n_i+e_i}r(a_{is},c_i,E_{s-n_i})\}, \rm s.\rm t \sum_{i=1}^T n_i\le TC maxi=1∑T{s=1∑nir(ais.ci.Ns)+s=ni+1∑ni+eir(ais,ci,Es−ni)},s.ti=1∑Tni≤TC
n i , e i n_i,e_i ni,ei分别代表第i次展示时北区和东区的广告条数, N s , E s N_s,E_s Ns,Es分别表示北区和东区的第s个位置。C是北区的平均广告条数上限。
搜索广告不宜进行深入的个性化,但可以考虑用户对于广告的接受程度,动态调整数目:
r ( a i s , u i , c i , N s ) = r ( a i s , c i , N s ) ⋅ μ ( u i ) ‾ / μ ‾ r(a_{is},u_i,c_i,N_s)=r(a_{is},c_i,N_s)\cdot \overline{\mu(u_i)}/\overline{\mu} r(ais,ui,ci,Ns)=r(ais,ci,Ns)⋅μ(ui)/μ
μ ( u i ) ‾ , μ ‾ \overline{\mu(u_i)},\overline{\mu} μ(ui),μ分别表示用户 u i u_i ui对北区广告的平均点击率和所有用户对北区广告的平均点击率。在计算点击率的过程中需要对北区不同位置的点击做归一化,并且需要做平滑。
广告网络
广告网络是除了搜索广告以外最重要的非实时竞价类广告产品。由于没有了明确的用户意图以及展示位置的固定性,像查询扩展、广告放置等问题在广告网络中并不存在。优化目标为:
max a 1 , ⋯ , T ∑ i = 1 T { μ ( a i , u i , c i ) ⋅ b i d C P C ( a i ) } \max_{a_{1,\cdots,T}}\sum_{i=1}^T\{\mu(a_i,u_i,c_i)\cdot bid_{CPC}(a_i)\} a1,⋯,Tmaxi=1∑T{μ(ai,ui,ci)⋅bidCPC(ai)}
由于广告网络的成本是分成或包断媒体资源,因此成本项被去掉了。
服务器接收前端用户访问触发的广告请求,首先根据上下文信息和用户身份标识从页面标签和用户标签中查出相应的上下文标签和用户标签;然后用这些标签以及其他一些广告请求条件从广告索引中找到符合要求的广告候选集合;最后,利用CTR预估模型计算所有的广告候选的eCPM,再根据eCPM排序选出赢得竞价的广告,并返回给前端完成投放。
除了帮助理解用户意图的短时用户行为反馈,在广告业务中还有以下一些需要快速对在线日志进行处理的场景:
- 实时反作弊。爬虫流量、突发的作弊流量都会对广告主预算产生巨大的影响。因此,需要一个实时反作弊的模块,对系统产生的日志进行过滤。
- 实时计费。及时下线预算消耗完的广告,避免系统损失。
- 短时用户标签。分钟级行为数据。
- 短时动态特征。
MapReduce是通过分布式文件系统尽可能对计算进行调度,而流计算则是在各台服务器之间调度数据来完成计算。这使得它们的适用场景也有着很大的区别:流计算适用于准实时、快速的数据统计和反馈,但是由于是在调度数据,所以并不适合于海量数据的批量计算;而MapReduce 更适用于数据量非常大,但是计算实时性要求并不太高的情形。实践中,往往需要两者结合来达到数据量和实时性两方面的要求。
广告检索
基本的倒排索引技术在广告检索中遇到了两个新问题:
- 广告的定向条件组合可以看成是一个由与或关系连接的布尔表达式,这样的文档显然与搜索引擎面对的BoW文档不太一样,这里存在着有针对性的检索性能优化空间。
- 在上下文关键词或和用户标签比较丰富时,广告检索中的查询关键词可能有很多。
布尔表达式的检索
一条广告文档不能再被看成是BoW,而是应该被看成一些定向条件组合成的布尔表达式: a 1 = ( a g e ∈ { 3 } ∩ g e o ∈ { 北 京 } ) ∪ ( g e o ∈ { 广 东 } ∩ g e n d e r ∈ { 男 } ) a_1=(age\in\{3\}\cap geo\in\{北京\})\cup(geo\in\{广东\}\cap gender\in\{男\}) a1=(age∈{3}∩geo∈{北京})∪(geo∈{广东}∩gender∈{男}),并且写成析取范式(Disjunctive Normal Form,DNF)的形式,即多个交的并,每个交集又可以进一步分解为一个或多个赋值集(assignment)的交。
布尔表达式检索的问题有两个特点,由于是DNF,因此一次广告请求中的定向标签满足某个conjunction时,一定满足包含该conjunction的所有广告,只需要对conjunction建立倒排索引,再加conjunction->AD的辅助索引即可。广告请求中的定向标签数目sizeof(query)一定不小于满足的conjunction中assignment个数。
首先按conjunction建立倒排索引:
然后将conjunction中的assignment分解,按照size分组,形成Conjunction倒排索引:
size=0是只有一个assignment,不知道为啥不是1。
相关性检索
以查询和文档间的相似程度为目标的检索问题称为相关性检索,不需要关键词的出现。基本思路是在检索阶段就引入某种评价函数,并以此函数的评价结果决定返回哪些候选。有两个要求,一是合理性,即与最终排序时使用的评价函数近似;二是高效性,即需要在检索阶段实现快速评价算法,当选用线性评价函数(变量为各标签或关键词)且各权重为正时,是可以构造出这样的快速检索算法的:
s c o r e ( a , c ) = ∑ t ∈ F ( a ) ∩ F ( c ) α t v t ( a ) score(a,c)=\sum_{t\in F(a)\cap F(c)}\alpha_t v_t(a) score(a,c)=t∈F(a)∩F(c)∑αtvt(a)
其中F(a)和F©分别表示广告文档a和上下文特征c上不为零的特征集合,比如查询中的关键词,而 v t ( a ) v_t(a) vt(a)表示t这一特征在a广告上的贡献值。
将线性函数评价过程加速的关键在于使用两个上界:一是某个关键词t在所有文档上贡献值的上界,记为 u t u_t ut;二是某个文档中所有关键词的上界的和,即该文档对当前查询评价函数的上界,记为 U a U_a Ua,也是相关性上限。WAND(Weak AND)算法利用这两个上界在检索过程中排除掉大量不可能胜出的候选,从而达到快速评价的目的。
图中每个关键词(Term)带有一条倒排链,链表中的每一项是包含此关键词的文档ID,用阴影表示,维护一个小顶堆。
https://wulc.me/2018/03/18/Wand%20%E7%AE%97%E6%B3%95%E4%BB%8B%E7%BB%8D%E4%B8%8E%E5%AE%9E%E7%8E%B0/
点击率预测
点击率预测追求准确,更适合被建模成回归问题而不是排序问题。
点击率预测模型
点击事件h是二元取值,点击事件的分布可以写成以点击率 μ \mu μ为参数的二项分布(binomial distribution):
p ( h ) = μ h ( 1 − μ ) 1 − h p(h)=\mu^h(1-\mu)^{1-h} p(h)=μh(1−μ)1−h
基于(a,u,c)预测点击率 μ \mu μ的基础模型是逻辑回归(Logistic Regression,LR):
μ ( a , u , c ) = p ( h ∣ a , u , c ) = 1 1 + e − ( 2 h − 1 ) w ⊤ x ( a , u , c ) \mu(a,u,c)=p(h|a,u,c)=\frac{1}{1+e^{-(2h-1)w^{\top}x(a,u,c)}} μ(a,u,c)=p(h∣a,u,c)=1+e−(2h−1)w⊤x(a,u,c)1
( 2 h − 1 ) (2h-1) (2h−1)是为了将 { 0 , 1 } \{0,1\} {0,1}点击变量映射到 { − 1 , 1 } \{-1,1\} {−1,1}上。逻辑回归正是当目标值的分布服从伯努利分布时广义线性模型的一个特例,映射函数为 l o g i t ( p ) = log ( p 1 − p ) logit(p)=\log(\frac{p}{1-p}) logit(p)=log(1−pp)。
实践中,由于LR模型使用的特征较多,并且有相当多的特征在训练集中出现的次数并不多,为了避免过拟合,还需要在最大似然估计时加入正则化项,比如L2。
点击率模型的校正
样本严重不均衡,展示广告点击率只有千分之几。
假设分别用两个高斯分布来描述h=0和h=1情形下的特征分布。高斯分布方差的最大似然估计是有偏的(为了得到方差的无偏估计,需要将样本数目减去1 来计算方差),而这一偏差的方向是对方差有所低估,并且样本数目越少,低估越严重,更多样本变成h=0,也就导致模型对点击率进一步低估。
点击率模型的特征
静态特征往往是人为指定或机器生成的多种标签,有很多。
在机器学习问题中,有一项很重要的方法论,即某项模型侧的技术,一般都可以找到特征侧的对偶方案。让特征变成快速演进的达到与模型快速演进类似的效果,当某个组合特征被触发时,我们不再用1,而是采用这个组合历史上一段时期的点击率作为其特征取值,即动态特征。某个组合特征t(a,u,c)上的点击率可以认为是关于最终目标的一个弱决策器,通过数据统计得到,整体的融合模型就可以不必那么快速地更新了。同时不区分具体的标签属性,也减少了模型参数。
为了消除位置、尺寸等非广告决策因素对点击率的影响,将某广告位相当长一段时期内的平均点击数作为其关注程度的近似评估,我们把这一指标称为期望点击(expected click),要求评估的是在广告质量完全随机的情况下,广告位或其他属性对应的平均点击率。只用那些偏差因素作为特征,这些特征一般来说与广告a无关,训练一个点击率模型,这个模型称为偏差模型(bias model) μ b i a s ( u , c ) = p b i a s ( h = 1 ∣ u , c ) \mu_{bias}(u,c)=p_{bias}(h=1|u,c) μbias(u,c)=pbias(h=1∣u,c)。偏差模型需要用比一般点击率模型更长时间的数据来训练,这样做的目的是希望消除某段时期广告质量带来的影响。可以定义归一化的点击率指标:
C o E C = ∑ i h i ∑ i μ b i a s ( u i , c i ) CoEC=\frac{\sum_i h_i}{\sum_i \mu_{bias}(u_i,c_i)} CoEC=∑iμbias(ui,ci)∑ihi
这一指标是点击与期望点击的比值,因此称为CoEC(Click on Expected Click)。由于在分母上考虑了位置以及其他因素的偏差对点击率的影响,这一指标可以更准确地表征某部分流量上广告投放的实际点击率水平,也比较适用于点击反馈这样的动态特征。
采用动态特征和偏差模型的工程方案,点击率预测模型训练的流程分三步完成:首先,用较长一段时间的训练数据,只提取偏差特征并训练偏差模型;然后,利用得到的偏差模型计算所需维度组合上的CoEC作为动态特征;最后,用所有非偏差的动态特征训练整体点击率模型,其中用偏差模型的输出作为点击率的先验。
常见的偏差特征有:
- 广告位位置。在广告网络环境下的展示广告,位置的可能性非常多,可以找出重要影响因素,比如广告位中心相对于页面左上角的坐标,用这样的连续变量作为特征来训练偏差模型。
- 广告位尺寸。以用长宽等连续变量来代替。
- 广告投放延迟。如果在前端将广告请求发生的时间和最终展示时间都记录下来,可以为点击率预测模型提供一个重要的偏差特征。
- 日期和时间。工作日还是周末,对不同类型的广告(如游戏)点击率有着明确的影响,这主要是由于在不同时间用户任务的集中程度不同,对广告的关注也有所区别。往往还要求所有的训练过程都覆盖7天的整数倍的数据,其目的也是为了避免日期带来的偏差。
- 浏览器。浏览器本身并不对广告效果有明确的影响,不过由于各个浏览器上AD Blocker的覆盖程度有较大区别,因此在实际建模中其影响也相当大。
用CTR 或CoEC 这样的点击反馈作为动态特征,大量的长尾组合特征对于准确地预测点击率有很大帮助。但是要利用好这些长尾组合特征,还需要解决一个问题,就是在统计不足的维度组合上如何稳健地统计CTR 或CoEC。比如点击率可以加一个常量:
μ ^ ′ = α + ∑ i h i γ + N \hat{\mu}'=\frac{\alpha+\sum_i h_i}{\gamma+N} μ^′=γ+Nα+∑ihi
其中 α γ \frac{\alpha}{\gamma} γα应该等于某更大流量范围内的平均点击率。可是 α \alpha α和 γ \gamma γ的绝对数值就没有太直观的方法可以设置,可以通过经验贝叶斯求解。
点击率模型评测
R e c a l l = T P T P + F N , P r e c i s i o n = T P T P + F P Recall=\frac{TP}{TP+FN},Precision=\frac{TP}{TP+FP} Recall=TP+FNTP,Precision=TP+FPTP,取不同的阈值(即模型输出的点击率)可得Precision/Recall曲线。ROC是recall和假阳率 F P F P + T N \frac{FP}{FP+TN} FP+TNFP。
即使只用偏差模型,即对广告排序无直接贡献的模型来预测点击率,AUC 往往也处于比随机猜测高得多的水平上,如图13-8 中所示。因此,模型对广告排序的作用需要对这两个AUC 的差值做评估才能比较公允地加以衡量。
避免在整个数据集上计算,可以采用近似但对实用来说足够精确的方法,即将整个点击率的取值范围划分成一组区间,并在每个区间上得到一个曲线点。
智能频次控制
不同位置的有效展示有相当大的差别,因此,简单设定一个展示数目上的频次来控制用户的接触次数是不太合理的。可以采用期望点击EC上的累积计数代替频次来控制用户接触次数。在效果广告中,可以将EC的计数或者频次的计数作为点击率预测模型的特征直接加入训练,靠点击率模型的作用降低出现频次过高的创意的竞争力;在品牌广告中,可以通过EC计数上的直接控制达到一定用户接触程度的目的,由广告主来直接设定。
探索与利用
跟强化学习中的意思一样,期望对特征空间均匀采样构造训练集。基本方法是 ϵ \epsilon ϵ-greedy,即 ϵ \epsilon ϵ概率做探索。
UCB方法
考虑到经验估计的不确定性,进而选择估计值有可能达到的上界最大的那个广告。实践中这些比较复杂的策略并未体现出比 ϵ \epsilon ϵ-greedy法明显的优势。
考虑上下文的bandit
由于需要探索的是(a,u,c)这一组合空间,需要探索的空间过大,工程上比较常用的思路是将此空间参数化,在一个维数较低的连续空间中进行探索。这样的E&E问题可以称为考虑上下文的bandit(contextual bandit)问题,此处是指根据(a,u,c)组合参数化后的上下文空间位置,比如LinUCB。每种组合的期望收益是高度动态性的。
《计算广告》第三部分计算广告关键技术——笔记(中下)相关推荐
- 《计算广告》第三部分计算广告关键技术——笔记(中上)
文章目录 第11章 合约广告核心技术 广告排期系统 担保式投送系统 流量预测 频次控制 在线分配 在线分配问题 极限性能研究 实用优化算法 第12章 受众定向核心技术 受众定向技术分类 上下文定向 半 ...
- 《计算广告》第三部分计算广告关键技术——笔记(下)
文章目录 第14章 程序化交易核心技术 广告交易平台ADX cookie映射 询价优化 需求方平台 定制化用户标签 DSP中的点击率预测 点击价值估计 出价策略 供给方平台SSP 第15章 其他广告相 ...
- 《计算广告》第一部分计算广告关键技术——笔记
文章目录 前言 第1章 在线广告综述 大数据与广告的关系 广告的定义与目的 在线广告简史 第2章 计算广告基础 广告有效性原理 互联网广告的技术特点 计算广告的核心问题 广告收入的分解 结算方式与eC ...
- 程序化广告(三)- 程序化广告生态链介绍如DSP/ADX/DMP等
一.程序化广告生态 下图展示的是程序化广告生态链的各参与者之间的分工协作,并用线条表示了现金流方向.广告服务方向以及数据提供方向. 相对于传统的网络广告产业链,程序化市场的新角色及技术服务主要分为以下 ...
- 上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展
7月27日,上海交通大学电子信息与电气工程学院与阿里巴巴集团大淘宝技术宣布达成战略合作,共同成立上海交通大学电子信息与电气工程学院-淘宝(中国)软件有限公司媒体计算联合实验室(下称"联合实验 ...
- 服务器jbod扩展_三分钟了解服务器关键技术——RAID
RAID,为Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列. RAID 技术作为高性能.高可靠的存储技术,已经得到了非常广泛的应用. RAID ...
- 信息系统项目管理师-计算题专题(三)上午计算小题
盈亏平衡点的计算 解答 第一题: 300000 + 1000X = 1500X X=600 第二题: 100+10P = 540-40P P=8.8 第三题: 160000 + 2X = 12X X ...
- 计算广告关键技术:他们怎么什么都知道?
一句话解释关键技术:没声音,再好的戏也出不来. 广告作为一项商业活动,是需要资本来滋养的.作为整个产业链的金主,只有广告主花钱做广告,使资金流动起来,整个广告行业才能正常运转.所谓关键技术,就是那些能 ...
- 核心网upf作用_5G核心网关键技术分析
5G核心网关键技术分析 陈莉 辽宁邮电规划设计院有限公司,辽宁 沈阳 110179 摘要:5G核心网相对于4G网络在架构.功能.业务能力提供方面有较大的革新,引入了新的关键技术如SBA.支持边缘计算. ...
最新文章
- 多功能监护系统开发与设计
- C语言中malloc函数产生的内存泄漏问题
- python中包的循环导入_具有继承的包中的循环导入依赖项
- [Vue 牛刀小试]:第八章 - 组件的基础知识
- vue中 裁剪,预览,上传图片 的插件
- macos big sur u盘安装_老款macbook机型欺骗补丁强制安装macOS11 Big Sur图文详解
- 启动mysql时显示:/tmp/mysql.sock 不存在的解决方法
- C#代码整洁之道:代码重构与性能提升
- oracle sde 千万数据,Oracle+sde数据备份恢复(转自GIS帝国论坛)
- DataStreamer Exception
- php怎么给文章加页码,PPT如何插入页码
- 医用电气设备中关于电源开关的符号使用要求探讨
- (附源码)计算机毕业设计ssm高校社团管理系统
- JDK下载(jdk1.8下载与安装教程)
- 自动化测试——执行javaScript脚本
- 使用python采集某二手房源数据并做数据可视化展示(含完整源代码)
- 【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯
- 安卓音乐播放时微信视频微信语音电话进来音乐暂停播放
- myeclipse 做移动开发
- python实现隐函数曲率求解