在做pacing相关研究时,阅读了一些工业界提出的预算控制方面的论文,通过流量层级的预算消费控制,以期精准化分配流量,提高平台和客户收益。
《Optimizing budget constrained spend in search advertising》
《Budget Pacing for Targeted Online Advertisements at LinkedIn》
《Smart Pacing for Effective Online Ad Campaign Optimization》
《Real time bid optimization with smooth budget delivery in online advertising》
论文侧重点主要在机制算法设计和实现结构,偏重思想,对于一些具体的策略应用和预测模型的细节,并没有过多阐述。
budget control本质上是对客户的消费重新分配。结合个人实际经验来看,大概的操作手段可以分为以下几类:
- 概率控制展现
- 对bid加权控制,给bid一些权重,灵活地展现(和动态调各种门槛类似)
- 预算重新分配
在操作维度上主要分为:
- 时间维度分类。 将时间分成若干部分分段,不同时间采取不同的策略。
- 流量分类。同一类拥有相似的属性。对于不同的流量进行不同的策略。
- 广告主分类。(圈客户, 进场)
Optimized Throttling算法
VPT
一种最原始的控制方法 Vanilla Probabilistic Throttling(VPT)
对于预算受设的广告假设:
为广告主a当前剩下的预算
为(假设预算不受限的情况下) 广告主能有的最多消费
那么对于接下来的每次pv, 对于这个广告主以 的速度(概率展现)消耗预算。
OPT
显然VPT算法只是一种等比消耗,是一种随机分配算法没有考虑到流量的特异性以及广告主的优化目标。论文于是提出了Optimized throttling(OPT)算法。
首先设定一个要优化的指标,比如ctr,cvr,cpa
定义 为预测的的所有广告消费总和占预算的比例
则为的占比为=
只有当<= 时, 该广告才参与拍卖,先验的每次作为一个third input
Smart Pacing 算法
linkedln提出的预算控制算法
假设对于一个计划i,其每天的预算为
将一天等分地划成T个时间窗口
对于某个时间窗口t:
表示到t窗口之前该计划i的累积消费
表示到t窗口之前该计划i的累积可展现机会(这个东西挺难先验预测的吧??大多是统计拟合)
令 。是该计划每时刻t应该花掉的钱。
对于每一次每个广告是否参与拍卖,采用概率展现。
这里的展现概率叫做pass through rate(PTR)。PTR的计算如下:
意思就是消费速度小于预计消费速度时,提高展现概率,大于预计消费速度时,降低展现概率。是控制上下限的参数
这里也可以采用动态调整bid的方法,来提高或削弱广告胜出的概率
,其中
在实现上,论文有一些Details
- 更新频率。PTR每分钟更新
- 预测展现。利用ensemble的时间序列模型进行预测
- 初始的参数值r设为0.1。更准确的做法是用实际消费导数来调整。两个原因没有采用:不一定可导,考虑更新频率。
- Fast finish trick。对预测模型进行了微调,假设一天最后两个小时没有消费(理解为:机制容错设计)
- 冷启动问题。对于所有计划设定了同样的PTR值。对投放计划来说,一个较低的ptr值可以给系统足够的时间来学习。未来会细分。(high demand-supply capmpain 设定更低的ptr值)
RTB smooth budget 算法
这篇论文相比前几篇论文,相当于提出了一个更抽象,更通用的pacing控制架构。
其中将一天分成了T个时间段,表示impression i对于广告主的价值,表示是否展现。是需要支付给广告平台的cost,即通常所说的price(由于二价拍卖的原因,cost难以预测)
对于某个时间slot内,预算的消费被认为和展现量成正比,同时假设在特定时间slot t内,特定广告位,price可以看作恒定不变,因此,时间slot的划分,应保证在每个slot内,price的方差足够小
对于某个广告位,需要针对每个slot分配一个pacing rate。这个pacing rate就是参与拍卖的概率。
令 在这个时间片内的消费
imps(t)是该campaign在该时间段内的总展现次数(可以理解成pv)。reqs(t)是在满足广告主人群定向的广告请求,bids(t)表示参与竞价的次数。如果假设满足广告主人群定向的广告请求在所有广告请求中是一个均分分布,可以把reqs(t)看作一个常数。
令reqs(t+1)为预测的下一个时间slot广告请求,win_rate(t+1)为预测的下一个时间slot的获胜率,则有
其中除了s(t+1), 其他都是已知的或者可以模型预测到的。s(t+1)应该等于广告主在该时间段理想的消费。的具体指取决于具体的pacing算法。
对于均匀pacing(上文说到的比较简陋的VPT就是一种均匀pacing算法!):
显然,在绝大多数场景下,都不会使用uniform pacing,对于不同的时间slot应该区别处理。quality pacing基于历史记录中的点击或转化行为,刻画出每个时间slot的质量。根据算出来的质量,构造一个离散概率分布函数:
值得注意的是,如果, 那么在slot i内,广告主永远不会消费,那在slot i内永远不会有探索的可能性。所以论文提出,可以将广告主预算划分,使用一个混合uniform pacing和quality pacing的预算分配机制。
机制设计
下面是一些针对quality pacing算法的机制设计。
考虑广告主bid不变的情况下,
在特定slot内,所需要获得的广告请求可以由bid(t)和pacing_rate(t)计算得到。对于具体reqs(t)的数字,论文基于历史数据,对每个广告位,每个slot,构建了一个关于ctr(或者cvr,视具体需求而定)的分布。如下图所示:
考虑到线上的不确定性,以及这个是根据历史数据获得,具有一定的延时性,论文提出需要对thresold设定一个置信区间。实时计算了threshold的均值和方差。这块的计算逻辑我没太细看,应该是正常的mean和variance的加性更新方式
论文假设threshold服从高斯分布,因此threshold的下限和上限可以由算出的mean和variance得到。
如果广告主是动态竞价:
因为bid是可变的,所以不需要像上面bid不变的情况下通过门槛调整,可以通过bid的变换来达到目的。
论文提出了pacing rate的两个门槛,,将pacing_rate分成来三个区域。
critical region: <=pacing_rate<=
在critical region内,出价直接按照u=ecpa*cvr出价。因为满足各项条件safe region: pacing_rate<=。
在safe region内,论文统计了计费比,然后用u乘以计费比出价。
这儿没太懂为乘以计费比的目的。仅仅是为了降低出价?-
danger region:pacing_rate>=
设计了一个溢价系数。 C是超参数,是历史统计的price。这儿是为了防止虽然竞价频繁,但是bid不够高,无法获胜。
一些details
对于smooth_budget算法:论文提出一些实现上的details:
冷启动问题。无法预测cvr或ctr。在原始数据积累阶段,基于内容生成了website和user的推荐列表。若某本次请求在推荐列表,设置一个高的bid,否则以default bid参与拍卖。
过消费问题。设置以pacing rate展现,但如果某段时间pv急增,仍有可能会过消费。每slot检查,是否超过delta
总结来说,budget control算法除了宏观上的理论指导和方案设计,还需要考虑到各种可能性,注意容灾机制的设计,做好细节方面的精确度