为什么要写假设检验?因为在工作中经常会遇到ABTest就不可避免的要进行假设检验,进行结果的有效性分析。
假设检验的方法有很多比如T检验、卡方检验、方差分析等。这些方法在Excel、Python、R、Spss里都是可以实现的。
本篇文章主要写代码层面的实现,本着在工作中学以致用来写本文,所以会少一些原理性的讲解。原理性的讲解后期补。
一、假设检验——T检验
T检验有2种,一种叫单样本T检验、另一种两样本T检验。
工欲善其事必先利其器,用Python进行假设检验前我们需要把必备的包给安装好。
#必备安装包
pip install scipy numpy
1.1两样本T检验(ttest_ind)
scipy.stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate'
参数解释:
a、b:待检验的数据集
equal_var:方差齐性判断
nan_policy:执行代码检验,返回结果的状态。
这个参数有3种状态:{‘propagate’, ‘raise’, ‘omit’},分别返回{nan、报错、忽略}方差齐性定义:两样本总体方差相等,当两总体方差相等时,即具有“方差齐性”,可以直接检验。
设:
H0(原假设):两列数据没有显著性差异。以95%的置信区间进行判定。
数据集:
#均值为5,方差为10的两列数据
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
#均值为5,方差为20的500个数据
rvs3 = stats.norm.rvs(loc=5, scale=20, size=500)
#均值为5,方差为10的100个数据
rvs4 = stats.norm.rvs(loc=5, scale=20, size=100)
#均值为8,方差为20的100个数据
rvs5 = stats.norm.rvs(loc=8, scale=20, size=100)
1.1.1检验rvs1和rvs2之间是否有显著性差异。
因为:样本方差,均值相同,数据量相同,可以直接套代码进行检验
stats.ttest_ind(rvs1,rvs2)
#输出:Ttest_indResult(statistic=0.9208589021990001, pvalue=0.35734663412126055)
1.1.2检验rvs1和rvs3之间是否有显著性差异。
因为:样本方差不同,均值相同,数据量相同,需要设置equal_var = False
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs3 = stats.norm.rvs(loc=5, scale=20, size=500)
stats.ttest_ind(rvs1, rvs3, equal_var = False)
1.1.3检验rvs1和rvs4之间是否有显著性差异。
因为:样本均值相同,方差不同,样本量不同。需要设置equal_var = False,如果默认True(不设置),结果的P值会变大。
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs4 = stats.norm.rvs(loc=5, scale=20, size=100)
stats.ttest_ind(rvs1, rvs4, equal_var = False) #If equal_var =True,则P值差异会比较大
1.1.4检验rvs1和rvs5之间是否有显著性差异。
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs5 = stats.norm.rvs(loc=8, scale=20, size=100)
stats.ttest_ind(rvs1, rvs5, equal_var = False) #If equal_var =True,则P值差异会比较大