Facebook如何判断新功能是否提升用户活跃度?

上周和Uber一个面试官聊天,ta说最喜欢的问题就是A/B test。为什么?相比于SQL、case等可以通过提前做题准备的题目,A/B测试的很多操作基本上只有工作中做过才知道。所以,A/B测试的问题可以更有效的筛掉那些简历写的很好看却没有相关经历的面试者。用A/B测试的话来说,问这类问题可以有效降低false positive

 

正好,这两天有朋友问我Facebook的一道A/B测试的面试题,就拿出来跟大家讨论一下。

 

问题如下:

Facebook想测试一个新的产品功能。如何判断这个新功能是否能提升用户活跃?

看图说话。新旧版本的唯一区别是:旧版本中,某一个post下面的所有comment都是靠左对齐;新版本中,对同一个comment的所有回复会向右缩进

 

从产品的角度,我们容易做出如下假设:

新版本中“对话”的结构更加清晰,提升了用户体验。用户体验的提升,意味着用户活跃度上升。

 

所以,我们如何设计一个A/B测试,去验证我们的假设是否成立?

 

首先,我们来回顾一下A/B测试设计的四步框架。

 

 

1.

A/B Testing四步框架

 

一,确定实验的样本单位 (unit of diversion)

 

做A/B实验,我们首先要搞清楚,如何定义实验的样本。

 

最常用的样本单位是用户(user)。处理方法很简单,就是给每个用户取一个随机分配的学号(例如,00401014),然后规定:尾号为5的同学,你是实验组,尾号为8的同学,你是对照组。

source: smartinsights.com

source: smartinsights.com

二,选定实验观测指标 (metric of measurement)

 

知道了样本是什么,我们接下来需要定义一个指标,来对每个样本进行观测。

 

对于Facebook这道面试题,我们可以选取任何描述“用户活跃”的数字当成指标。比如,用户日均回复数量,用户回复率等等。

 

在面试中,最好能多给几个指标进行备选。

 

三,确定实验运行周期 (duration)

 

我们的实验需要跑多少天?一个实验不能跑半年,因为一年下来也做不了几次实验;实验也不能跑的太短,因为产品往往具有周期性。

 

如何判断产品的周期性?最简单的方法就是把用户的使用频率按天画个时间序列。比较下面两种不同的产品:

 

Facebook用户每天都会大量使用,一周7天都没有显著区别。所以,Facebook的产品周期是以天为单位。(注意,数据是假的)

UberEats使用的高峰在周1到周4。这很有可能是因为该产品的主力用户在SF城里上班,平时没工夫吃饭只能点外卖,但一到周末都出去下馆子了。也就是说,用户在周中和周末的行为是不一样的。所以,UberEats的产品应该以周为单位。如果实验只运行3天,显然无法确保实验能够考虑到周中和周末两种情况。

 

四,确定实验所需样本数量 (sample size)

 

现在我们知道了实验的需要跑多少天,但我们仍然不知道每天需要选取多少个样本。理论上我们可以证明,样本数量越大越好。所以,最理想的做法当然是实验组、对照组各选取所有用户的50%。但是在实际操作中,我们往往并不能这么做。原因有两个:

 

一旦出错,风险太大。假设50%的用户都被分进了实验组。实验跑了2天,工程师突然发现写了个bug,这个bug导致实验组的用户无法登陆Facebook。然后,就没有然后了...

 

浪费资源。像Google、Facebook这种公司,对产品迭代的速率要求很快,每个月怎么也得跑100个实验吧。如果在每个实验中,都有50%的用户被选进实验组,这也就意味着大量用户会同时被选进不同的实验组。这会造成不同实验的数据互相污染,从而极大的增加数据分析的难度。

 

所以,到底怎么算这个样本数量?我们需要用到power anlaysis的方法。

 

以上就是一个A/B Testing的基本框架。这个框架比较简单,大家应该也比较熟悉了。但是具体在面试中,回答这道Facebook面试题的每一步都会遇到陷阱... 

 

2.

A/B Testing面试陷阱

 

今天只讲一个最重要的:选择样本单位(unit of diversion)

 

为了便于理解,我们进行一个思维实验:

 

Facebook一共只有两个用户:胖子和瘦子。巧的是,胖子和瘦子还是好朋友。

 

在我们的实验里,瘦子被分进了实验组(看到的是新界面),胖子被分进了对照组(看到的旧界面)。

如果我们的假定成立,那么瘦子会比以前更加积极的回复。观察数据,我们发现:瘦子以前平均每天回复10条,现在平均每天回复15条。换句话说:实验组的用户活跃度上升50%。

 

很快,胖子看到了瘦子回复频率变高,非常感动,也更积极的参与到对话之中。于是,胖子的回复率也上升了 - 以前平均每天回复8条,现在平均每天回复12条。换句话说:对照组的用户活跃度也上升50%。

 

对比下来,我们发现实验组和对照组并没有区别!

 

这个结论是不合理的。

 

很显然,瘦子(实验组)回复变多是因为产品做的好;但胖子(对照组)回复变多,纯粹是因为瘦子回复变多,并不是因为对照组的产品本身有多好。

 

立刻上升到理论的高度,我们可以引出选取样本的一个重要原则:

 

样本互相独立。概率上来讲,样本A的行为,和样本B的行为不应该有任何关系。

 

上面分析的那种情况,我们无法100%保证实验组的人一定不会认识对照组的人。人和人一旦认识,就有可能互相发生关系;于是,样本独立的原则就不满足了。

 

我们把这种产品属性叫做网络效应(network effect),简单理解,就是整个用户群体的行为在局部范围内互相影响。社交类产品比如Facebook,平台类产品比如Uber都有网络效应。

 

不同的产品,也会有不同的网络效应:

  • Facebook用户和用户之间正向影响(A变大了,B也变大),实验组和对照组的对比结果会比真实的差别要小(under estimate)。

  • Uber:用户和用户之间是逆向影响(乘客A搭的车多了,乘客B搭的车会表少,假设司机数量一定)。这就导致了,实验组和对照组的对比结果会比真实存在的影响要大(over estimate)。

如果你想更加系统地掌握更多有关A/B Testing的门门道道,就订阅由MarTechApe推出的《Media Test & Learn (A/B Testing)》线上课程吧!6节课,系统掌握A/B Testing实验方法和各种你从没料到的讲究与细节,让你在工作与面试中都更从容!

必备技能Zhen Li