后台收到一些旁友的留言,想学习AB测试相关知识,但市面上的教程要么太“正式”,要么知识点比较零散。今天给大家分享的这篇文章,可谓既干货又生动活泼:
让我们想象一下,在公司的某产品研发讨论会上……
“这个功能要不要上?”
“我觉得没问题,XX指标肯定能涨一大截。”
“我不这么想,XX指标说不定也会受到影响,你不能只想着可能的收益呀。”
blahblah无限循环争吵中……
“好啦,别吵了,让我们开个AB看一下效果吧。”
当现在越来越多的app都已经日活百万千万,新功能是绝对不敢、也绝无必要轻易上线的。(因为一旦全量上线引起用户反感,损失不可估计。)这个时候,AB实验就成为了大型功能上线前的必备利器——进行小流量的测试,利用测试的效果来预估上线后的效果。
OK,那一个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
4、统计功效,一般取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. 实验做了有效果,上线没有效果是怎么回事?
有可能犯第一类错误。你看到的显著可能不是真的,只是抽样的随机误差带来的~~~
文源:知乎作者 无眠
笔者从业数据分析多年,整理了10G的数据分析学习资料包,需要的朋友转发收藏本文,后台私信我“资料包”即可获得!
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/205653.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除