【深度】广告流量分配HWM算法

在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。合约广告是提前签好合约的,需要将广告投放给特定人群,投放到期如果投放量不足时会有赔偿。对于这个问题,就需要确定针对不同投放约束的客户,如何分配流量,才能使得收益最大,所以这个问题,本质上是流量分配问题。

1 流量分配问题抽象

流量分配问题,可简化为二部图(bipartite graph),如下图所示, ○ ○ 表示流量供给方的数据节点(不同的人群定向下的流量库存), □ □ 表示流量需求方节点(期望广告投放的特性人群定向的需求),两者之间会有很多的连线,每一条连线都代表供给方节点能支持需求方的定向需求,但不一定会分配。

供需二部图
2 HWM算法

HWM,即 High Water Mark Algorithm,HWM通过简单的启发算法解决库存分配的问题,算法主要思想是:首先考虑能满足合约的所有流量,流量越少重要程度越高更靠前,即更需要提前考虑,然后将流量按照所需量平分,转换为概率。

算法核心步骤如下:
step 1
初始化每个节点的剩余供给量 r i = s i r_i=s_i ri=si

step 2
计算所有符合约定投放量 d j d_j dj定向约束的供给流量和 S j Sj Sj

S j = ∑ i ∈ Γ ( j ) n ( s i ) ( 1 ) S_j=\sum_{i\in\Gamma(j)}^{n} (s_i) (1) Sj=iΓ(j)n(si)1

其中
s i s_i si:为第i节点预估库存量
S j S_j Sj:为满足 j j j定向条件的全部节点库存总量

根据公式(1)计算得

200k(Male): S 1 = 400 + 400 + 100 = 900 S_1=400+400+100=900 S1=400+400+100=900
200k(CA): S 2 = 100 + 100 = 200 S_2=100+100=200 S2=100+100=200
1M(Age=5): S 3 = 400 + 400 + 100 + 100 + 500 + 300 = 1800 S_3=400+400+100+100+500+300=1800 S3=400+400+100+100+500+300=1800

通过计算得出排序: S 2 S_2 S2 S 1 S_1 S1 S 3 S_3 S3,即优先分配可分流量少的广告

step 3
根据①计算的顺序2,1,3,依序计算各个合约的供给比例

∑ i ∈ Γ ( j ) n m i n ( r i , s i a j ) = d j ( 2 ) \sum_{i\in\Gamma(j)}^{n} min(r_i,s_ia_j)=dj(2) iΓ(j)nmin(ri,siaj)=dj2

其中:
Γ ( j ) \Gamma(j) Γ(j):为满足合约 j j j定向条件的所有人群集合
d j d_j dj:为合约 j j j的需求投放量

根据公式(2)计算:
对于2: 200 = m i n ( 100 , 100 a j ) + m i n ( 100 , 100 a j ) 200=min(100,100a_j)+min(100,100a_j) 200=min(100,100aj)+min(100,100aj)
a j = 1 a_j=1 aj=1
对于1: 200 = m i n ( 400 , 400 a j ) + m i n ( 400 , 400 a j ) + m i n ( 0 , 100 a j ) 200=min(400,400a_j)+min(400,400a_j)+min(0,100a_j) 200=min(400,400aj)+min(400,400aj)+min(0,100aj)
a j = 1 4 a_j=\frac{1}{4} aj=41
对于3: 1000 = m i n ( 300 , 400 a j ) + m i n ( 300 , 400 a j ) + m i n ( 0 , 100 a j ) + m i n ( 0 , 100 a j ) + m i n ( 500 , 500 a j ) + m i n ( 300 , 300 a j ) 1000=min(300,400a_j)+min(300,400a_j)+min(0,100a_j)+min(0,100a_j)+min(500,500a_j)+min(300,300a_j) 1000=min(300,400aj)+min(300,400aj)+min(0,100aj)+min(0,100aj)+min(500,500aj)+min(300,300aj)
a j = 5 8 a_j=\frac{5}{8} aj=85

:如果无解,则 a j = 1 a_j=1 aj=1

计算每个预约投放量的同时,要更新供给节点剩余量
r i = r i − m i n ( r i , s i α j ) r_i = r_i − min(r_i, s_iα_j) ri=rimin(ri,siαj)
这样,就可以按照对应比例进行流量分配,且能够保证不同人群定向的投放量。

注:该二部图并不是严格意义上的供给最小互斥散列集合

如上图,这是严格的最小互斥散列供给节点,该图参考【HWM在线分配算法

参考文档
1 HWM算法论文,google学术下载
2 https://chierqj.github.io/hwm-zai-xian-fen-pei-suan-fa/

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值