ABtest系统后记:到底多少样本才算是够?

背景

之前写过关于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)在一次试验中基本上不会发生。反证法是指先提出假设,再用适当的统计方法确定假设成立的可能性大小;如可能性小,则认为假设不成立。假设检验的基本概念:

  • 统计假设:是对总体参数(包括总体均值μ等)的具体数值所作的陈述。
  • 原假设:是试验者想收集证据予以反对的假设 ,又称“零假设”,记为 H0; 对比试验中的原假设就是测试版本的总体均值等于对照版本的总体均值。
  • 备择假设:也称“研究假设”,是试验者想收集证据予以支持的假设,记为 H1; 对比试验中的备择假设就是测试版本的总体均值不等于对照版本的总体均值。
  • 双侧检验与单侧检验:如果备择假设没有特定的方向性,并含有符号“≠”,这样的称为双侧检验。如果备择假设具有特定的方向性,并含有符号 “>” 或 “<” 的假设检验,称为单侧检验。

这里介绍t检验  ,亦称student t检验(Student’s t test),主要用于总体标准差σ未知的正态分布。 T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。简单说:用来检验正态分布下,两个平均数之间差异显著的程度。t检验的一般步骤如下:

①提出虚无假设,H0:u1=u2,先假设两个平均数无显著差异

②计算z值(Z-score):因为AB是检验来自两个组样本平均数的差异性,从而判断他们各自代表的总体的差异是否显著,公式为:(因为是比较是否有差异,所以是双侧检验)

z-score计算公式,x是平均数,s是标准差,n是样本量

③根据Z值,查正态分布Z值表,得到显著性(显著水平)。一般常用的有三个:

Z值                 显著性(α) 置信度(β=1-α) 显著性
1.64 0.190% 不显著
1.96 0.0595% 显著
2.58 0.0199% 非常显著

一般的,如果α<0.05,我们就拒绝H0,认为AB两组有差异(假设发生的概率太小,不会发生),对应的,我们认为 置信度为95%的时候就认为可信。这就是P值取95%的来历。

最后再啰嗦一句Z-score:Z值是一个标准化的结果,本身不具有意义,有意义的是它在标准正态分布模型里代表的概率值。

置信区间 是用来对一个概率样本的总体参数进行区间估计的样本均值范围,它展现了这个均值范围包含总体参数的概率。双样本的均值差置信区间估算公式如下:

置信区间计算公式

置信区间与3σ

一般的AB实验结果表达如下:

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、参考文章

http://www.statsmodels.org/dev/generated/statsmodels.stats.power.NormalIndPower.solve_power.html#statsmodels.stats.power.NormalIndPower.solve_power

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

https://rrsongzi-gmail-com.iteye.com/blog/1860571

https://www.cnblogs.com/nkwy2012/p/6406595.html

机器学习 2018-12-24
上一篇:

评论已关闭。