之前写过关于google AB测试的论文,里面提到了google根据相关参数确定样本的问题,谷歌的论文提到他们有一个工具可以用来计算样本数,但是并没有对工具有具体的描述,最近仔细研究了这个问题,记录一下。
1、为什么要确定"多少样本才算够"
我们利用样本分析问题,只有有足够多的样本,才能代替整体,达到 样本约等于 总体的效果,具有代表性,实验结果才足够可信。
例如:我们知道抛一个正常硬币的正面概率是1/2,抛十次其实不一定是1/2,有很大的随机,但是抛十万次,肯定会逐渐收敛近似到1/2。
2、要确定"多少样本才算够",需要知道哪些已知量
需要以下四个量(别着急,先记住是下面四个,是什么东西一会解释):
1、当前指标(Conversion Rate):一般是率,比如点击率,留存率等,这个指标跟你的业务相关,所以是自己填的。
2、可以观测的最小提升比例(Minimum Detectable Effect):相对提升多少,相对值,也是率,这个也需要你自己预估。
3、P-value(Confidence level):置信度,一般取95%,后面解释
4、Power(Statistical Power):统计功效,一般取80%,后面解释
3、既然后面两个参数知道取什么了,前面两个参数我也知道,怎么算?
恭喜你,如果不关心具体的数学逻辑,到这里我给你方法你去算就行(具体为什么这么算,后面解释):
网站:https://www.abtasty.com/sample-size-calculator/ (AppStore搜 AB可以搜到App)
python版本代码如下(限于观察指标是二项分布(方差D(X)=np(1-p)),如果不是二项分布,effect_size=均值差/ 标准差),自行更改:
#!/usr/bin/python3
#by https://likun.pm
import numpy as np
from statsmodels.stats.power import NormalIndPower
print("请输入实验主要指标当前值 ?%(比如点击率,留存率)")
u=input()
u=float(u)/100
print("请输入最小可以观测的提升比例 ?% (相对值)")
r=input()
r=float(r)/100
#计算单个实验组最小人数
def main():
zpower = NormalIndPower()
effect_size =u*r/np.sqrt(u*(1-u))
print(zpower.solve_power(
effect_size=effect_size,
nobs1=None,
alpha=0.05,
power=0.8,
ratio=1.0,
alternative='two-sided'
))
main()
4、P-value(Confidence level)是什么?为什么取95%
介绍这个概念之前,先了解几个相关概念。
概念1:中心极限定理:是数理统计学和误差分析的理论基础,支撑着置信区间和相关T检验和假设检验的计算公式跟理论。简单的表达起来就是:
样本量很大时,总体参数的抽样分布是趋向于正态分布的,最终都可以依据正态分布的检验公式对它做下一步分析。(ps:中心极限定理提供了依据:AB测试的结果可以用正态分布相关的知识解决)
这就引出了另外一个概念概念2:正态分布。正态分布又叫常态分布,高斯分布。概率密度函数为(如下),大家以前学过,不细说。
概念3:参数估计是一种统计推断方法,用样本统计量去估计总体参数。 总体的统计指标在一定范围内以一定的概率取各种数值,从而形成一个概率分布,但是这个概率分布可能是未知的。 当总体分布类型已知(通常是正态分布),仅需对分布的未知参数进行估计的问题称为参数估计。
用来估计总体参数的统计量的名称称为估计量,如样本均值;估计量的具体数值称为估计值。参数估计方法有点估计与区间估计两种方法。
用样本估计量的值直接作为总体参数的估计值称为点估计。我们必须认识到,点估计是有误差的,样本均值不能完全代表总体均值。点估计只能给出总体参数的一个大概值,但不能给出估计的精度。区间估计就是在点估计的基础上,给出总体参数的一个概率范围。区间估计的几个要素是点估计值、方差、样本大小以及估计的置信水平。
概念4:假设检验,假设检验是先对总体的分布规律作出某种假说,然后根据样本提供的数据,通过统计运算,对假设做出肯定或者否定的决策。逻辑上运用反证法,统计上依据小概率思想。小概率思想是指小概率事件(显著性水平 p < 0.05)在一次试验中基本上不会发生。反证法是指先提出假设,再用适当的统计方法确定假设成立的可能性大小;如可能性小,则认为假设不成立。假设检验的基本概念:
这里介绍t检验 ,亦称student t检验(Student's t test),主要用于总体标准差σ未知的正态分布。 T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。简单说:用来检验正态分布下,两个平均数之间差异显著的程度。t检验的一般步骤如下:
①提出虚无假设,H0:u1=u2,先假设两个平均数无显著差异
②计算z值(Z-score):因为AB是检验来自两个组样本平均数的差异性,从而判断他们各自代表的总体的差异是否显著,公式为:(因为是比较是否有差异,所以是双侧检验)
③根据Z值,查正态分布Z值表,得到显著性(显著水平)。一般常用的有三个:
Z值 | 显著性(α) | 置信度(β=1-α) | 显著性 |
1.64 | 0.1 | 90% | 不显著 |
1.96 | 0.05 | 95% | 显著 |
2.58 | 0.01 | 99% | 非常显著 |
一般的,如果α<0.05,我们就拒绝H0,认为AB两组有差异(假设发生的概率太小,不会发生),对应的,我们认为 置信度为95%的时候就认为可信。这就是P值取95%的来历。
最后再啰嗦一句Z-score:Z值是一个标准化的结果,本身不具有意义,有意义的是它在标准正态分布模型里代表的概率值。
置信区间 是用来对一个概率样本的总体参数进行区间估计的样本均值范围,它展现了这个均值范围包含总体参数的概率。双样本的均值差置信区间估算公式如下:
置信区间与3σ
一般的AB实验结果表达如下:
4、统计功效 Power(Statistical Power)是什么?为什么取80%
通过上述H0假设,我们得到了,AB两组之间差异是否显著,如果显著,我们就认为有差异。但是,有差异不等于你就可以观测到,统计显著,并不意味着任何实际意义的显著!!!统计功效power是说拒绝零假设(H0)后接受正确的H1(H1:AB两个确实有差异)假设概率,power做的,就是要防止显著的观察,是因为运气得到的。要让这种运气的成分变的小。
统计功效的计算公式如下:
根据人为经验,一般取power为80%。
单个实验组需要多少样本量,也是假设n1=n2,然后根据统计功效公式算出来的。
另外一个有关的概念叫effect_size,与1-power正相关,区别是一个受到样本量影响较大,ES不受到样本量影响。
5、问题(欢迎讨论)
1、为什么假设检验使用t检验,而不是Z检验。
目前我怀疑是因为z检验要是标准的正态分布,也有人说是因为google的论文。
6、参考文章
https://zhuanlan.zhihu.com/p/36384858
https://www.jianshu.com/p/343c92053eda
https://blog.csdn.net/friyal/article/details/83088473
http://help.appadhoc.com/dataDecision/ABC.html