http://bbs.zoomla.cn/showtopic-3765.aspx###
搜索引擎是如何最大化关键字广告收益的
通过什么样的规则来安排哪个广告给哪个关键字,才能最大化当天的收益呢?此问题可以抽象成“On-line带权二部图最大匹配问题”。
Google的AdWords,或者其他搜索引擎的关键定广告,使用的基本都是“关键字竞价”(或者称“关键字拍卖”)的机制,对每个用户搜索的关键定,挑选为它竞价的广告来显示。
用户搜索的关键字到达搜索引擎次序无法预知,每个竞价者为一个关键字出的价钱也千差万别,竞价者还会对每天的花费总额有一个封顶的预算,超过了这个预算,即使有合适的关键字,竞价者也不希望为它多花钱了。
搜索引擎们是通过什么样的规则来安排哪个广告给哪个关键字,以最大的化当天的收益的呢?
此问题表述为:
有N个关键字竞价者,每个竞价者永定了一个当天最大预算bi.
Q是一个关键字的集合。
每个竞价者i对一个关键字q∈Q,指定一个出价c光ciq.
竞价开始后,关键字序列q1,q2….qM(qj∈Q)实时到达,每个qj必须实时分配给某个竞价者i的广告以赚取收益ciqj。
问题的目标是:在满足竞价者对关键字匹配要求的基础上,使当天总大。
按照常识,可能会有这样的猜想:是不是只要在关键字到来时,选择对此关键字出价最高的广告显示,就可以达成当天收益的最大化?
这样的算法被称为贪婪算法,,本主第5节我们会看到,使用贪婪算法,当天的收益可能仅为理论最大化收益的一半。
要解决此问题,本文先由简单的模型:二部图最大匹配问题开始介绍,在第4节抽象出与该竞价问题完全相同的模型:On-line带权二部图最大匹配问题。
此模型,本文提供了3种解决方法,将重点介绍Google员工提到的折中算法。
此折中算法的最优化结果,在搜索引擎“仅在广告被用户click的情况下才有收益”的假设下,依然可以达到Competitive Ratio下限为1-1/e(第3节会详细解释什么是Competitive Ratio).
本文的第6节会在了解此算法的基础上,对实际广告竞价进行简单模似,以给使用竞价服务的广告主提供参考。
1.二部图最大匹配
二部图(Bipartite Graph)又称作二分图,是图论中的一种特殊模型。设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二部图。
典型的例子,如《相约星期六》的男嘉宾和女嘉宾,就可以组成一个二部图。(今天的中国,《相约星期六》这样的节目还不支持男男配和女女配,因此“每条边依附的两个顶点都分属两个不同的子集”可以完全满足。)
二部图的最大匹配,是指找到一个子集M,使M的边集[E]中的任意两条边都不依附于同一个顶点,并且这样的边数最大。
再拿《相约星期六》举例:
由例 1 看出,求一个图最大的匹配的一种简单算法是:先找出全部匹配,然后保留匹配数最多的。但是这个法的时间复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。
在 1955 年, Harold Kuhn 在两位匈牙利数学家 Denes Konig 和 Jeno Egervary 的研究基础上,提出匈牙利算法( Hungarian Algorithm ) , 通过找增广路径( Augment Path ) , 并将之取反后加到原匹配中的方法,得出最大匹配模型。
图1 例1附图
目前匈牙利算法是二部图最大匹配问题的最有效解法,其详细步骤可参见 http://tinyurl.com/HungerianAlgorithm , 本文不再赘述。
二部图匹配问题虽然应用广泛,甚至应用在图像识别领域,但它是怎么与“竞价排名”最优化联系起来的呢?这就要使用复杂一点点的带权二部图最大匹配模型。
2.带权二部图最大匹配
带权二部图 , 是指二部图中连接每个顶点的边 , 都有一个权值 .
设想以下二部图 : 顶点子集 U 包含所有软件部员工 , 子集 V 包含软件部要完全的工作 , 某个员工完成某项工作的效益为 C ( 权值 ), 每个 C 都不一定相等 . 些二部图为带权二部图 .
带权二部图的最大匹配问题 , 是指找到一个匹配 , 使二部图总的权值和最大 ( 或最小 ). 用上文软件部员工的例子 , 就是要求出如何分配员工工作 , 使总的工作效益最大 .
我们来看 , 此问题已经与广告的关键字竞价排名非常相似了 ( 后文会详细说明为什么不是 ” 完全一致 ”):
计算一个带权二部图的最大匹配,可以像例 1 那样,使用究举法。同样,其时间复杂度非常高,为 O ( n! )。我们同样需要一个高效的算法。
1975 年, James Munkres 提出了 KM 算法( Kuhn-Munkres Algorithm ),通过逐次调整每个顶点可行顶标的方法,将计算最大匹配的时间复杂度降到 O(n3).KM 算法的详细步骤和 C++ 源码请参阅 http://tinyurl.com/KMAlgorithm.
KM 算法还有一些扩展应用,例如计算如何使带权二部图总权的积最大,(不是和最大),可参考 http://www.byvoid.com/blog/match-km/ .
根据本节的例子, KM 算法看来是解决如何最大化搜索引擎收益的出路了。但是在实际应用中,工程师们发现了一个更加复杂的问题:
用户的搜索关键字,到达的次序是不可预知的。而且每个关键字,在到达时必须至少分配一个广告来响应,而且这种分配不可逆转。
解决这个问题。需要先了解 On-line/Off-line 的问题。
3.On-line/Off-line 问题的区别与研究
二部图匹配的 On-line 问题,是指具有两个条件限制的二部图最大匹配问题:
1. 顶点、和顶点需要匹配的属性,到达次序是不可预知的。
2. 在指定两个顶点之间的匹配关系后,此匹配操作不可撤销、不可逆转。
满足这两个条件的相反情况的二部图最大匹配问题,即为 Off-line 问题。
On-line 二部图,由于在求最优解的时候缺少对“全局”的把握,把握,无法预知增广路径,因此不但 KM 算法不适用,就连其“最优解”(实际上是最倒三角的近似解)的权值和也总是小于(或等于) Off-line Solution 下的权值和。
图2 例2附图
我们使用贪婪算法,为关键字分配广告,作为实例来看一下为什么会小于等于:
经过研究发现, On-line 问题的近似最大收益 C(Online) 与使用相同参数 Off-line 问题的最大收益 C(Offline) 总是满足如下等式:
式中,b为常数,c被称为Competitive Ratio.
可以通过简单的证明,得出在使用贪婪算法时,Competitive Ratio 的下限是1/2。换言之,即使使用贪婪算法,On-line问题优化以后的“最大收益”,可能只是实际最大收益的一半左右。
Copetitive Ratio 在其他On-line 优化问题中也存在,如K服务器问题(K-Sever Problem)、Steiner Tree(斯坦纳树)。其出现的原因主要有两点:
1. 未来的输入参数不可预期,因此可能“有敌意”的“对手”输入先出现,阻扰了最优解的产生。
2. 最优的计算如果需要累进获得,就有可能在安排输入元素需求的时候,无法兼顾“累进的最大值”和“节点的需求”,从而阻扰了阳台优解的产生。
图3 例3附图
4.On-line 带权二部图最大匹配算法
贪婪算法如些的不争气,让工程师们开始研究其他的算法。有趣的是,他们发现,即使使用完全随机分配广告关键定的做法, Competitive Ratio 的下限也能达到 1/2+O(log n/n) 。
终于, 1990 年,加州大学伯克莱分校的 Karp 和校友 Umesh Vzairani, 以及康耐尔大学的 Vijay Vazirani, 一起提出了 RANKING 算法,使 Competitive Ratio 的下限提高到了 1-1/e 。( e 是自然对数的底数)。这个比率比“贪婪算法”的效果提高了大约 12 个百分点。该篇论文以“ An Optimal Algorithm for On-line Bipartite Matching” 为题发表在 ACM 的官方网站上,有兴趣的读者可以自行下载阅读,本文不作重点介绍。
我们持续变换的世界再次给我们的算法研究工程师发出了挑战:我们的广告投放者希望能设置自己当天的最高预算,在此安排用尽之后,即使再有合适的关键字到来,我也不希望再安排我 护旗地显示了。 Kalyanasundaram 和 Pruhs 在 2000 年,提出并解决了这个 On-line b-matching 问题:每个广告主每日最高预算设定为 b ,他们给每个关键字出价为 0 或 1. 他们的算法, BALANCE 算法,把每个到来的关键字分配给当日预算余额还剩下最多的那个对此关键字感兴趣的广告。最终他们证明了,当预算 b 趋向于无穷大时, Competitive Ratio 的下限也是 1-1/e.
5.Google的算法
2007 年 8 月 ,Google 的员工 Aranyak Mehta 与斯坦福大学的 Amin Saberi ,以及当初提出 RANKING 算法的两个 Vazirani (此时的 Vijay Vazirani 已经进入了乔治亚理大大学),在 BALANCE 算法的基础上,结合 Flactor-Revealing 线性规划方法,共同提出 了他们自己的折中。 该算法的关键是:在关键字出价和未使用预算余额(比例)之间,找到一个最佳的平衡点。
该算法的具体描述为:
细心的读者可能发现,在例 3 中,我们假设“每个广告仅出现一次”的原因是“基于内容丰富性考量”。这确实是一个合理的考量,同一个广告如果 在 1 分钟内反复出现,这将成为信息轰炸,使广告的效应大打折扣,但是同样,我们假设这样一种情况:每个广告在此出价后,它的所剩余余额都将全部用完发。换言之,可以将这次匹配视为该广告的最后匹配机会。这样的考量同样也能得到“每个广告仅出现一次”的限定条件。
但是,该算法不会仅限广泛应用于“在预算快用完”,或者 { 每个广告只能出现一次的情况。折中算法对以下情况均适用:
1. 广告竞价者各自有不同的当天总预算。
2. 本次最佳匹配并不会用完广告竞价者的所有当天总预算余额。
3. 广告竞价者可以在不同的时期加入游戏,提出 竞价。
4. 每一个关键字可以匹配 n(n>1) 个广告,使 n 个广告同时出现。(只需在关键字到来时选择 V 值最高的 n 个广告显示即可, V 越高排位越前。)、
5. 每个竞价者只在有用户点击他的广告后才产生费用。
最后一点非常重要,无论是 Google 百度的竞价广告,广告主只有在有用户真正点击广告链接 后才记一次成功出价。这个我是使得搜索引擎提供的广告比传统广告性价比更高的最根本原因。
要实现这一点上的最优匹配,需要在原算法上做一个小补充:
即使在以上 5 点状况下,使用了该算法后, Competitive Ratio 的下限也能达到 1-1/e 。(证明略,有兴趣的读者可以 email 笔者索要证明方法。)虽然性能上比 BALANCE 算法并没有任何提升,但是毕竟,此折中算法提供的实现方案,其实用价值高多了。
6.广告关键字竞价者的一些参考
基于第 5 节的公式 ,笔者模拟了一些数据。最后一列的 V 值越大,越容易赢得展示的机会(此处不考虑关键字的主义匹配程度)。
表1 基于第5节公式得数据模拟
竞价者 | 关键字出价 | 当日已使用金额 | 当日总预算 | CTR | V |
A | ¥1.00 | ¥10.00 | ¥100.00 | 50% | 0.29671517 |
B | ¥1.00 | ¥30.00 | ¥100.00 | 50% | 0.251707348 |
C | ¥3.00 | ¥10.00 | ¥100.00 | 50% | 0.89014551 |
D | ¥3.00 | ¥66.00 | ¥100.00 | 50% | 0.432344516 |
E | ¥1.50 | ¥10.00 | ¥100.00 | 50% | 0.445072755 |
F | ¥0.10 | ¥0.10 | ¥1,000.00 | 50% | 0.031604188 |
G | ¥2.00 | ¥2.00 | ¥100.00 | 50% | 0.624688901 |
H | ¥1.00 | ¥10.00 | ¥100.00 | 80% | 0.474744272 |
能地神仙既有丹青术年纪表数据,可以得出以下几个结论
1.比较竞价者A和B,可以看出:在相同关键字出价的情况 下,当日预算余额多的广告优先得到展示的机会。(此点可以理解为:之前花多了这次就先帮你省着点吧,万一一会儿还要再用你钱呢。)
2.比较竞价者A和C,可以看出:在当日预算所剩比例相同的情况下,关键字出价高的广告优先得到展示机会。
3.比较竞价者D和G,可以看出:即使关键字出价低(不能太低,参照 结论4),只要当日预算的余额足够大,还是有希望打败关键字出价高的广告赢得优先展示的机会。
4.比较竞价者F和B,可以看出:在当日预算所剩比例即使相关再悬殊(3000倍),关键字出价高(10倍)还是更容易 赢得广告优先展示的机会。
5.比较竞价者A和H,可以看出:其他变量保持不变的情况下,广告历史的CTR数据决定是否再次被 展示的决定性因素。
6.比较竞价者E和H,可以看出:即使关键字出价不如别人,广告的历史CTR表现也会为自己赢得更好的被 展示的机会。(基金经理总是喜欢说:该基金的历史表现不代表它的今后表现,在Google看来可能不是那么回事。)
参考资料
1.Aranyak Mehta,Amin Saberi,Umesh Vazirani,Vijay Vazirani,R 2007.Adwords and Generalized On-line Matching
2.Alexa Sharp .Thoughts on the Competitive Ratio
3.Richard M.Karp. Umesh V.Vazirani.Vijay V.Vazirani,R1990.An Optimal Algorithm for On-line Bipartite matching
4.Wei,Shih-Yi.On-line Problem
5.佚名. Bipartite Graph.ppt.