论文阅读 (015): Budget Pacing for Targeted Online Advertisements at LinkedIn

1,139 阅读10分钟

1 背景

在不考虑预算控制的情况下,会出现如下问题

  • 广告消耗太快,在一天中结束了竞价,错过了剩余曝光的机会
  • 广告商往往从他们所瞄准的受众群体中获得不公平的表现,原文是:Advertisers often get a skewed representation from members within the audience segment they target(没理解意思。。。)
  • 随着竞价活动的退出,市场上的竞争也会减少。在广义第二高价的拍卖机制中,竞争减少导致收入减少(需要考虑这个吗,因为现在优化方是dsp)
  • 广告服务基础设施可能会在最新的消耗的可用性上有一个延迟,活动的花费预算可能很快超过它的预算。这就导致了广告的过度交付,从而失去了盈利机会

文章主要根据了解全局的流量模式来为调节广告的预算消耗。

2 方法

算法的主要思想就是令每个campaign(推广计划)的消耗趋势与其曝光变化趋势基本保持一致,以天为时间单位,campaign为预算控制单位,首先为每个campaign预测出其在当天的曝光情况;然后基于其曝光情况,在当前时间片,假如 已消耗/当天预算 的比例大于 已曝光/预测的总曝光 的比例,则说明预算已经消耗过快,需要减小消耗的速度,反之则要加快消耗的速度。

部分符号说明使用如下

  • SS: 所有流量的集合
  • SiS_i:campaign i所对应的流量的集合
  • bib_i: campaign i的出价
  • did_i: campaign i一天的预算
  • TT: 一天被划分的时间段个数
  • si,ts_{i,t}: 对于campaign i来说,当天到t时刻累计消耗的费用
  • fi,tf_{i,t}: 对于campaign i来说,当天到t时刻的累计曝光

所有到t时刻,应该消耗的费用计算方式如下所示

ai,t=fi,tfi,Tdia_{i,t} = \frac{f_{i,t}}{f_{i,T}}d_i

根据上述计算的比例,计算每一时刻,campaign i参与竞价的概率pi,tp_{i,t},文中称之为pass through rate(PTR),计算方式如下所示

pi,t={pi,t1(1+rt) if si,tai,tpi,t1(1rt) if si,t>ai,tp_{i, t}=\left\{\begin{array}{ll}p_{i, t-1} *\left(1+r_{t}\right) & \text { if } s_{i, t} \leq a_{i, t} \\ p_{i, t-1} *\left(1-r_{t}\right) & \text { if } s_{i, t}>a_{i, t}\end{array}\right.

其中rt(0<rt<1)r_t(0<r_t<1) 称作调整速率(adjustment rate)。

对于 campaign i , ai,ta_{i,t}fi,tf_{i,t}在当天开始已经确定,预算控制根据si,ts_{i,t}进行计算。

文中还提到了预算控制的方式[1],如下所示

bi=biψ(si,t/di)b_{i}^{*}=b_{i} \psi\left(s_{i, t} / d_{i}\right) \quad where, ψ(x)=1ex1\psi(x)=1-e^{x-1}

即针对预算消耗的情况,调整出价,存在如下的情况:ψ(x)0\psi(x) \rightarrow 0 as x1x \rightarrow 1。因此出价很低的时候,使用保留出价,即设置一个出价的下限。这种出价方式并不能改变预算消耗过快的情况(个人觉得一但消耗很快,导致出价很低,也就表示campaign失去竞价力,不能参与竞价了)。

3 实现细节

以下是文中对于上述PTR调节的细节,个人觉得有些点没讲清楚,一些设置过于经验了。

3.1 更新 PTR 频率

每隔1分钟更新一次PTR。这种频繁的更新使系统敏捷,快速达到稳定状态。

3.2 预估曝光量

预测campaign的曝光量十分重要,用于确定预算分配的曲线。不准确的预测可能会导致不必要的限制,并可能导致一些好的campaign没有用完预算。

对于曝光量的预测,文中没有具体展开将,使用[2]中的工作,论文是Yahoo在做保量的合约广告时提出的预估流量的方法。

3.3 调整速率的设置

对于调整速率rtr_{t},设置为10%,容易实现并且鲁棒性较好。理论上设置调整的方式应该为si,t/t\partial s_{i, t} / \partial t,即偏差较大的时候使用大的调整速率,偏差较小的时候使用小的调整速率。使用固定调整速率的原因有:

  1. si,t/t\partial s_{i, t} / \partial t的估计可能是有噪声的。预算支出曲线并不平滑,特别是对于每次点击成本的活动,它只有在出现点击时才会发生变化,而与曝光相比,点击次数少得多
  2. PTR更新很快(1分钟一次),因此使用固定的调整速率也可以到达理想的位置

3.4 初始PTR设置(Slow Start)

论文将每个campaign的PTR初始值设置为10%,因为这个值很小,所以将这种方式称为slow start。设置较小的初始值给予系统以时间来调整每个campaign的PTR。如果一个活动的预算花费太慢,那么它可以在25分钟内完全开放。如果PTR一开始就设置得很高,会导致预算很快被花光。

同样,更合理的方式是为每个campaign设置一个PTR,但是论文并没有针对这一点进行深度的探讨。

3.5 Fast Finish

使用统计模型来预测每个活动未来的曝光,模型通常具有较高的精度,但总是存在统计误差。结果,在某些情况下,算法会为campaign设置偏低的PTR值。文中尝试通过快速完成来缓解此问题,即修改fi,tf_{i,t}(allocation curve),使算法假设一天的最后两个小时内不会有任何流量。通过这种方式,预算控制算法会在22小时内尝试耗尽预算。反过来,这会给在当天早些时候被错误限制的campaign提供更多机会,在以后用尽他们的预算。

4 工程设计

系统工程设计的逻辑如下

image.png

具体模块简介如下

  • advertiser action: 可能包括创建一个新的campaign或修改现有的campaign,如修改出价或修改每日预算等
  • ad requests: 用户浏览而触发的广告请求
  • 在ad sever中的campaign index记录着每个campaign当前的状态(曝光,消耗等情况)
  • pacing module会根据预设的更新频率从database中获取最新的数据来更新campaign index

广告投放数量的预测是在一个离线的Hadoop系统中计算的。预测信息每天都被推送到pacing module。

pacing module使用更平缓的方式进行更新,在文中提到每1分钟对所有数据更新一次,因此每7秒更新大约12%的campaign。这种更新频率能够让系统的负载较为均匀,也能够较快达到一个稳定状态。

5 实验

5.1 实验设置

为了验证预算控制算法的效果,合理的方式是对一个广告一天跑一致的策略,即使用本文提出的预算控制算法(on)或者不使用(off)。为了消除时间的影响和不同campaign的影响,对一个campaign一天使用on,一天使用off,分配方式如下

image.png

还有一种策略就是对所有campaign,将预算对半分,使用两个系统分配使用预算控制或者不用,对比效果。但是文中不使用此策略,原因为

  • 对一个系统而言,总预算为原来预算的一半,会影响算法效果
  • 实现过于复杂,划不来

5.2 评价指标

使用以下指标,在LinkedIn的所有数据上进行计算的,没有任何抽样。LinkedIn有数千万的页面浏览量,有数以万计的广告客户。具体指标如下,分为三个方面进行评价

广告主利益

  • Campaign life time: 预算消耗95%时所花费的时间作为广告的生命周期,计算实验中的平均生命周期,以小时为单位
  • Unique impressions per spend: 单位消耗给广告主带来的unique user数量,计算方式 number of unique user/total spend
  • 表示当天平台服务的 campaign 的数量

平台收益

  • Cost per request:每次请求的平均收益,计算方式 total revenue/number of requests
  • Over delivery: 超扣的金额占预算的比例

用户体验

  • Unique campaings served: 用户看到的所有广告中有几个unique campaign,表示用户看到的广告的多样性,论文认为这个值越大越好

5.3 实验结果

对比在Direct Ads和Sponsored Status Updates上的实验结果,两种广告形式不同,其中

  • Direct Ads是一种自助式广告产品,广告客户可在其中通过基于Web的UI设置campaigns。广告出现在LinkedIn.com域中的许多页面上,例如主页,个人资料页面,联系人页面等的顶部和侧面板上。DirectAds仅出现在桌面环境中。
  • Sponsored Status Updates(SSU)是一种广告产品,在成员更新流上提供广告内容。成员的更新流包含由成员的连接,成员所属的组,成员关注的公司等生成的内容。SSU是由公司赞助的要推广的内容,这些公司将在未关注成员的更新流中进行推广公司。 否则,此类内容自然会出现在关注该公司的成员的更新流中。广告商可以通过基于Web的UI或与销售代理商的互动来设置campaigns。更新流和SSU一起出现在台式机,移动设备和平板电脑环境中。

Direct Ads

带加号+的指标表示On在oFF的基础上的变化比例,实验结果如下

image.png

结论有

  • 预算控制对于广告主和平台都有好处,将广告生命周期提升了44%
  • 广告主可以用同样的预算接触到更多的受众,广告也得到了更多的曝光
  • 超过预算的情况减少了10%(发生这种情况是因为预算信息回传的延迟)
  • 对用户看到的广告内容多样性没有太多的改变。可能是因为用户看到的campaign数量呈长尾分布(本来就没看几个)

绘制campaign一天中CPC的变化,如下所示

image.png

使用预算控制,CPC一开始会较低,即有效较少开始过度的消耗预算,在一天中后半段CPC提升,即这个时候开始有效消耗预算。

Sponsored Status Updates

同样的,相关实验指标和CPC变化如下

image.png

image.png

主要结论有

  • SSU会快速消耗完预算,使用预算控制后,广告生命周期大大提升,提升了149%
  • 其他指标具有改善,CPC变化趋势和Direct Ads类似

campaign例子

一些个别的campaign的例子,具有特殊性。如下图所示,在SSU广告上,没使用预算控制时,30分钟就消耗完了所有的预算,并且超预算了;使用预算控制,20小时消耗了预算,并且消耗十分平稳。

image.png

支出曲线与分配曲线对齐,蓝色的线是观察到的支出曲线,红色虚线是活动的分配曲线。

image.png

6 讨论

疑问如下

  1. 初始PTR设置10%,没考虑调价,胜出概率,理想情况下是不是还是会导致预算提早消耗完?
  2. Fast Finish中,没有说清楚统计偏差到底是什么?为什么设定22小时这个常数?

7 参考资料

  1. A. Mehta, A. Saberi, U. Vazirani, and V. Vazirani.Adwords and generalized on-line matching. Journal of the ACM, 54(5):Article no. 22, October 2007
  2. D. Agarwal, D. Chen, L.-j. Lin, J. Shanmugasundaram, and E. Vee. Forecasting high-dimensional data. In Proceedings of the 2010 ACM SIGMOD International Conference on Management of Data, SIGMOD ’10, pages 1003–1012, New York, NY, USA, 2010. ACM.
  3. 《Budget Pacing for Targeted Online Advertisements at LinkedIn》 阅读笔记