专栏首页早起Python数据分析必备技能|正确解读你的AB实验

数据分析必备技能|正确解读你的AB实验

作者|无眠

来源|知乎(已授权)

前言

让我们想象一下,在公司的某产品研发讨论会上……

“这个功能要不要上?”

“我觉得没问题,XX指标肯定能涨一大截。”

“我不这么想,XX指标说不定也会受到影响,你不能只想着可能的收益呀。”

blahblah无限循环争吵中……

“好啦,别吵了,让我们开个AB看一下效果吧。”

当现在越来越多的app都已经日活百万千万,新功能是绝对不敢、也绝无必要轻易上线的。(因为一旦全量上线引起用户反感,损失不可估计。)这个时候,AB实验就成为了大型功能上线前的必备利器——进行小流量的测试,利用测试的效果来预估上线后的效果。

OK,那一个AB实验开启了之后,我们(常常是数据分析师)该怎么评估这个AB实验的效果,给出这个需求到底要不要上线的分析结论呢?这就是本文的重点所在了。

  • 我怎么衡量一个指标是否有显著变化?
  • 当你看到指标显著时:是真的显著吗?
  • 当你看到指标不显著时,是真的不显著吗?
  • 一个合适的AB实验指标判断怎么给出?
  • AB实验相关的面试常见问题

怎样衡量一个指标是否有显著变化

结论:利用p值进行判断,一般来说p值<0.05,认为指标有显著变化。 原因:假设检验的相关知识。

嗯……AB实验就是一种假设检验吗?那假设检验是怎么一回事呢?

这里我举一个公开课里看到的例子。非常生动形象。看看我们在一个实际的Case中,怎么拒绝/接受一个假设的。

背景:神经学家测试一种药物对小老鼠反应时间的影响,给实验组100只小老鼠注释某种药物。神经学家知道,没有注射药物的老鼠平均反应时间是1.2s,注射了药物的老鼠平均反应时间1.05s,样本标准差0.5s。你认为这个药物对于老鼠的反应时间有影响吗?

依照我们上面说的步骤逐步拆解:

我们先假设药物是没有影响的。(H0:药物无影响。ps.此处还有一个备择假设H1:药物有影响)

如果药物没有影响,换句话说,实验组的小鼠在注射药物之后,他们的反应时间均值应该是1.2s。

假设总体小鼠的反应均值就应该是1.2s,那么我们得到的这个样本——平均反应时间1.05s的概率是多大?

求解:

(1)已知总体均值为1.2s ;

(2)已知样本均值为1.05s ,样本标准差0.5s

(3)由于样本量尚可,利用样本标准差估计总体标准差(这部分如果不懂的可以去补一下抽样分布,不详细展开说):0.5/10 = 0.05

(4)计算1.05距离1.2有几个标准差那么远?—— 1.05-1.2/0.05 = 3个

(5)当我们抽出一个样本,它落在距离总体均值1.2三个标准差的地方、甚至更远,概率是多少?——概率是正态分布钟形曲线下,3sigma之外的面积(包括正、负3sigma)。可以通过查正态分布得知,概率是0.3%

(6)事已至此,我们可以得到的结论是:如果接受原假设,药物没作用,出现我们这种抽样结果的概率是——0.003... 我们居然就抽到了??所以,这个时候,虽然不是100%确定,但我们倾向于拒绝原假设(药物无影响),接受备择假设(药物有影响)。

那么,当我们做一个实验时,判断feature是否有用,我们的思路是这样的:

当我有足够大的样本量,把用户分成两组。A组(对照组)和B组(实验组)。由于样本量充足,理论上来说,A组和B组的各项原始指标表现应当是差不多的。

AB实验是在对照组的基础上,做一个feature改动。

假设这个feature改动是不影响指标的。是没有作用的。

观察B组的指标,经过统计学方法计算,在H0成立的情况下,B组这种指标表现出现的概率。根据这个概率去判断我们是该接受3的假设、还是拒绝3的假设。

在统计学上,我们称,依照原假设,得到实际这种或更加极端情况的概率值为P-value,也就是p值。在这个背景问题中,P值为0.003。一般来说,我们规定0.05是判断显著与否的阈值(当然,这个阈值可以调整),也就是这一part的结论:我怎么衡量一个指标是否有显著变化?——利用p值进行判断。一般来说p值<0.05,认为指标有显著变化。

当你看到指标显著时:是真的显著吗?

结论:不一定是真的显著。 原因:犯了第一类错误!(常说的alpha错误)

看到这,有的小伙伴可能有点迷茫。什么意思??不是刚刚说p值远小于0.05,拒绝原假设了吗?怎么又不一定真的显著呢??

这里解释一下。我们刚刚说了,我们拒绝了H0,不是因为100%确定H0是错的,而是因为H0为真的概率太低了,所以我们选择拒绝了它。但是不代表它一定就是错的,有可能药是确实没有作用,只是我们选的小鼠刚好反应巨快!!鼠中佼佼者!!!。。

也就是说,AB实验告诉我,显著了!指标显著发生了变化!!!喜大普奔!!!这个时候,我们仍然是有可能犯错的。可能我们的样本指标就是落在了那个5%的区间里。

你可能会想,完犊子了。那我们这还咋评估啊。

但是!!!!虽然我们不敢说100%数据就一定会像表现的那样涨,我们可以给出,“实际没涨,AB实验看起来涨了”的犯错概率。这个过程,就是将“不确定性”进行“量化”的过程。一般如果给定P值0.05,AB实验看起来显著的涨了,但实际没涨,犯这种错误的概率是5%。

总而言之,我们不可能“准确”的预估产品feature上线后的表现,但是它能将“不可预知”的风险,转换为“可以量化”其“不确定性”的问题。

当看到指标不显著时,是真的不显著吗?

结论:不一定真的不显著。

原因:犯了第二类错误!(常说的beta错误)

嗯嗯嗯又来了,看到不显著,也不一定是真的不显著……

那这又是为什么呢?我们会可能犯第二类错误:其实策略有效,只是没有被检测出来。

这种错误的概率被记为β。而统计功效(power,也被称为检验效力),被定义为1-β,表示的是“假设我的新策略是有效的,我有多大概率在实验中检测出来”。

什么意思呢?让我们画图来看,右边这个红色曲线是实验组,左边这个蓝色曲线是对照组。大家可以知道的是,如果我实验组取的样本落在了图中蓝色涂满的这部分,其实是应该拒绝原假设的!!但是由于它不在蓝色曲线的拒绝域里,所以我们接受了它。这就是第二类错误了。第二类错误的概率取决于两个曲线的分布情况。

一个合适的AB实验指标判断怎么给出?

这里有个简单的流程。

当我们判断一个指标是否显著时,先看P值。能得到显著与否的结论,但是要注意仍然有概率犯错。

当我们判断一个指标不显著、实验没效果时,要注意是否会存在流量不够的问题,造成了实际有效果,但没被检验出来的可能性。(不过一般来说,开始实验前最好就评估好样本量的问题)

AB实验相关的面试常见问题

1.怎么降低犯第一类错误的概率?

把p值限定得越小,犯第一类错误的概率就越低。因为P值本来就是犯第一类错误的概率……

2.怎么降低犯第二类错误的概率?

降低犯第二类错误的概率,换言之就是提升统计功效。

这个部分和我们置信度(1-p值)、样本量都有关系。

首先,如果我们降低置信度,可以提升统计功效。比如说不需要p值<0.05就认为显著了,我们认为p值<0.1就显著。那么红色的部分会往更中间集中,相对应,蓝色的部分会变小。

不过这种方式的缺点在于,我们犯第一类错误的概率就会变大。

其次,可以提升样本量,使我们的正态分布钟型变更尖,让犯第二类错误的概率变小。

3.怎么确定样本量?

样本量和我们的统计功效息息相关。怎么根据我们希望的统计功效,来反过来推算实验所需的样本量呢?

输入 :

【1】指标的base值和两组指标的差异(比如说,现在对照组留存是60%,认为提升到61%才是有意义的,差异就是0.01)

【2】指标方差。如一个实验组的指标如阅读数的方差,可用历史数据估算。

【3】t检验的显著性水平,默认0.05

【3】统计功效,一般取80%,可以调整。

输出:

单个实验组的样本量。

这个部分的公式推导就不展开了(公式推导是我的弱项…),python中提供了相应的计算包,可以去实验一下,感兴趣的也可以自己研究背后的计算函数、原理。

python statsmodels里计算样本量的包

4.产品要求开AABB实验,我听不听?

听你个大头鬼哦。

首先,不科学。抽样产生的误差本身就已经在我们的计算概率里了!为啥还要专门开4组实验对比?

其次,不聪明。多样本进行对比更可能犯错。比如说,一次抽样有5%的可能犯错,四次抽样,产生6组对比(A1A2,A1B1,A1B2,A2B1,A2B2,B1B2),一组对比时不犯错的概率95%,‍假设各组对比结果相互独立,至少一组犯错的概率[ 1 -(1-0.05)^6 ] =0.265,远大于0.05。多来几次抽样,犯错的概率增加。更别提评估成本了——本来只用评估两组,现在需要看6组。

最后,不好使。AABB实验可能会影响实验的灵敏度。流量不变则意味着各组样本流量减少一半,灵敏度下降;加大流量则更多用户进组,有可能引入风险。因此不管怎么说都是加大成本的。

5. 实验做了有效果,上线没有效果是怎么回事?

有可能犯第一类错误。你看到的显著可能不是真的,只是抽样的随机误差带来的~~~

结语

这篇文章我从动笔到现在写了超久,每次都卡住写不下去。

但是由于买了新的手账本…“总得让手账本上写写今天干了啥吧!”抱着这样的心态,今天push自己坐在电脑前面把它给写出来。

这篇文章对于统计学学得很好的同学来说可能看了不痛不痒,但是很多统计学得不是那么的明白的同学们,看这个应该还是很爽的:)

感谢我司AB实验平台写的文章,帮了我不少忙。

有问题可以评论区友好交流,我们可以一起把这篇文章变得更完整、更准确。

本文分享自微信公众号 - 早起Python(zaoqi-python),作者:无眠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python正则表达式的运用与常用的正则表达式(附超有用的小项目练习)

    在前天我们详细讲解了Python正则表达式相关知识点。那么本文带来的是偷学Python第三十二天:Python正则表达式的运用(附超有用的小项目练习),其他内容...

    刘早起
  • Pandas学习笔记之时间序列总结

    早起导读:pandas是Python数据处理的利器,时间序列数据又是在很多场景中出现,本文来自GitHub,详细讲解了Python和Pandas中的时间及时间序...

    刘早起
  • 文末重磅福利|Python实现回归预测及模型优化

    大家好,之前写多了自动化办公的内容,现在换个机器学习的专题跟大家交流学习,作为一个眼科研究生后面也希望后面多通过一些眼科案例顺带普及下眼科知识!在眼科中AI的一...

    刘早起
  • 从零开始一起学习SLAM | 三维空间刚体的旋转

    刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运动就是刚体运动,运动过程中同一个向量的长度和夹角都不会发生变化。刚体变换也称为欧式变换。

    用户1150922
  • 测试圈不可错过的区块链知识(一)【全网最新】

    提到区块链大家第一反应就是比特币,之所以有这个反应是因为比特币创造了很多财富自由的神话,小小的价格波动也长期霸占着热搜。

    cctester
  • 实战—用户价值模型搭建

    张俊红
  • 巧用Python搭建你的用户价值模型

    最近在做一个用户评分模型的项目,这个模型的目的就是用来判断用户的价值。希望通过各种指标来给用户综合打分,每个用户最后会得到一个分值,分值越高,说明用户的价值越高...

    1480
  • 有多少创业公司是依据虚荣数据分析?

    导读:有多少创业公司是依据虚荣数据分析,沾沾自喜而察觉不到真正的危险! ? 引 言 数据分析离不开对企业关键指标的跟踪。这些指标与你的商业模式(即营收来源、支...

    灯塔大数据
  • 程序员逻辑测试题(17)

    主要还是充分与必要条件的理解:如果A能推导到B,那A就是B的充分条件,而B是A的必要条件。

    剑走天涯
  • 深度学习之初识深度学习[上]

    总而言之,机器学习是让机器可以得到新的规则.不仅仅是依靠程序员的设定获取固定的答案.

    李小白是一只喵

扫码关注云+社区

领取腾讯云代金券