简介
在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。GD广告是提前签好合约的广告,需要将对应的广告投放给特定属性的人群,量不足时会有惩罚。于是出现了一个问题:如何保证GD广告完成投放且保证整个广告系统收益最大?
另外,不同广告主投放广告目的不一,品牌广告主主要目的是让广告触达尽可能多的目标人群,有些广告主为了点击率和转化率,也有一些诉求介于两者之间。同时,不同广告主的付费方式不同,一般有CPM、CPC、CPA等方式。于是出现了第二个问题:如何分配流量,使得追求不同目标的广告主和采用不同目标的广告主的目标都尽可能的达成?(注:此点出现在文献【3】中,但是笔者认为这个和问题1大同小异,即广告系统收益最大)。
库存分配问题,可以简化为一下二部图(bipartite graph),如图,
![4c8518534f95ccedb3ba92ef9cf1a07d.png](https://i-blog.csdnimg.cn/blog_migrate/1c3c40d0fe72f19b1802dd28cdd89747.png)
当流量到达的时候,系统判断流量满足的定向条件,然后选择合法(满足要求)的定向广告展现给用户,完成一次分配。NGD广告按照竞价方式售卖,分配的目标是使广告系统收益最大化,尽可能挣到更多的钱。GD广告首要目标是保量,同时也需要关心广告效果。所以库存分配的目标包括三部分:NGD广告收益最大化,GD广告保量,广告效果最大化。数学语言描述见下图【3】,在此不进行赘述。
![efbbe831f9fc484871971b3b4d236371.png](https://i-blog.csdnimg.cn/blog_migrate/52fd6b947da485d5c66a4701208fb5be.jpeg)
![981ff093697d930c976d313e8b944c51.png](https://i-blog.csdnimg.cn/blog_migrate/fe5a44515feceb6b692b3eaa736c4f9a.png)
![a196fd07ebf13a5579308130afed52ad.png](https://i-blog.csdnimg.cn/blog_migrate/e83c38298ae35e1dbee7f09a4a7f585f.png)
![6d7070ab98940b24ffb930783e505a9d.png](https://i-blog.csdnimg.cn/blog_migrate/863d8b027f3342ee41c595a592d30e59.jpeg)
![a2d9bb6256fa9999fadfebab8b3544cf.png](https://i-blog.csdnimg.cn/blog_migrate/544e90a316f2b51423a8d70ff43b1f58.jpeg)
上述为流量分配问题的目标,在现实中,还需要考虑实时性,即线上计算部分的时间复杂度不宜太高。下面介绍两种库存分配中常用的算法,包括HWM算法和SHALE算法,其优化目标,均为保GD量,未考虑NGD收益和GD收益(SHALE算法通过合约广告重要程度这一参数部分考虑了GD收益)。
HWM算法
【2】提出一种算法HMW(High Water Mark Algorithm),HMW通过简单的启发算法解决库存分配的问题,算法主要思想是:首先考虑能满足合约的所有流量,流量越少重要程度越高(
如下图【3】算法分为两部分,离线计算合约分配概率
![c833e4088594e7c505184243c5843351.png](https://i-blog.csdnimg.cn/blog_migrate/67c83a0349f140c249c52b058c1ab4ec.jpeg)
能看到,HWM算法需要提前预测每一个用户的流量
HWM算法示例
如图,左侧为到达系统的用户,右侧为广告合约,广告合约来自于三个广告主,分别对应不同的定向条件,且每个合约广告约定了投放量。Supply表示到达系统的用户,他们均有自己的属性和预估流量。图中的连线表示用户满足合约的定向条件。根据算法流程,进行计算,流程如下:
![844dc84d9c957b83d7185d2e10e41837.png](https://i-blog.csdnimg.cn/blog_migrate/281e405d39f99abbce0a280adb8dd097.jpeg)
- 离线部分
(1)首先计算各个合约的所有用户流量值和:
(2)排序,$S_2order_1>order_3$,在进行后续计算时,按照此顺序计算(即优先分配了可分流量较少的广告,满足其流量要求)。
(3)按照分配顺序进行计算,计算各个合约的概率:
![dd290eb36ab81c0bc13c46c124ee10f9.png](https://i-blog.csdnimg.cn/blog_migrate/11289b3abb5adaa9fed0ed0503724f28.jpeg)
(4)如图,对于合约按照顺序计算其分配概率:
首先,对于合约2,根据
解得
同理,对于合约1,利用合约2计算完的剩余流量(表格中的第三小列),计算
同理,对于合约3,利用合约1计算完的剩余流量(表格中的第五小列),计算
- 在线部分
用户4到达时,
思考:可以看到,整个算法的对流量预估敏感,文献【3】通过调整
SHALE算法及其推导
首先定义SHALE的优化目标:
其中,约束1为广告需求约束,约束2为用户流量约束,约束3为非负约束(保证逻辑的正确)。
可以看到,这就是约束条件下的优化问题,分配比例与理想分配比例越近,且投递不足流量越少,则越接近最优结果。利用拉格朗日对偶性,将原始问题(极小极大问题)转换为对偶问题,并且利用KKT条件进行求解。(求解过程见附)
拉格朗日函数:
原始问题和对偶问题的解的充分必要条件是满足KKT条件,即:
根据KKT条件,求解得:
解第一个公式,得
同时,
同时,根据第二个公式,
同时,根据第三个公式,
又因为
整理结果如下:
- 最优解由
得出。
-
,具体地,
-
,具体地,
SHALE算法流程
根据上一节推导结果,文章中利用坐标下降法进行求解,主要进行如下操作:
初始化
初始化所有的
第一步
重复这一步,直到退出
- 对于每一个用户
,求解满足
的
,若小于0或无解,则
- 对于每一个合约
,q求解满足
的
,若大于
或无解,则
第二步
- 初始化
- 对于每一个用户
,求解满足
的
,若小于0或无解,则
- 对于每一个合约
,用HWM中方法分配顺序队列,然后:
a. 寻找满足的
,若无解,则
b. 对于每一个满足合约的用户
,更新
输出
对于每一个合约
在线分配
当流量到来时,根据合约的输出
- 设置
,计算
:
- 对于所有的合约,按照分配顺序,计算
,更新
- 挑选合约
完成分配
在第一步中,通过假设
参考文献
- Bharadwaj V , Chen P , Ma W , et al. SHALE: An Efficient Algorithm for Allocation of Guaranteed Display Advertising[J]. 2012.
- Chen P , Ma W , Mandalapu S , et al. Ad Serving Using a Compact Allocation Plan[J]. 2012.
- 张亚东《在线广告 互联网广告系统的架构和算法》
- https://mp.weixin.qq.com/s/2VejGdsZrCxB8pD1y7Bqhg