译者 | Jane
审校 | 王楠楠
编辑 | Rachel
Bandit算法(又名:强盗测试)和A / B测试,哪一个效果更好呢?
尽管bandit算法的市场评价呈两极化,但是在特定应用场景中,bandit算法的优势是压倒性的。问题是,到底是哪些特定场景呢?
让我们先从bandit算法的起源和经典的多臂赌博机(N-Armed BanditProblem)问题谈起。
多臂赌博机(N-Armed BanditProblem)问题
多臂赌博机问题是一个经典的思维模型,假想一下如下情形:
你现在身处赌场,面前有许多台单臂(即:单一手杆)老虎机。假设这些单臂老虎机吐钱的概率有所不同,而你的目标是让这些老虎机吐出尽可能多的钱。现在,要求你只能操作其中的一台老虎机,那么你如何在最短的时间内,判断出哪一台老虎机吐钱率最高,从而让你收获最大呢?
如果你知道哪个单臂老虎机吐钱率最高,那么你无数次操作这台老虎机即可收获最多金额。这是优化思维的典型解题思路。
正如安德鲁·安德森(Andrew Anderson)在一篇文章中所指出:
“在最理想的状态下,你已经知道了所有老虎机的吐钱率以及每次吐出的金额,所以会调用所有资源去实现利益最大化。然而,现实生活中,我们对每次产出结果是未知,但又渴望实现利益最大化。”
A / B测试与bandit算法的区别
A / B测试原理如下图所示:
你随机将一半数据放入对照组,另一半放入实验组,反复测试后,获得使实验组效果明显优于对照组的影响因素。
从探索到应用
在统计学上,A / B测试包括一段短时间的探索性测试,在这个阶段,你会随机分配给A组和B组相同数量的用户。下一个阶段,是较长的应用阶段,你会把所有用户归入测试效果更好的组中。
这种网站优化场景,存在两个问题
- 从测试直接跳至应用,缺少中间的过渡阶段
- 测试阶段试错成本较高,容易造成资源浪费
而bandit算法和A/B测试的本质差别,就体现在对上述两个问题的解决方案上。
正如刚刚讨论的,A / B测试采用先测试,选出最佳方案后再进行应用的策略。
Bandit算法则不对测试和应用阶段进行明确的区分,而是将两者同步进行,动态调优。
因此,bandit算法可以最大限度地降低机会成本(即:玩家每次操作老虎机的实际收益和最理想收益之间的差异)。
对此,马特格·什霍夫(Matt Gershoff)表示:
“Bandit算法的本质是在学习过程中,逐渐获得最大收益。你必须先掌握一套适用的方法,然后才能在应用中获得最大收益。这正是bandit算法强调机会成本的算法逻辑的优势所在。“
克里斯·士多夫(Chris Stucchio)表示:
“相较于A/B测试,bandit算法更适用于典型的测试-应用问题。Bandit算法的核心是尽可能避免低回报投机。目前主流的 bandit算法(除对抗式,雅各布扩散式,和一些跳跃性bandit算法)都是建立在以下几个假设的基础上的:
a)转化率不具备时效性,即:不会随时间变化而变化
b)转化率会随任何因素的变化而立刻产生波动。这种假设否定了下面这个例子的可能性:访客A在12:00做出的行为,会延迟到访客B在12:01做出的行为后,在12:02产生转化。
c)样本间彼此独立,不互相影响。
不同于bandit算法,A / B测试完全没有考虑上述这些情况。A/B测试不会考虑测试时间不同对测试结果可能产生的影响。例如,A/B测试不会关心在周一和周六进行测试的区别,只要确保测试周期足够长,并且测试集和预测集是在同一天执行即可。”
由于bandit算法和A/B测试的本质不同,因此适用场景也不尽相同,所以也无法简单评判哪种算法更好。
Bandit算法优势
在讨论bandit究竟适用于什么应用场景前,让我们先弄清楚bandit算法的优势。
Google内容实验中就基于以下考虑,选择了bandit算法。
“Bandit更加高效,因此该算法趋于实时调优达到最佳选择,而非等到实验完成后的最终结果再进行策略调整。Bandit算法处理数据的速度更快,因为它会先明确哪些是低回报选项,用排除法将剩余的精力集中在较高回报的选项中间。”
马特·格什霍夫(Matt Gershoff)在他的公司博客中列出了bandit算法的三个主要优势。
- 在学习过程中,逐渐获得最大收益。Bandit算法帮助我们考虑试错成本,从而有效规避成本损耗。
- 自动化程度高。Bandit算法基于机器学习完成最佳选项的筛选。
- 灵活度高。Bandit算法可以实时判定‘较差选项’进行排除,从而有效减少误判的可能性。
简单来说,bandit算法具有测试-应用效果佳,高效,低人工成本的优势。
几个Bandit算法的应用实例
Bandit算法有很多分支。然而,这些分支间差异其实很小,过分关注,反而舍本逐末。目前,主流bandit算法是Epsilon-Greedy算法。
Epsilon-Greedy算法
“在实际应用中,经反复验证,Epsilon-Greedy算法表现最佳。该算法会基于对老虎机的每次操作,记录所得收益,最佳选择判定的正确率高达90%。“
由于对最高收益的命中率高,该算法别名‘贪婪算法’。然而这并不排除Epsilon-Greedy算法在极个别情况下容易产生误判的可能性。
Epsilon-greedy算法的核心是实时测试和应用:
测试:随机选择一定百分比的数据(比如说20%)
应用:只选取当前收益最佳的前,比如说80%,选项
下图很清晰的解释了Epsilon-Greedy算法的原理:
Epsilon-Greedy算法的优点包括:
- 简单易操作
- 准确率高
- 不受季节性因素干扰
Epsilon-Greedy算法的缺点包括:
- 没有将方差作为衡量指标
- 不会根据测试结果的提升,而逐步减少试错次数
其它bandit算法
其它bandit算法分支(比如下述几种)对Epsilion-Greedy算法的弊端,进行了有效规避,比如:
- 最大置信区(UCB)
- 汤普森抽样(Thompson sampling)
- 贝叶斯bandit算法(Bayesian bandits)
简单来说,这些算法都是在测试(即:试错学习)和应用(即:检验学习效果)间,尽可能达到平衡。
对此,马特·格什霍夫(Matt Gershoff)给出了以下结论:
“如同对A/B测试中的Bayesian与Frequentist分支孰优孰劣的争论一样,对不同bandit算法分支的辩论,纯属舍本逐末。我们对bandit算法的不同分支准确率进行了测试。测试发现,不管哪种bandit分支算法,都应该结合Epsilon-Greedy算法使用,以免过早排除所谓的‘较差选项’。测试中,我们也随机选取了一些数据,用bandit结合A/B测试的算法处理,发现比单纯用bandit算法在准确率上有一定提升。”
什么场景下,bandit算法会明显优于A/B测试?
简单来说,A/B测试更适用于预估某一行为将会带来的收益。根据马特·格什霍夫(Matt Gershoff)的说法,bandit算法则更适用于找出能带来最大收益的那个特定行为。
具体来说,两者适用的测试周期不同。A/B测试侧重长期,而bandit算法侧重短期应用。我们接下来会做具体讨论。
1.短期测试
对于短期测试,bandit算法可以提供充分的应用测试结果,在不断应用中持续调优,正如克里斯·士多奇(Chris Stucchio)所说,“只要是短期测试,不管是什么应用场景,bandit算法都是首选。”
下面是几个使用bandit算法的短期测试应用场景:
A.新闻标题
新闻标题是bandit算法的一个典型应用场景。由于A/B测试选出最佳标题的耗时较长,因此不适用于新闻标题这种重时效性的需求场景。
这种场景中,你可以像克里斯·士多奇(Chris Stucchio)一样,选用贝叶斯bandit算法(Bayesian bandits)。如果你是一名报纸编辑,需求立即给一起谋杀案的报道起个新闻标题,而你仅凭业务经验又难以完成二选一,这时候bandit算法就可以助你一臂之力。
B.短期促销
和新闻标题场景类似,短期促销(尤其是季节性和节日促销)同样注重时效性,因此bandit算法会优于A/B测试。
斯蒂芬·帕夫洛维奇(Stephen Pavlovich)表示:
“A / B测试不适用于短促,比如:电商网站黑色星期五的促销活动。应用bandit算法,可以在选出最佳策略的过程中,不间断地完成引流,获得收益。”
2.长期测试
除了短期测试,bandit算法在长期测试中也有明显优势。
斯蒂芬·帕夫洛维奇(Stephen Pavlovich)表示:
“在长期持续性测试场景中,比如:判断新闻网站播放5则体育资讯的最佳顺序,A / B测试依然处于劣势。雅虎公司在2009年就发表过关于bandit算法在这类内容运营领域中相关应用的论文。”
A. 自定义测试规模
Bandit算法会持续调整最佳引流策略,是一种动态优化的低风险解决方案。
马特格·什霍夫(Matt Gershoff)表示: “Bandit算法支持自定义测试规模。比如你可以选择仅仅测试并优化一个大的架构下某一个细分领域的最优策略。这样既能有效控制测试成本,也能监控测试风险。”
唐·威尔森(Ton Wesseling)表示:“针对高流量页面,bandit算法更优于A/B测试。Bandit算法会针对页面各个部分内容,提供最佳内容优化策略。”
B.广告触达
Bandit算法另一个长期测试的应用场景是广告触达。
马特·格什霍夫(Matt Gershoff)表示:
“优化的核心是解决如何最有效地分配资源。Babdit算法可以通过先解决大众消费者的需求,再处理小众群体的诉求,来达到对资源的合理配置。”
唐·威尔森(Ton Wesseling)表示:
“相较于A/B测试,Bandit算法可以更高效地对营销文案按照不同模块进行优化,从而提升整体文案的阅读体验。”
C.协同优化
Bandit算法可以同时对一个大问题的不同侧重点进行优化。
马特·格什霍夫(Matt Gershoff)表示:
“你可以将强化学习理解成多个bandit算法同时对一个问题的不同侧重点进行优化,从而找到一个对整个问题而言最佳的解决方案。比如说,有的客户会利用bandit算法,同时对公司网站首页和自动客服系统进行优化。基于对客服体系的订单转化率进行优化,bandit算法完成了对公司网站引流能力的优化。这样,通过多个bandit算法协同作业,客户最终完成了其整体优化目标。”
警告:bandit算法的潜在缺点
目前市面上对bandit算法存在微词的论调并非完全耸人听闻,bandit算法确实有其不足之处。
首先,多个bandit算法协同优化的场景在现实中可行性有限。山·娜卡普(Shana Carp)在Growthhackers.com网站上表示:
“除非优化目标明确,否则使用多个bandit算法协同作业,就纯粹是对资源的浪费。多个bandit算法协同需要一个数据科学家,一个基础编程人员,和一个开发人员,总共三倍的人力成本。就算你能找到一个代码基础强大的开发和编程人员,也很难找到一个有同样实力的数据科学家完成配合。”
Bandit算法的第二个劣势,其实严格意义上说也不一定算劣势,就是时效性的问题,即:bandit算法如何处理最佳选项判定的时间成本和收获最佳效果的时效性需求间的矛盾。
克里斯·士多奇(Chris Stucchio)通过一个“星期六/星期二问题”对此进行了分析。比如,你需要从如下两个标题中进行二选一:
- 周一快乐!点击这里开始购物吧。
- 多么美好的一天呀!点击这里开始购物把。
如果使用bandit算法,你会收到如下测试日志:
周一:显示“周一快乐”1000次,产生200次转换。显示“多么美好的一天呀” 1000次,产生100次转换。
周二:显示“周一快乐”1900次,产生100次转换。显示“多么美好的一天呀” 100次,产生10次转换。
周三:显示“周一快乐”1900次,产生100次转换。显示“多么美好的一天呀” 100次,产生10次转换。
周四:显示“周一快乐”1900次,产生100次转换。显示“多么美好的一天呀” 100次,产生10次转换。
即使“周一快乐”转化率越来越差,从最开始的20%跌至5%。但是bandit算法并未因此偏重尝试多显示“多么美好的一天呀”,从而“多么美好的一天呀”转化率非常低。这个问题很难从算法上进行纠正,如果延长测试周期(比如:一个星期)可以有效缓解这个问题。事情上,A/B测试也存在此问题。
克里斯·士多奇(Chris Stucchio)还表示:
“Bandit算法也不太适用于邮件营销场景,因为邮件营销的转化周期通常来说比较长,不符合bandit算法的前提条件。”
结束语
安德鲁·安德森(Andrew Anderson)表示:
“总的来说,bandit算法的优化效果好于A/B测试,但是bandit算法也存在自身的弊端。Bandit算法是完全基于系统性能完成优化策略的。而系统性能的差异性可能导致最终决策的偏差。如果可以保证系统正确理解优化需求并给出结论,那么bandit算法绝对是你的首选,否则贸然使用bandit算法将会适得其反。存在即合理, A/B测试和bandit算法都各有利弊。如果以偏概全,企图只依赖某单一算法完成优化,那必定永远无法达到最佳优化策略。”
综上所述,bandit算法未来很可能在如下领域中得到广泛应用:
- 新闻标题优化和短促策略优化
- 自定义优化规模
- 广告触达
- 协同优化
订阅号-每日尝鲜服务号- 每月精选