{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
好吧,一个标题党的标题,但是本质上也没有任何夸大,算法的确知道你值多少钱,并决定向你展示什么样的广告。
自从Facebook引入oCPM出价以来,国内的头条广告、微信广点通、百度信息流都陆续推出了自己的oCPX出价,oCPX出价已经成为主流广告投放平台的标配。
简单而言,oCPX是一种出价机制,允许广告主按照转化行为成本出价;假设对于游戏类的广告主,希望优化App的激活,那么广告主在投放系统中设置了激活成本之后,算法就会根据以往转化数据和广告主的出价,自动筛选有价值的人群,针对高激活概率的人提高出价赢得广告曝光,对低激活概率的人群降低出价减少广告曝光以减少广告浪费。
常见的广告出价方式还有CPM、CPC。
于是oCPX模式就应运而生,它能帮助广告主优化更深层次的转化行为,同时提升有效点击,提高媒体受益。
这段时间在网上找到一篇淘宝的关于oCPC论文,逻辑很清晰,在这里简单转述一下。
文章细节很多,没兴趣看的同学只要关注以下几点:
先定义:
为了简化说明,做两个假设:
要维持或者提升ROI,那么只需要保证 b1/b0 ≤ p/h。
b1代表算法优化后的出价;举个例子,假设本次曝光,预计能带来1.5倍的转化价值,那么只要优化后的出价/广告主出价小于等于1.5倍,那么整体的ROI是不会下降的;反之,若预估转化价值低于历史均值,那么降低出价;由于b0、p和h都已知,那么只需计算b1,满足该约束即可。
真实广告投放环境中,为了兼顾品牌安全和账户稳定,将b1/b0的范围控制在[1-α, 1+α]范围之内,淘宝论文中将α值设置为0.4,即广告最高出价不会超过广告主设定的140%,下限也不会低于广告主设定的60%。
通过以上约束,也就能实现我们经常说的:对于转化概率高的流量(p/h>1,即本次广告转化率比历史平均转化率要高)提高出价,获得更高展现概率;反之,对于转化概率低的流量(p/h<>
那么问题来了,若多个广告竞争,到底谁赢得此次出价?
广告排序我们都知道采用了eCPM排序,eCPM=b0*pCTR,eCPM高者赢得广告展现机会。那么在ROI约束下的,eCPM能够取到的最大值即上限u(eCPM)=pCTR*u(b),eCPM能够取到的最小值即下限l(eCPM)=pCTR*l(b);
淘宝给定的排序机制是:按照eCPM排序,同时保证各方利益总和最大。
各方利益总和的计算,淘宝给出了两个公式:
f(1) = pCTR1 * pCVR1*V
f(2) = pCTR2 * pCVR2*V+β*CTR2*b0
f(1)计算的是广告带来的所有GMV;f(2)计算的是广告带来的GMV和平台的广告收益。需要指出的是,f可以扩展,因此可以优化任何目标;这里认为f是单调递增函数,随着系统调整后的出价b1提高,收益也提高。f(1)虽然没有将b1作为参数,但是假设b1的增加,能拿到更好的资源位从而带来更高的CTR、更加优质的流量。
广告排序过程如下(稍微有点繁琐,请记住每个字母代表啥意思):
① 对候选广告池子A中每一个广告计算f(u(eCPM)),按倒序排序;即按照最高出价来计算f,由于假设f是b1的递增函数,那么按照b1的上限值来计算,理论上是能保证f最大,即保证各方收益总和最大;
② 计算所有备选广告中,所有eCPM下限的最大值t=l(eCPM);
③ 按顺序,找到第一个满足u(eCPM)≥t的广告k,k广告赢得此次竞价,并将该广告移出A池子;即,只要某条广告最高出价下的eCPM大于其他广告的最低出价下的eCPM,就能赢得此次广告曝光。这是为了保证媒体收益,如果只按照f排序而不考虑eCPM,那么可能对于媒体而言是一个亏本的买卖;
④ 比较剩下所有广告的最大出价下的eCPM即u(eCPM)与上一个赢得广告k的u(eCPM),取两者当中最小值,这样就能保证已经赢得展现机会的广告k的eCPM,在所有候选广告中是最大的;若广告i的eCPM上限u(eCPM)被调整,也就意味着广告i的eCPM上限u(eCPM)大于广告k的u(eCPM),将其调整为广告k的u(eCPM)。
此时,那么广告i的出价同样需要被调整,看淘宝的代码更直观一点:
第一步首先比较广告i的上限eCPM与已经赢得展现机会的广告K的上限eCPM,取两者 当中最小值,这就能保证已经赢得曝光的广告k的eCPM是最大的。
第二步,更新广告i的出价上限;如果u(i-eCPM)在第一步被更新了,那么广告i的出价 在第二步也会被更新;需要注意的是,由于出价上限改变了,那么广告i的f(u(eCPM)) 同样会被更新(由于f()是一个单调递增函数,f()会减小);
至于这里为什么要调整剩余候选广告上限eCPM,使其不高于胜选广告的上限?我的理解是(不一定准确):首先是兼容eCPM排序机制,也就是保证了媒体收益最大化;其次,兼顾f(u())排序是为了保证平台、广告主和消费者的利益。
重复以上4个步骤,直至广告数量填充满所有广告位,或者所有没有广告赢得该次展现,此时结束循环,并将所有广告出价b1设置为u(eCPM)/pCTR,也就是所有广告按照上限出价。
投放启示:
① 单纯从逻辑上看,真实出价是对广告主最优的策略。若广告主最初出价b0小于其真实成本,那么拿不到预期的流量,这对广告主不利;若最初出价b0高于其真实成本,这对拿量有好处,但是会导致模型会不断往该出价水平去靠近(p(c|u,a)/h(c|u,a)不断趋近于1),后期要控成本时势必需要重新积累数据重新学习;
② 开启oCPC之前,需要稳定的投放。换句话说,用户转化路径是走得通且成本达到预期的。比如目前虽然激活成本达标,但是后续的转化(注册、购买、申请贷款等等)都还不达标,即使开启oCPC去优化激活意义也不大,因为这样带来的激活用户后续转化率也不会存在很大变化。
这是淘宝oCPC的思路细节,我们跳出这些细节,看看一条广告从请求到展现涉及到的全过程:
为了保证不丢失细节,我直接把论文描述贴过来:Front Server接收到页面曝光请求之后,将该用户信息传给Merger Server,Matching Server分析得到该用户的特征(一连串的标签),这些标签被传入Search Node Server检索符合条件的候选广告,此时候选广告数量降低为400条左右。
Real-time Prediction Server预估得出pCTR和pCVR。Stragedy Layer包含oCPC的逻辑和GSP机制。经过该逻辑层,赢得展现的广告被Data Node Server和Smart Creative Service优化,最后Front Server返回广告元素并展现。
论文原文链接点此直达。