我在后台收到一些朋友的消息,他们想学习AB测试,但是市面上的教程要么太“正规”,要么知识点比较分散。今天分享给大家的这篇文章可谓既干货又热闹:
让我们想象一下,在公司的一次产品开发研讨会上...
“您想参加这个活动吗?”
“我觉得没问题。XX指标肯定会涨很多。”
“我不这么认为。XX指标也可能受到影响。你不能只考虑可能的好处。”
废话连篇,在无休止的争论中...
“好了,别吵了,我们开个AB看看效果吧。”
现在,当越来越多的app已经是每天几百万人的生活,新功能轻易上线是绝对不可能也没有必要的。(因为一旦全款在线用户反感,损失无法估计。)这时AB实验就成了大型功能上线前的必备工具——用小流量测试,用测试效果来估算它们上线后的效果。
好了,那个AB实验开始后,我们(往往是数据分析师)如何评价这个AB实验的效果,给出这个需求是否应该上线的分析结论?这是本文的重点。
一个合格的分析师可以问自己以下问题:
我怎么衡量一个指标是否有显著变化?当你看到指标显著时:是真的显著吗?当你看到指标不显著时,是真的不显著吗?一个合适的AB实验指标判断结论怎么给出?我会遇到哪些问题、分别应该怎么处理?
接下来,我们就来看看如何回答这些问题吧~
如何衡量一个指标是否发生了显著变化?
结论:一般来说,P值< 0.05,就认为各项指标发生了显著变化。原因:假设检验的知识。
嗯...AB实验只是假设检验吗?假设检验呢?
这里有一个公开课的例子。非常生动。让我们看看如何在实际案例中拒绝/接受一个假设。
背景:神经科学家测试了一种药物对小鼠反应时间的影响,给实验组的100只小鼠注释了一种药物。神经科学家知道,不注射药物的小鼠平均反应时间为1.2s,注射药物的小鼠平均反应时间为1.05s,样本标准差为0.5s你认为这种药物对小鼠的反应时间有影响吗?
按照我们上面说的步骤,一步步拆解:
我们先假设药物是没有影响的。(H0:药物无影响。ps.此处还有一个备择假设H1:药物有影响)如果药物没有影响,换句话说,实验组的小鼠在注射药物之后,他们的反应时间均值应该是1.2s。假设总体小鼠的反应均值就应该是1.2s,那么我们得到的这个样本——平均反应时间1.05s的概率是多大?求解:
(1)已知整体平均值为1.2s
(2)已知样本均值为1.05秒,样本标准差为0.5秒
(3)在样本量可以接受的情况下,用样本的标准差来估计总体标准差(如果不了解这部分,可以填写抽样分布,不要详细展开):0.5/10 = 0.05。
(4)从1.2到计算1.05有多少个标准差?—— 1.05-1.2/0.05 = 3
(5)当我们取出一个样本,它落在整体均值1.2的三个标准差,甚至更远,概率是多少?-概率是正态分布的钟形曲线下3sigma以外的面积(包括正负3sigma)。从正态分布可以知道概率是0.3%。
(6)现在结束了,我们可以得出结论,如果接受原来的假设,药物不起作用,我们抽样结果的概率是-0.003...我们真的拿到了吗??所以,这个时候,虽然不是100%确定,但是我们倾向于拒绝原来的假设(药物没有作用),接受替代假设(药物有作用)。
所以,当我们做一个实验来判断特性是否有用时,我们的思维如下:
当我有足够大的样本量,把用户分成两组。A组(对照组)和B组(实验组)。由于样本量充足,理论上来说,A组和B组的各项原始指标表现应当是差不多的。AB实验是在对照组的基础上,做一个feature改动。假设这个feature改动是不影响指标的。是没有作用的。观察B组的指标,经过统计学方法计算,在H0成立的情况下,B组这种指标表现出现的概率。根据这个概率去判断我们是该接受3的假设、还是拒绝3的假设。
统计学上我们说,按照原来的假设,这种或者更极端情况的概率值就是P值,也就是P值。在这个背景问题中,p的值是0.003。总的来说,我们规定0.05是判断是否显著的阈值(当然这个阈值是可以调整的),这是这部分的结论:我如何衡量一个指标是否有显著变化?-用p值来判断。一般来说,p值< 0.05,就认为指标发生了显著变化。
当你看到指标显著的时候:真的显著吗?
结论:不一定真的意义重大。原因:我犯了第一种错误!(经常说阿尔法误差)
看到这里,有些朋友可能会有点疑惑。你什么意思??你刚才不是说P值远小于0.05,否定了原来的假设吗?这怎么可能不引人注目呢??
这里解释一下。就像我们刚才说的,我们拒绝H0,不是因为我们100%确定H0是错的,而是因为H0为真的概率太低,所以我们选择拒绝。但不代表一定是错的。有可能这种药没有任何效果,但我们选择的老鼠反应很快!!最好的老鼠!!!。。
换句话说,AB实验告诉我,很了不起!指标变化明显!!!西普本!!!这个时候我们还是有可能犯错的。我们可能的样本指数刚好落在5%的范围内。
你可能会想,结束了。那怎么评价呢?
但是!!!!虽然不敢说100%的数据一定会像图中那样上去,但是可以给出“其实没上去,AB实验好像上去了”的误差概率。这个过程就是“量化”不确定性的过程。一般来说,如果给定一个0.05的p值,AB实验看似明显增加,其实不然。犯这个错误的概率是5%。
总而言之,我们无法准确预测产品功能上线后的表现,但它可以将不可预测的风险转化为可以量化的“不确定性”问题。
当你看到指标不显著,真的不显著吗?
结论:不一定真的无足轻重。原因:我犯了第二种错误!(经常说beta错误)
啊哈,又来了。看不显著,也不一定真的不显著...
这是为什么呢?我们可能会犯第二种错误:其实策略是有效的,只是没有被察觉。
这个误差的概率被记录为β。而统计功效(power,又称测试功效),定义为1-β,意思是“假设我的新策略有效,我在实验中被检测到的可能性有多大”。
你什么意思?让我们画一幅画。右边的红色曲线是实验组,左边的蓝色曲线是对照组。众所周知,如果我的实验组所取的样本落在图片的蓝色绘制部分,我们实际上应该拒绝原来的假设!!但由于它不在蓝色曲线的拒绝域内,我们接受了它。这是第二种错误。第二种误差的概率取决于两条曲线的分布。
如何判断一个合适的AB实验指标?
这里有一个简单的过程。
我们判断一个指标是否显著,首先看P值。可以得到有意义的结论,但是要注意出错的可能性。
当我们判断一个指标不显著,实验没有效果的时候,就要注意是否会出现流量不足的问题,这可能导致实际结果是有效的,但是没有经过检验。然而,一般来说,最好在开始实验之前评估样本量。
AB相关面试常见问题
1.如何降低犯第一种错误的概率?
p值越小,犯第一类错误的概率越低。因为P值是犯第一类错误的概率...
2.如何降低犯第二种错误的概率?
减少犯第二种错误的概率,换句话说,提高统计效率。
这部分与我们的置信度(1-p值)和样本量有关。
首先,如果降低置信度,可以提高统计效率。说没有p值< 0.05才算显著,我们认为p值< 0.1才算显著。那么红色部分会集中在中间,相应的,蓝色部分会变小。
但这种方法的缺点是会增加犯第一种错误的概率。
其次,可以增加样本量,使我们的正态分布的钟形变得尖锐,减少犯第二类错误的概率。
3.如何确定样本量?
样本大小与我们的统计功效密切相关。如何根据我们想要的统计效果来计算实验所需的样本量?
输入:
1.指标基础值与两组指标的差值(比如现在对照组的留存率是60%,所以提高到61%是有意义的,差值为0.01)
2.指标的差异。比如一个实验组的指标,比如阅读数的方差,可以通过历史数据来估计。
3.T检验的显著性水平默认为0.05。
4.统计功效,一般80%,可以调整。
输出:
单个实验组的样本量。
这部分的公式推导就不展开了(公式推导是我的弱项……)。python提供了相应的计算包,可以实验一下。有兴趣的也可以自己研究一下背后的计算功能和原理。
python statsmodels中用于计算样本大小的包
4.该产品需要AABB实验。我听了吗?
听着,你这个大头鬼。
首先是不科学的。抽样误差本身已经在我们的计算概率里了!为什么要开4组实验做对比?
其次,不聪明。比较多个样本更容易出错。比如一次采样有5%的概率出错,四次采样会产生六组比较(A1A2,A1B1,A1B2,A2B1,A2B2,B1B2),一组不出错的概率是95%。假设每组的比较结果相互独立,至少有一组出错的概率[1-(1-0.05) 6] = 0.0。样本多了,出错的概率就大了。更不用说评估的成本了——原来只评估了两组,现在需要看六组。
最后,不好用。AABB实验可能会影响实验的灵敏度。恒定流速是指每组样品流速减半,灵敏度降低;增加流量会导致更多用户加入群,这可能会带来风险。所以,反正会增加成本。
5.实验有效,但在网上不起作用是怎么回事?
犯第一种错误是可能的。你看到的不一定是真的,只是抽样的随机误差~ ~ ~
作者从事数据分析多年,编写了10G数据分析学习包。需要转发收藏这篇文章的朋友可以在后台私信我的“数据包”获取!
小京巴狗多少钱一只
