labuladong的算法小抄 电子版购买_广告投放之库存分配算法:HWM算法和SHALE算法...

简介

在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。GD广告是提前签好合约的广告,需要将对应的广告投放给特定属性的人群,量不足时会有惩罚。于是出现了一个问题如何保证GD广告完成投放且保证整个广告系统收益最大?

另外,不同广告主投放广告目的不一,品牌广告主主要目的是让广告触达尽可能多的目标人群,有些广告主为了点击率和转化率,也有一些诉求介于两者之间。同时,不同广告主的付费方式不同,一般有CPM、CPC、CPA等方式。于是出现了第二个问题:如何分配流量,使得追求不同目标的广告主和采用不同目标的广告主的目标都尽可能的达成?(注:此点出现在文献【3】中,但是笔者认为这个和问题1大同小异,即广告系统收益最大)。

库存分配问题,可以简化为一下二部图(bipartite graph),如图,

表示用户的一次浏览,
表示用户的一次广告活动,广告可以是GD,也可以是NGD,他们的连线表示一次流量的分配。流量的分配按照定向投放的方式,即广告投放系统抽象出用户的属性,然后投放对应定向条件的广告。一个广告对应多类用户,一类用户也对应多种广告。

4c8518534f95ccedb3ba92ef9cf1a07d.png

当流量到达的时候,系统判断流量满足的定向条件,然后选择合法(满足要求)的定向广告展现给用户,完成一次分配。NGD广告按照竞价方式售卖,分配的目标是使广告系统收益最大化,尽可能挣到更多的钱。GD广告首要目标是保量,同时也需要关心广告效果。所以库存分配的目标包括三部分:NGD广告收益最大化,GD广告保量,广告效果最大化。数学语言描述见下图【3】,在此不进行赘述。

efbbe831f9fc484871971b3b4d236371.png

981ff093697d930c976d313e8b944c51.png

a196fd07ebf13a5579308130afed52ad.png

6d7070ab98940b24ffb930783e505a9d.png

a2d9bb6256fa9999fadfebab8b3544cf.png

上述为流量分配问题的目标,在现实中,还需要考虑实时性,即线上计算部分的时间复杂度不宜太高。下面介绍两种库存分配中常用的算法,包括HWM算法和SHALE算法,其优化目标,均为保GD量,未考虑NGD收益和GD收益(SHALE算法通过合约广告重要程度这一参数部分考虑了GD收益)。

HWM算法

【2】提出一种算法HMW(High Water Mark Algorithm),HMW通过简单的启发算法解决库存分配的问题,算法主要思想是:首先考虑能满足合约的所有流量,流量越少重要程度越高(

更靠前,即更需要提前考虑),然后将流量按照所需量平分,转换为概率。

如下图【3】算法分为两部分,离线计算合约分配概率

和分配顺序
,在线部分实时计算各个用户的广告分配概率。看起来很复杂,但是真正理解思想后,发现其实真的思想和复杂度都很简单,是最简单的贪心。

c833e4088594e7c505184243c5843351.png

能看到,HWM算法需要提前预测每一个用户的流量

,如果预测不准确,就会导致在线分配出现问题,故可以调整分配概率
,具体见【2,3】。HWM为一种贪心算法,不是最优方案。在线部分时间复杂度为

HWM算法示例

如图,左侧为到达系统的用户,右侧为广告合约,广告合约来自于三个广告主,分别对应不同的定向条件,且每个合约广告约定了投放量。Supply表示到达系统的用户,他们均有自己的属性和预估流量。图中的连线表示用户满足合约的定向条件。根据算法流程,进行计算,流程如下:

844dc84d9c957b83d7185d2e10e41837.png
  1. 离线部分

(1)首先计算各个合约的所有用户流量值和:

(2)排序,$S_2order_1>order_3$,在进行后续计算时,按照此顺序计算(即优先分配了可分流量较少的广告,满足其流量要求)。

(3)按照分配顺序进行计算,计算各个合约的概率:

dd290eb36ab81c0bc13c46c124ee10f9.png

(4)如图,对于合约按照顺序计算其分配概率:

首先,对于合约2,根据

计算

解得

同理,对于合约1,利用合约2计算完的剩余流量(表格中的第三小列),计算

同理,对于合约3,利用合约1计算完的剩余流量(表格中的第五小列),计算

  1. 在线部分

用户4到达时,

,即取前l个使概率最好不大于1的最大值,故合约2的广告必出,用户1到达时,可以出合约1和3,还可以出NGD广告。

思考:可以看到,整个算法的对流量预估敏感,文献【3】通过调整

和调整预估流量,优化分配算法。这种分配方式也充分考虑了线上计算复杂度,但是,算法没有考虑后续合约如果流量被前面占有之后,导致广告投放无法保量后的情况,(惩罚项),也没有考虑各个广告的重要程度,总而言之,是一种贪婪的分配方式,而不是最优的方案。于是有了SHALE算法。

SHALE算法及其推导

首先定义SHALE的优化目标:

其中,约束1为广告需求约束,约束2为用户流量约束,约束3为非负约束(保证逻辑的正确)。

表示
类用户的流量,
表示合约
的重要程度;

表示
中应该分配给广告
的理想分配比例,其中
表示满足广告
的所有可分配流量,
是满足合约
的所有用户集合,
是每个合约的约定投放量;

表示算法实际分配量,是需要求解的值;

表示每一个合约的惩罚项,流量投递不足时的单位惩罚;

表示合约
的投递不足的流量。

可以看到,这就是约束条件下的优化问题,分配比例与理想分配比例越近,且投递不足流量越少,则越接近最优结果。利用拉格朗日对偶性,将原始问题(极小极大问题)转换为对偶问题,并且利用KKT条件进行求解。(求解过程见附)

拉格朗日函数:

原始问题和对偶问题的解的充分必要条件是满足KKT条件,即:

根据KKT条件,求解得:

解第一个公式,得

同时,

必有一个为0,当
小于0时,
会增加,使得
,所以:

同时,根据第二个公式,

,且
,得出
。另外,
,对应的即为

同时,根据第三个公式,

时,
,所以
,所以
时,
(因为
)

又因为

,所以
,所以

整理结果如下:

  1. 最优解由
    得出。
  2. ,具体地,
  3. ,具体地,

SHALE算法流程

根据上一节推导结果,文章中利用坐标下降法进行求解,主要进行如下操作:

初始化

初始化所有的

.

第一步

重复这一步,直到退出

  1. 对于每一个用户
    ,求解满足
    ,若小于0或无解,则
  2. 对于每一个合约
    ,q求解满足
    ,若大于
    或无解,则

第二步

  1. 初始化
  2. 对于每一个用户
    ,求解满足
    ,若小于0或无解,则
  3. 对于每一个合约
    ,用HWM中方法分配顺序队列,然后:

    a. 寻找满足
    ,若无解,则

    b. 对于每一个满足合约
    的用户
    ,更新

输出

对于每一个合约

,输出

在线分配

当流量到来时,根据合约的输出

,进行以下分配:
  1. 设置
    ,计算
  2. 对于所有的合约,按照分配顺序,计算
    ,更新
  3. 挑选合约

完成分配

在第一步中,通过假设

正确迭代
,然后假设
正确迭代
,论文【1】中的定理表明,第一步中的解收敛,具体地,
迭代后,输出
在误差内
近似。在第二步中,利用和HWM相似的方法计算了
,通过第一步计算的
计算了
,同时注意到,分配的流量需要知道并且不能超过

参考文献

  1. Bharadwaj V , Chen P , Ma W , et al. SHALE: An Efficient Algorithm for Allocation of Guaranteed Display Advertising[J]. 2012.
  2. Chen P , Ma W , Mandalapu S , et al. Ad Serving Using a Compact Allocation Plan[J]. 2012.
  3. 张亚东《在线广告 互联网广告系统的架构和算法》
  4. https://mp.weixin.qq.com/s/2VejGdsZrCxB8pD1y7Bqhg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值