← 返回 QuantGrowth 首页

广告库存分配算法

广告
广告

广告库存分配:把有限流量交给合适的订单

周五下午,销售签下一笔覆盖北京用户的重要订单。系统一查,总库存看起来完全够用。

投放到一半,订单却开始缺量。此前的电视剧频道订单消耗了大量“北京电视剧用户”,这批共享流量被提前用完了。

广告库存像联程航班最后几张座位:给了替代路线很多的人,后面只能坐这一班的人就可能无票可买。

一、共享库存决定全局履约

假设有两个保量订单:

  • 订单A购买电视剧频道,需求400个CPM;
  • 订单B购买北京地区流量,需求800个CPM。

备注:行业内部常把1000次曝光简称为“1个CPM”

北京电视剧观众同时满足A和B,是共享库存;上海电视剧只适合A,北京综艺只适合B。

7

图左侧先用北京电视剧流量满足A,等B开始投放时,北京库存只剩600个CPM,最终缺量200个CPM。图右侧则优先用上海电视剧满足A、用北京综艺满足B,把北京电视剧留作缓冲,两单都能完成。

这个例子揭示了库存分配的核心:一次局部正确的投放,可能造成全局错误。替代空间大的订单应优先使用普通库存,稀缺库存则留给替代空间小的订单。

系统会把相似流量聚合成库存切片,再建立切片与订单之间的关系图。越多订单争抢同一切片,库存越稀缺。

二、分配公式在权衡两笔账

保证式广告分配可以写成一个优化问题:

\min_{x,u}\quad \frac{1}{2} \sum_j \sum_{i\in\Gamma(j)} s_i\frac{V_j}{\theta_{ij}} \left(x_{ij}-\theta_{ij}\right)^2 +\sum_j p_j u_j

公式看起来复杂,业务上只是在算两笔账。

第一笔是“投得偏不偏”。xij是实际分配比例,θij是理想比例。如果全国订单只投给库存最充足的城市,虽然完成数量,却没有获得预期覆盖。第一项用于惩罚这种偏科。

第二笔是“缺量有多贵”。uj表示订单缺多少,pj表示每单位缺量的代价。重点客户、临近结束或违约成本高的订单,可以设置更高权重。

模型还要遵守三条底线:订单需求要被满足;每份库存不能重复分配;所有分配量必须大于等于零。地域、人群和频道定向则决定一份库存有没有资格进入某个订单。

三、SHALE像一套离线制定的交通规则

如果未来每一次广告请求都已知,求解器可以提前列出一张巨大的分配表。但现实中每天有海量请求,未来流量还存在偏差。把整张表传给在线服务器,既占空间,也无法处理预测中没有出现的新请求。

SHALE的办法很像交通管理:不为未来每一辆车提前指定车道,而是根据道路拥堵程度,为每个入口制定少量规则,车辆到达后现场快速执行。

离线阶段,SHALE读取预测流量和订单关系,反复判断哪些订单更难完成、哪些库存争抢更激烈。越难完成的订单会获得更高的“稀缺压力”,引导系统在后续请求中优先照顾它。

算法不需要把每份库存的去向全部保存下来,最终每个订单只保留少量参数。在线请求到达时,服务器先找出它符合哪些订单,再根据这些参数计算分配概率。例如一类北京电视剧请求可能以40%的概率给A、60%的概率给B。海量请求累积后,整体分布就会接近离线计划。

这也是SHALE真正有价值的地方:它连接了“离线算得好”和“线上跑得动”。论文给出的几个工程特点很实用:每轮计算量近似随关系数量线性增长;可以流式读取数据;计算时间不足时能提前停止并输出可用计划;上一轮结果还可以作为下一轮起点。

四、计划与实时节奏共同完成交付

离线计划仍然无法预知一切。某天流量突然下降、素材审核失败,或者订单临时暂停,都会改变真实供需。因此生产系统还需要Pacing控制投放速度:落后订单适当加速,超前订单适当减速。

SHALE负责长期资源结构,回答“库存留给谁”;Pacing负责短期节奏,回答“此刻投多快”。只做Pacing,落后订单仍可能争抢稀缺流量。

平台还会按最新流量和订单进度重算。评价时还要看重点订单缺量、受众集中度、稀缺库存消耗和在线延迟。

结语

广告库存分配不是把现有流量随手交给当前订单,而是为未来仍未到达的订单保留选择。

SHALE用紧凑规则把离线优化带进实时投放,兼顾订单履约与受众覆盖。它最值得借鉴的是:分配共享资源时,要计算当前选择对未来机会的影响。