ABTtest样本量计算
一:两个总体只差的样本量计算
目的:测试组比对照组提升30%的活跃度(DAU均值)
H0: μ0 - μ1<=30%
H1:μ0 - μ1>30%
计算公式:
n
A
=
k
n
B
a
n
d
n
B
=
(
1
+
1
k
)
(
σ
z
1
−
α
/
2
+
z
1
−
β
μ
A
−
μ
B
)
2
n_A = kn_B\ and\ n_B = (1 + \frac{1}{k})(\sigma\frac{z_{1- \alpha/2} \ \ \ + z_{1-\beta}}{\mu_A - \mu_B} )^2
nA=knB and nB=(1+k1)(σμA−μBz1−α/2 +z1−β)2
数据来源: 对照组数据
α = 0.05 (置信度可以调整)
β = 0.2 (一般默认20%)
K = 1 (代表:组件样本均衡)
μA-μB = 均值*0.3 (代表均值需要提高的程度)
σ 代表:对照组标准差
1.数据准备
import pandas as pd
import numpy as np
import datetime
###数据准备##################################################################################
data = pd.DataFrame(
data=np.random.randint(1,100,size=(20,3)),
columns=['组','店铺类型','下单量']
)
data['日期']=pd.date_range('2021-01-01',periods=20,freq='D')
data['日期'] = data['日期'].map(lambda x : datetime.datetime.strftime(x, '%Y-%m-%d'))
print(data.head())
print("========================")
for i in data.index:
if i%2==0:
data.iloc[i,3]=np.nan
data['日期'].fillna(method='bfill',inplace=True)
print(data.head())
data['组'] = data['组'].map(lambda x :'A' if x%2==0 else 'B' )
data['店铺类型'] = data['店铺类型'].map(lambda x :'C' if x%2==0 else 'D' )
print("========================")
print(data)
####项目资料################################################################################
#目的:提升C类店铺的平均下单量30%
#组A:对照组
#组B:测试组
###分组数据#########################################################
data_AC=data.loc[(data.组=='A')&(data.店铺类型=='C'),('日期','下单量')]
data_BC=data.loc[(data.组=='B')&(data.店铺类型=='C'),('日期','下单量')]
print('对照数据',data_AC)
print('======================')
print('测试数据',data_BC)
2.计算样本量
####计算样本量############################################################
#样本量计算的数据使用的是对照组的数据
import pandas as pd
import numpy as np
from scipy import stats
#基础参数
α=0.05
β=0.2
k=1
#计算Z值
z_α = stats.norm.ppf(1-α/2)
z_β = stats.norm.ppf(1-β)
print(z_α) #1.959963984540054
print(z_β) #0.8416212335729143
#计算标准差
σ = data_AC['下单量'].std()
print('标准差:',σ) #标准差: 27.051802158081816
#μA-μB
mean = data_AC.groupby('日期')['下单量'].mean().mean()*0.3
print('μA-μB:',mean) #μA-μB: 13.92
#样本量
n = (1+1/k)*np.power(σ*(z_α+z_β)/mean,2)
print('最小样本量:',n) #最小样本量: 7.179762736995828
二:汇总样本量计算公式
三:样本量计算url
样本量计算工具:
http://powerandsamplesize.com/Calculators/Compare-2-Means/2-Sample-Equality