本文接上篇,继续谈谈AB测试。
AB测试之前,大家都会选定若干关键指标作为核心被测指标,来对比两个测试集之间的效果差异。这里常见的一个错误是,所选择的判定指标较为片面,不能正确全面体现方案效果,得出错误结论。
下面我们来看一个实际案例。
在中国的电商应用中,大家可能已经非常熟悉把购物车用做收藏夹,把有可能会购买的商品放进购物车,在最后结算时勾选本次要买的商品进入结算流程,剩下的则继续收藏在购物车里,留在以后下单。真正的收藏夹反而使用较少,或用来收藏店铺或重度复购商品。
亚马逊的购物车逻辑有所不同。它更类似用户在超市中实际推的购物车,在最后结算时,必须要从购物车中移除所有本次不购买的商品,然后把购物车所有商品一起结算。如果不想直接删除,可以移入收藏夹。

京东购物车

亚马逊老版购物车
前者在中国用户这里工作得很好,而后者则在亚马逊全世界用户那里都工作得很好,除了中国。两者可能没有绝对的好坏之分,都是用户习惯培养的问题,只是两边培养的用户习惯不太一样。
那么问题来了,亚马逊中国的app该怎么办?我看到很多用户反馈,表示亚马逊购物车和大家习惯的不一样,会买错东西,很不方便,等等。这个问题由来已久,两年前亚马逊购物车团队也曾上线过类似中国购物车的部分结算版本(称为Partial Checkout),但经过AB测试验证,Partial Checkout版本以销售额作为对比指标,在为期一个月的AB测试中输给了原来的版本,因此该版本最终被回滚。
这是一个有些意外的结果,我们做了跟进分析,得到如下结论:
1. 用户习惯尚未形成时,刚接触全部结算版本购物车的新用户,有可能把一些本来没打算当次购买的商品纳入订单,也就是说,一不小心多买了。如果只是简单地以销售额来衡量,全部结算的老版本反而占到了优势。
2. 一不小心多买了的用户,事后发现时有一部分人会选择退货,由此造成了退货率的提升。同时,用户满意度会受到影响。但因为不是所有人都会退货,老版本销售额显得更高。
3. 部分结算版本购物车,用户可以保留不立即结算的商品,因此这些在购物车中保留的商品具有未来潜在的销售机会。而全部结算版本购物车,数据表明,大约有40%的用户会把不结算商品移入收藏夹,其余用户则会直接删除。这一定程度地损失了这些商品的后续销售机会。然而,后续销售会有一个时间后置,未来的损失不会在为期一个月的AB测试阶段被捕获。
通过以上分析我们看到,这个购物车的改动直接影响到四个因素:直接销售、未来潜在销售、退货率、用户满意度。此外,由于操作步骤更加复杂(必须删除不结算商品),导致结算步骤可能有更高的跳失率。在前次的AB测试中,测试指标只考虑了直接销售因素,由此得出了可能比较片面的结论。
不过想要全面衡量上述指标,难点在于:
1,未来潜在销售无法拉取未来数据,除非做一个历时较长的AB测试,但即使时长覆盖多个用户平均下单周期,也无法准确衡量全部未来销售影响。后面的文章里我会介绍一个非常有价值的概念:DSI(Down Stream Impact),对计算长期价值有一定帮助。
2,用户满意度是一个综合性指标,同时受到非常多因素的影响,此外它的获取方式也很不同于AB测试的功能投放,较难直接剥离出来纳入AB测试结果的综合分析。
在综合考量后,产品团队再次推动部分结算版本的购物车,并在新一轮的考量更全面的指标后,该版本赢得了AB测试,获得了0.34%的综合销售提升和0.66%的下单频度提升,最终得以成功上线。
以上案例说明,在进行AB测试时应当根据被测功能的综合价值,对考量指标做一个全面分析,考虑多维度价值,以及中长期影响,做出一个更为全面和长远的决策。
在后续的实战中,我们也把观测指标做出了更为复杂的定义,分为核心判定指标,辅助观察指标,以及否决指标。例如,导购功能做AB测试时,以商详页浏览数作为核心判定指标,以转化率、用户获取能力作为辅助观察指标,以销售额作为否决指标。只要商详页浏览数有明显的增长,或者转化率、用户获取数有较好增长但商详页浏览数不为负,就可以作为上线候选,最后校验销售额,如果销售额下降,就一票否决,否则可以全面上线。
有时我们想要同时测试多个因素,或者测试本身受到很多因素的同时影响,比如,我前面有一篇文章想要测试一下“标题党”玩儿法带来的阅读量波动。阅读量虽然与标题强相关,但也与我的发文日期在工作日还是周末、发文时间点是早晨还是傍晚都有较大关系。最终那篇“标题党”文章是在周日早上8点左右发出,最后我观察到有较大的阅读量提升。
那么问题来了,这个提升,到底是因为标题吸引人带来的?还是因为周日大家有闲暇时间阅读带来的?还是因为早上是个黄金时间带来的?
在这个例子里,上述三个主要因素共同构成影响,因此如果想要做最客观的测试,就应该对任何一个因素选两个差异最大的情况,进行排列组合,3^2=8,因此把测试集8等分,做等量的投放,由此可以看到每个因素带来的影响量。
人工做这样的流量切分和差异化投放比较难,最好能够有系统层面的支持,把多个要做AB测试的功能独立叠加上去,并且制定每个AB测试的时间段,让系统在时间范围内自动对流量做随机切分和功能投放,以获取相对准确对结果。
亚马逊的Weblab系统可以很好地支持这样的多参数AB测试,但如果没有这样的自动测试平台,那么通过人工方式选取流量和投放也是可行的,但一定要垂直正交地做流量拆分,让除被测因素以外的其它因素都互不干扰。换句话说,在两个被测分支A和B上,除单一的测试因素外,所有其它因素都完全对等。
假设我们在做一个转化效果的功能测试,当历时四周的AB测试终于完成了,对比两边数据,发现投放了设计一的A分支比投放了设计二的B分支多销售了1%,那么,我们可以结论设计一的转化会更优于设计二吗?
您猜对了,不能!很多原因都会造成AB测试的错误。
上述案例我们很容易作出结论-设计一更好。但当产品经理深入观察数据时,比如,拆分到具体每一天去看数据趋势,也许会发现,在大部分的日子里,版本二表现更加优异,只是有少数日子,版本一的样本**现了大订单(偶然事件),极大影响了总体数据,最后造成了版本一胜出。这样我们不难推测,如果除去这类偶然事件,版本二实际上更好。
此类偶然因素本身不可避免,但它会对结果造成致命的影响,导致AB测试的结果出现偏差。消除的方法有多种:
1. 取更大的数据样本,或者把测试运行更长的时间。通过数据结果样本的大幅增加来减少偶然因素带来的影响。
2. 设置置信阈值,除去超出置信阈值的数据。例如,一个生鲜电商平台的订单通常在几十到几百元,那么万元以上的大单,往往十分偶然和蹊跷,或者不出自普通消费者,甚至是刷单结果,应当从结果中除去。
3. 对测试结果数据进行对数处理(取log)。这是一种消除随机结果中的“毛刺”,把结果波动变得平滑,但又可以保留结果的波动特性的有效数学手段。对该方法感兴趣对朋友可以进一步看一下相关数学或者信号处理理论。
除了对上述偶然性的理解和处理,另外有一个因素也是在做AB测试的流量投放测试中必须要慎重考虑的,那就是投放对象和被测因素的相关性。例如,运营测“排行榜”频道的入口文案效果,如果投放的人群是纯精准型人群(典型行为是,绝大多数浏览的商品是通过搜索到达的),由于这些人群基本不会浏览和使用“排行榜”频道,那测试结果其实都是随机噪声,并没有实际意义。
在亚马逊的系统中有一个非常实用的概念,就是对每一个AB测试结果,系统都会给出一个置信度数值,称之为P-Value。这个值代表着结果的不确定性。例如,如果P-Value=0.05,意味着如果系统说A比B好,那么只有5%的情况会出现相反的结果。对于P-Value产生影响的主要是:1)数据样本不足;2)结果中的大偶然因素;3)A和B的对比因素(即被测因素)对于目标指标的影响差异过于微小。
虽然大家所使用的平台未必有类似的功能,但带着统计学观点进行AB测试的设计和结果观察,会对透彻理解测试结果和作出正确决策非常有帮助。
最后要说的一点是,数据是用来验证猜想,反映客观事实的。但数据只是工具,也会被人断章取义。我们有时会看到为了让结果看起来很美而做AB测试造假的项目。例如,某功能对10%的用户有正向结果,对90%的用户有负面影响,于是这10%的用户被刻意选择作为测试范围,然后用测试数据欢呼该功能具有“高价值”(当然也有在测试指标的选取、测试时长定义上玩儿花样)。这背后,也需要职业操守,领导者最好能具备一定的AB测试知识,才不容易被蒙蔽。
到这里,我对AB测试的实战经验分享告一段落。做一个简单总结,
1. 对产品或运营方案的优劣不要想当然,有条件的话尽量用AB测试做客观的验证。
2. 充分考虑用户习惯有个变化过程,对升级优化的功能,尽量在还没有形成习惯的新用户身上进行投放测试。
3. 要充分意识到AB测试的偶然性,尽量保证用足够大的数据样本和合理时长的测试来取得客观的结果。同时要带着“置信度”概念看待测试结果。
4. 在测试变量的投放中,要做到除了单一被测变量,在AB数据集的所有其它因素都完全对等。
5. 可以使用阈值筛查,取对数做平滑处理等方法消除测试结果“毛刺”。
6. 充分考虑对被测指标可能存在多个主要影响因素,尽量做最全面的测试来作出全局正确的判定。也可以把多个数据指标按主、辅、否决器组合使用。
评论(0)