假设检验原理
假设检验的步骤
原假设备择假设的设置:
如果真实成立但误判为不成立后会造成严重后果的命题
选为原假设;分析人员想证明正确的命题
作为备择假设;大众普遍认为成立的命题
作为原假设,因为原假设不能轻易拒绝,除非有足够的证据。P值:当原假设为真时所得到的样本观察结果或更极端结果出现的概率。
P值的计算:检验统计量 T T T,根据样本数据计算得到的检验统计量 T 0 T_0 T0,
判断是否接受原假设:
双边检验
假设真实的总体均值 μ \mu μ,假定的总体均值 μ 0 \mu_0 μ0,
Z 统计量:
Z = x ˉ − μ 0 S x ˉ = x ˉ − μ 0 σ / n Z=\frac{\bar{x}-\mu_0}{S_{\bar{x}}}=\frac{\bar{x}-\mu_0}{\sigma/\sqrt{n}} Z=Sxˉxˉ−μ0=σ/nxˉ−μ0
当 μ = μ 0 \mu=\mu_0 μ=μ0时,统计量 Z ∼ N ( 0 , 1 ) Z\sim\mathcal{N}(0,1) Z∼N(0,1)。
import numpy as np
from scipy import stats
a=np.array([-0.547,-0.532,-0.548,-0.531,-0.535])
#总体的均值与方差
mean,std=-0.545,0.008
#计算样本均值
sample_mean=a.mean()
#计算样本均值分布的标准差
se=std/np.sqrt(len(a))
#计算Z统计量
Z=(sample_mean-mean)/se
print('统计量Z:',Z)
#计算P值
P=2*stats.norm.sf(abs(Z))#1-CDF
print('P-Value:',P)
输出:
统计量Z: 1.788854381999821
P-Value: 0.07363827012030438
P值大于 α = 0.05 \alpha=0.05 α=0.05,因此,没有充分理由证明原假设不成立,接受原假设。
Python学习笔记(4)–Scipy科学计算库学习
单边检验
统计量的计算与双边检验无区别,仅P值计算有区别。
#计算P值
P=stats.norm.sf(abs(Z))#1-CDF
print('P-Value:',P)
输出:
P-Value: 0.03681913506015219
P值小于 α = 0.05 \alpha=0.05 α=0.05,因此拒绝原假设。
t 统计量:
t = x ˉ − μ 0 S x ˉ = x ˉ − μ 0 S / n t=\frac{\bar{x}-\mu_0}{S_{\bar{x}}}=\frac{\bar{x}-\mu_0}{S/\sqrt{n}} t=Sxˉxˉ−μ0=S/nxˉ−μ0
当 μ = μ 0 \mu=\mu_0 μ=μ0时,统计量 t ∼ t ( n − 1 ) t\sim t(n-1) t∼t(n−1)。
随着自由度的增加,t分布趋于标准正态分布。
import numpy as np
from scipy import stats
a=np.array([50,48,50,47,46,48,51])
#样本容量
n=len(a)
#总体均值
mean=50
#计算样本均值、标准差
sample_mean,std=a.mean(),a.std(ddof=1)
#计算样本均值分布的标准差
se=std/np.sqrt(n)
#计算t统计量
t=(sample_mean-mean)/se
print('统计量t:',t)
#计算P值
P=stats.t.cdf(t,df=n-1)
print('P-Value:',P)
输出:
统计量t: -2.0851441405707507
P-Value: 0.041074075305325815
P值小于 α = 0.05 \alpha=0.05 α=0.05,因此拒绝原假设,支持备择假设。
根据样本数据对样本来自两配对总体的均值是否有显著性差异进行判断。具体分为两种:
应用前提:
设 μ D \mu_D μD为两样本配对数据差值 D D D的总体平均数,则 μ D = μ 1 − μ 2 \mu_D=\mu_1-\mu_2 μD=μ1−μ2,转化为单样本t检验,
t 统计量:
t = D ˉ S D ˉ / n t=\frac{\bar{D}}{S_{\bar{D}/\sqrt{n}}} t=SDˉ/nDˉ
当 μ D = 0 \mu_D=0 μD=0时,统计量 t ∼ t ( n − 1 ) t\sim t(n-1) t∼t(n−1)。
import numpy as np
from scipy import stats
sample1=np.array([98.8,92.0,94.9,101.2,99.3,85.1,94.8,89.2,89.5,92.1])
sample2=np.array([88.4,92.4,90.3,89.4,89.3,89.0,92.5,87.4,88.9,86.4])
#计算样本数据的差值,得到偏差样本
D=sample1-sample2
#计算样本容量
n=len(D)
#计算差值样本的均值和标准差
bar_D,std_D=D.mean(),D.std(ddof=1)
#计算统计量
t=bar_D/(std_D/np.sqrt(n))
print('t统计量:',t)
#计算P值
P=stats.t.sf(t,df=n-1)
print('P-Value:',P)
输出:
t统计量: 2.6201598341361576
P-Value: 0.013901825506428343
P值小于 α = 0.05 \alpha=0.05 α=0.05,因此拒绝原假设,支持备择假设。
两独立样本t检验与两配对样本t检验的异同
两独立样本t检验(两正态总体均值差的检验)
检验方法
S p = ( n 1 − 1 ) S 1 2 + ( n 2 − 1 ) S 2 2 n 1 + n 2 − 2 S_p=\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2} Sp=n1+n2−2(n1−1)S12+(n2−1)S22
应用前提:
样本比率抽样分布近似服从正态分布,因此使用Z统计量,
Z = p − π 0 π 0 ( 1 − π 0 ) n Z=\frac{p-\pi_0}{\sqrt{\frac{\pi_0(1-\pi_0)}{n}}} Z=nπ0(1−π0)p−π0
import numpy as np
from scipy import stats
#样本比率
p=45/500
#总体比率
pi_0=0.1
#样本容量
n=500
#计算Z统计量
Z=(p-pi_0)/np.sqrt(pi_0*(1-pi_0)/n)
print('Z统计量:',Z)
#计算P值
P=stats.norm.cdf(Z)
print('P-Value:',P)
输出:
Z统计量: -0.7453559924999305
P-Value: 0.22802827012512783
P值大于 α = 0.05 \alpha=0.05 α=0.05,因此没有充足的理由拒绝原假设。
A/B测试的本质是分离式组间试验,也叫对照试验。A/B测试在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户群对应分成几组,在保证每组用户特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。
随机将测试用户群分为2部分,用户群1使用A方案,用户群2使用B方案,不妨设A方案为参考方案(或旧方案),B方案为实验方案(或新方案)。由于每次实验结果要么成功,要么失败,所以A,B的分布可看作是伯努利分布:
A ∼ B e r n o u l l i ( n , π a ) , B ∼ B e r n o u l l i ( n , π b ) A\sim Bernoulli(n,\pi_a),\quad B\sim Bernoulli(n,\pi_b) A∼Bernoulli(n,πa),B∼Bernoulli(n,πb)
当 n → ∞ n\rightarrow\infty n→∞时,二项分布近似正态分布,其均值方差分别为 μ = n p , σ 2 = n p ( 1 − p ) \mu=np,\sigma^2=np(1-p) μ=np,σ2=np(1−p)
A、B两方案的试验成功率分别为 p a , p b p_a,p_b pa,pb,检验统计量
Z = p b − p a p b ( 1 − p b ) n + p a ( 1 − p a ) n Z=\frac{p_b-p_a}{\sqrt{\frac{p_b(1-p_b)}{n}+\frac{p_a(1-p_a)}{n}}} Z=npb(1−pb)+npa(1−pa)pb−pa
A/B-test显著性检验
AppAdhoc A/B Testing使用文档