A/B Testing

一、为什么要做A/B Testing?
A/B Testing用于产品方案的对比,在快速产品迭代的场景下会出现这个需求,使产品不断的演化、升级。为了更好的使用A/B Testing,需要对产品十分熟悉,明确产品需要升级和迭代的方向。

二、A/B Testing的流程
假设只对新版和旧版两个版本做测试(实际中也可以对多个版本同时测试),另外,在提升指标部分,实际中可以确定唯一的提升指标,如仅测试CTR,也可以确定多个提升指标,如CTR和Quantity,但每个因子的显著水平以及实验整体的最小样本量的计算方式会与单一因子有所不同。下图流程中标蓝的为和统计知识比较相关的部分。

A/B Testing流程.png

三、举个栗子
3.1 实验假设及分流
假设我们对广告投放的落地页(landing page)的设计进行改版,把落地页的版式进行调整,调整前的版本为老版本,记做A,调整后的版本为新版本,记做B。我们选定Conversion Rate作为标准,判断B版是否优于A版。

这里我们有两个假设。
H0: ( 原假设,Null Hypothesis) 老版本的效果和新版本一样,即老版本的CR和新版本的一样。这是我们希望通过实验推翻的假设。
H1:(备择假设,Alternative Hypothesis),可以是老版本的效果和新版本的不一样,或者是老版本的效果没有新版本好。

A/BTest就是要验证H0是否正确(这个放到下一步再说)。

另外,上线AB实验时,需要对流量进行分流,这就需要确定分流的依据。实际中需要结合实验的平台(如APP或者PC,以及区分服务端还是客户端),来决定分流依据是什么,如用户的deviceid,或者是登录用户的userId等。

具体分流时,针对新老两个版本的情况,把流量分为4份。B为实验组(新版本)的流量,C和D为控制组的流量(老版本)。B=C+D,即实验组和控制组的流量比例为1:1,而C和D的流量相等,B:C:D=50%:25%:25%。另外,针对一些异常流量以及B、C、D剩下来的流量,由A兜底。

C和D版本的目的是用来做AA检测,保证实验过程中流量是平稳的。在AA检测通过的情况下,再做AB检测。

此处仅为一个实验的例子,如果实际中一个页面有多个实验存在,为保证实验和实验之间互相独立,则需要对实验进行分层,保证实验之间为正交关系,互不影响。具体来说,假设一个页面层的流量有如下6根柱子这么多。如果现在同时要进行3个实验,保证每个用户只稳定的分流到一个实验中去,则需要把流量分为6份,3份黑色的为老版本,3份黄色的为新版本,但是是针对1b, 2b, 3b这三个不同的实验。每个黑色和黄色的柱子就组成了每个实验的老版本和新版本的全部流量。

正交分流示意.png

3.2 假设检验
3.2.1 四种情况
针对新版本是否比老版本好,以及我们是否能检测到,有以下四种情况。

真实情况 真实情况
我们的判断 没区别(H0) 有区别(H1)
没区别 没效果 Type II Error (False Negative) 误判为没效果
有区别 Type I Error (False Positive) 误判为有效果 Statistical Power

表格里代表了四种情况——
(1)实际没区别,我们也判断出来了没区别。这种就不用管了。
(2)实际没区别,但是我们判断错了,我们判断出来有区别。这个就是Type I Error,第一类错误(False positive),误判为有效果。第一类错误发生的概率记做\alpha

实际中我们会非常严格的控制第一类错误发生的概率。因为第一类错误发生可能会带来比较重大的损失。比如一个改版实际没效果,你确认为有效果,投入生产后并不会给公司带来收益,造成资源的浪费。

因此alpha一般都会控制在5%。即我们容忍第一类错误发生的概率是5%。

(3)实际有区别,我们误判为没区别。这个就是Type II Error,第二类错误(False Negative),误判为没有效果。第二类错误发生的概率为\beta\

实际中,我们对这一类错误的容忍程度较高。即便是个有提升的方案,但是我们没有识别出来,也就算了,至少没有直接负面的效果。

\beta\一般取20%。同时降低第一类和第二类错误的概率,就是增加sample数(population都检测完了,当然最准确)

(4)实际有区别,我们也检验出来了有区别。这个叫做statistical power。是指实验有区别的情况下,我们正确检测出来他有区别的概率,反映了检测的能力。举个夸张的例子,如果新版本真的比老版本好,但是我们只有30%的能力检测出来这一点,那这个实验也没有啥用。根据条件概率,statitical power = 1-\beta\。Power与alpha、sample size(主要)和effect size等因素都有关。

3.2.2 假设检验

先说下P值(significance level)。

假设老版本的CR是5%,而新版本的CR是5.5%。

假设H0为真,那么在原有版本的CR分布中,检测到5.5%这个值的概率,即为P值。相在H0为真的前提下,计算CR>=5.5%的概率P(CR>=5.5% | H0 is True)

假设H0是真的,也就是老版本和新版本的效果其实是一样的,那么我们检测到实验结果是5.5%的概率有多大?

这个概率如何计算?

说到这里,再讲一下z-score。z-score=(x-\mu)/\sigma。即观测值距离这个分布的均值,隔了多少个标准差。z-score可正可负,因为观测值可能比均值大,也可能比均值小。用z-score看p-value是多少,就要查表了,或者用R和python计算。

所以,除了知道老版本的CR均值为5%之外,我们还需要计算老版本的方差,还需要知道新版本我们的样本量是多少。加上一些对参数的假设,我们用单边检测,检测到CR为5.5%的概率如下:

z_test <- function(x, mu, s, n, tailed){
  z<-(x-mu)/(s/sqrt(n))
  if(tailed == 1) return (cat('Z-Score - ', z, '\np-value - ', pnorm(-abs(z))))
  if(tailed == 2) return (cat('Z-Score - ', z, '\np-value - ', 2 * pnorm(-abs(z))))
  if(tailed != 1 | tailed != 2) return ('can only be one or two tailed')
}

z_test(0.055, 0.05, 0.05, 100, 1)
#Z-Score -  1 
#p-value -  0.1586553

z_test(0.055, 0.05, 0.05, 1000, 1)
#Z-Score -  3.162278 
#p-value -  0.0007827011

可以看到,对样本量的假设不一致的情况下,得到的结果也是不同的。如果这个概率<=5%(significance level,也就是我们第一类错误的概率),就是说我们只有<=5%的概率才能检测到新版本的CR是5.5%,那么我们就拒绝原假设,接受备择假设。

3.2.3 在实验开始之前——Effect Size & Sample Size
其实在计算p值之前,在开始实验之前,最重要的一步是确定,这个实验要做多久?我们需要多少样本?

我们不能边做实验边看p值,等p值显著了就把实验停止掉。而是要在实验开始之前就确定好实验周期,以及Effect Size,从而计算最小样本量是多少,依据最小样本量及其平时我们每日的流量,计算得到实验周期。

Effect Size是强调差异的程度(或者关系的程度),比如R方就是一种effect size。这里的Effect Size,是指第一个分布和第二个分布的均值相差有多大。不同指标的effect size会非常不同,我们希望的effect size也会不同。以转化率为例,我们希望检验出来的差别至少是0.5%。如果在0.5%以下,假设是提升了0.3%,就算检测出来了,从业务层面来说我们可能也觉得没有意义。

Effect size.png

下图说明了sample size和power的关系,以及effect size和power的关系。这里重点看右边(因为我们希望通过effect size和power来反推sample size)。右边的三个小图,从上到下,effect size从1到2在不断变大,相应的,power(蓝色部分的面积)也在变大,即如果差别越大,检测出来这种差别的能力就越强,这样如果保持power不变,那需要的sample size就越小。

Power & Effect Size.png

四、A/B流程- 重新梳理
A/B Testing中,核心流程如下。在确认主指标和参数之后,可以在网上搜索A/B Test Sample Size Calculator计算最小样本量,或者公司有自己的算法可以套公式计算。然后等实验结束,做好AA检验,保证分流没问题,再做AB检验,看P值结果就可以了。

A/B Testing核心流程.png

参考资料:
非统计专业?5分钟搞懂如何计算A/B测试样本量
P-value From Z-Score Function in R
Power & Effect Size

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 资源来自udacity 1.ab testing不能做的事? 新的实验丢失了一些数据 2.商业案例分析 左边的这个...
    鲸鱼酱375阅读 541评论 0 1
  • 猜猜看,我愛的是你還是他呢?痾..如果可以,我想直接對你做 A/B testing。 A/B testing 的古...
    bettysherlin阅读 464评论 0 0
  • A/B testing 其实就是控制变量法,对比实验。一般谈论的应用是网上线上发布的应用、网页等等 需要做分流,将...
    EatTheRice阅读 312评论 0 0
  • 缺乏明確因果關係,成功案例難以複製 A/B testing 不是萬靈丹,它能回答 A或B版本哪個在你的目標上表現較...
    bettysherlin阅读 327评论 0 1
  • 做多久 做太久可能造成損失,做得不夠久,可能無法確認結果是否真的有意義。 如果目的不是出論文,基於其它商業考量,不...
    bettysherlin阅读 169评论 0 0