Python数据分析之假设检验:正态总体均值检验、配对样本t检验、总体比率检验、A/B测试
假设检验原理
- 反证法
- 小概率事件在一次试验中是几乎不可能发生的(但在多次重复试验中是必然发生的)
假设检验的步骤
- 设置原假设与备择假设;
- 设置显著性水平(通常选择);
- 根据问题选择假设检验方式;
- 计算统计量,并通过统计量获取P值
- 根据P值和显著性水平值,决定接受原假设还是备择假设。
原假设备择假设的设置:
- 应当把
如果真实成立但误判为不成立后会造成严重后果的命题
选为原假设; - 应当把
分析人员想证明正确的命题
作为备择假设; - 应当把
大众普遍认为成立的命题
作为原假设,因为原假设不能轻易拒绝,除非有足够的证据。
P值:当原假设为真时所得到的样本观察结果或更极端结果出现的概率。
P值的计算:检验统计量,根据样本数据计算得到的检验统计量,
- :,
- :,
- :,
判断是否接受原假设:
- 若P值很小(小于某个给定的显著性水平),说明观测到的样本是小概率事件,但小概率事件不会发生,即观测的样本不可能是小概率事件,因此拒绝原假设。
正态总体的均值检验【Z检验与t检验】
Z检验——总体方差已知
双边检验
假设真实的总体均值,假定的总体均值,
- 原假设:
- 备择假设:
Z 统计量:
- :样本均值;
- :样本均值分布的标准差;
- :总体的标准差;
- :样本量。
当时,统计量。
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值大于,因此,没有充分理由证明原假设不成立,接受原假设。
单边检验
- 原假设:
- 备择假设:
统计量的计算与双边检验无区别,仅P值计算有区别。
#计算P值
P=stats.norm.sf(abs(Z))#1-CDF
print('P-Value:',P)
输出:
P-Value: 0.03681913506015219
P值小于,因此拒绝原假设。
单样本t 检验——总体方差未知
- 原假设:
- 备择假设:
t 统计量:
- :样本均值;
- :样本均值分布的标准差;
- :样本的标准差;
- :样本量。
当时,统计量 。
随着*度的增加,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)
- np.std():分母为n
- np.std(ddof=1):分母为n-1
输出:
统计量t: -2.0851441405707507
P-Value: 0.041074075305325815
P值小于,因此拒绝原假设,支持备择假设。
两配对样本t检验
根据样本数据对样本来自两配对总体的均值是否有显著性差异进行判断。具体分为两种:
- 同一研究对象分别给予两种不同的处理方式产生的两组数据;
- 对同一研究对象处理前后进行比较。
应用前提:
- 两样本应是配对的(两样本观察值数目同,两样本观察值的顺序不能随意改变);
- 样本来自的两个总体应服从正态分布。
设为两样本配对数据差值的总体平均数,则,转化为单样本t检验,
- 原假设:
- 备择假设:
t 统计量:
- :差值样本(两成对样本的差值)的均值;
- :差值样本的标准差;
- :样本量。
当时,统计量 。
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值小于,因此拒绝原假设,支持备择假设。
- 配对样本检验用于检验两个相关的样本是否来自具有相同均值的正态总体;
- 独立样本检验用于检验两个独立样本是否来自具有相同均值的总体,相当于两个正态总体的均值是否相等。
两独立样本t检验(两正态总体均值差的检验)
- 原假设:
- 备择假设:
检验方法
-
已知:检验统计量
-
未知且相等:利用合并方差作为两个总体方差的估计,检验统计量
-
未知且不等:分别采用各自的方差,需要修正t分布的*度,检验统计量
检验总体的比例是否可靠【总体比率检验】
- 原假设:
- 备择假设:
应用前提:
- 样本容量
- 且(为样本比率)
- 服从二项分布。当较大时,二项分布近似正态分布
样本比率抽样分布近似服从正态分布,因此使用Z统计量,
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值大于,因此没有充足的理由拒绝原假设。
检验不同方案的好坏【A/B测试】
A/B测试的本质是分离式组间试验,也叫对照试验。A/B测试在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户群对应分成几组,在保证每组用户特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。
- 理想情况是,不同的方案应同一受试者测试,并且受试者对两个方案的反应是独立的。
- A/B测试的应用方式决定了它拥有的三大特性:先验性、并行性和科学性。
- 先验性: A/B测试其实是一种“先验”的试验体系,属于预测型结论,与“后验”的归纳性结论差别巨大。
- 并行性: A/B测试是将两个或以上的方案同时在线试验,这样做的好处在于保证了每个版本所处环境的一致性,便于更加科学客观地对比优劣。同时,也节省了验证的时间,无需在验证完一个版本之后再测试另一个。
- 科学性: 这里强调的是流量分配的科学性。A/B 测试的正确做法,是将相似特征的用户均匀的分配到试验组中,确保每个组别的用户特征的相似性,从而避免出现数据偏差,使得试验的结果更有代表性。
随机将测试用户群分为2部分,用户群1使用A方案,用户群2使用B方案,不妨设A方案为参考方案(或旧方案),B方案为实验方案(或新方案)。由于每次实验结果要么成功,要么失败,所以A,B的分布可看作是伯努利分布:
当时,二项分布近似正态分布,其均值方差分别为
- 原假设:
- 备择假设:
A、B两方案的试验成功率分别为,检验统计量
上一篇: 从拼多多“多多果园”看营销场景建设
下一篇: Java远程通讯可选技术及原理