Python数据分析之假设检验(T检验、Z检验、比率检验等)

阅读提示

本文将从多个方面介绍假设检验中的几种常见检验方法,t检验、Z检验、单样本的Z检验等方法。

在这里插入图片描述

一、假设检验

假设检验,也称为显著性检验,是通过样本量的统计量来判断与总体参数之间是否存在差异(差异是否显著)。即我们对总体参数进行了一定的假设,然后通过收集到的样本数据,来验证我们之前做出的假设(总体参数)是否合理。在假设检验中,我们会建立两个完全对立的假设,分别为:

  • 原假设
  • 备择假设

然后通过对样本信息进行判断,选择接受原假设还是拒绝原假设(接受备择假设)

流程: 建立原假设与备择假设→假设原假设为真→判断→接受原假设还是备择假设



二、小概率事件

一次实验中出现概率很小的事件,并且一般不会出现的事件,也就是说违反逻辑与常规的结论,就是小概率事件。一旦小概率事件发生,就有理由拒绝原假设。



三、中心极限定理

样本的均值会落在任一区域,但概率不同。在以均值为中心,一倍的标准差范围内可涵盖68%的数据;两倍的标准差范围内可涵盖95%的数据;三倍的标准差范围内可涵盖99.7%的数据



四、P-Value与显著性水平

P值代表的是支持原假设的概率,如果P < 0.05,就拒绝原假设



五、假设检验的步骤

1、设置原假设和备择假设

2、设置显著性水平α(通常选择0.05)

3、根据问题选择不同的假设检验方法

4、计算统计量,并获得P值

5、根据P与α的值,判断是否接受原假设



六、Z检验

服从正态分布、总体标准差已知。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRfB9EVY-1588658726299)(G:\md文件\typora图片\Z检验.png)]

上式可以理解为: 样本均值-总体均值(也就是他们之间的距离) 除以一个样本标准差,得到的就是他们之间的距离等于几倍的标准差,如果大于2,也就是说偏移超过了2倍的标准差,则落入了拒绝域中。其中本均值分布的标准差由中心极限定理给出


举个简单的例子:抽样出的五批牛奶冰点温度分别为**-0.547, -0.532, -0.548, -0.531, -0.535**,而天然牛奶的冰点温度服从正态分布,均值为-0.545℃,标准差为0.008℃,如果掺水则冰点温度会上升且逐渐趋于0℃

Z检验案例:

import numpy as np
from scipy import stats


# 设定抽样的5批牛奶冰点温度
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统计量为{}'.format(Z))

# P值
P = 2 * stats.norm.sf(abs(Z)) # 这里stats.norm.sf() 是返回Z右边部分的面积 所以要 * 2 得到的就是Z左右两边的面积和
 
print('P值为{}'.format(P))

输出:

Z统计量为1.788854381999821
P值为0.07363827012030438

如果这样看的话,P>0.05,所以我们要接受原假设,也就是说这批牛奶符合标准,没有掺水, 但这个问题实际上是一个单边检验, 我们需要考虑的只是温度大于冰点温度的那一部分牛奶,而小于冰点温度的牛奶属于正常牛奶,不掺水。

越往左,原假设越被接受,那要的就是右边的面积当处在最左边的时候,P值接近为1 。



七、t检验

案例:员工对老板说商品的日均销量一定会到达 50,一周下来销售情况为: 50, 48, 50, 47, 46, 48, 51,员工称是因为波动造成的,自己的承诺可靠

:这还是一个单边检验,只考虑大于50的,不考虑没达到50的情况。

t检验与Z检验的区别在于t检验总体的标准差是未知的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwAjaOZX-1588658726303)(G:\md文件\typora图片\t检验.png)]

t统计量服从t分布,随着自由度(样本容量 - 1)的增大,t分布会逐渐趋向于正态分布。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1srB8rPj-1588658726305)(G:\md文件\typora图片\T.png)]

t检验案例:

#  设定商品销量
b = np.array([48, 50, 47, 46, 48, 51])

# 样本容量
n = len(b)

# 设定样本均值和样本标准差
mean, std = b.mean(), b.std(ddof=1)

# 计算标准误差
# 如果是Z检验的话那就是用总体标准差除以根号n,但t检验因为总体标准差是未知的,所以用样本的标准差来代替
se = std / np.sqrt(n)

# t检验
t = (mean - 50) / se

print('t统计量为{}'.format(t))

# P值
P = stats.t.cdf(t, df= n-1)

print('P值为{}'.format(P))

输出:

t统计量为-2.1926450482675697
P值为0.03991506316282129



八、比率检验

案例: 预期将转换率提升到10%,一周后广告点击500次,转换用户45人,是否完成任务了?

比率检验条件:

  • 需求为总体比率的检验
  • 样本容量n ≥ 30
  • np ≥ 5 且 n(1-p) ≥ 5 (P为样本比率)
  • 广告是否转换 服从二项分布,当n较大的时候二项分布近似于正态分布

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZH0nozCy-1588658726307)(G:\md文件\typora图片\比率检验.png)]

比率检验案例:

原假设: π ≥ πo 即 π ≥ 10% (任务完成)

备择假设: π < 10% (任务失败)

# 样本比率
p = 45 / 500

# 总体比率
pi_0 = 0.1

# 样本容量
n = 500

# Z统计量
Z = (p-pi_0) / np.sqrt(pi_0 * (1 - pi_0) / n)

print('Z统计量{}'.format(Z))

P = stats.norm.cdf(Z)  # sf是取右边的面积,cdf是取左边的面积

print('P值{}'.format(P))

输出:

Z统计量-0.7453559924999305
P值0.22802827012512783

此时, P > 0.05 ,所以我们没有理由拒绝原假设,也就是不能判断是否完成任务,需要进一步观察。


九、总结

假设检验贯穿整个数据分析工作,还存在于A/B测试等多个领域,本文提到的只是很小很小的一部分,其余知识点还需要各位读者总结与补充,感谢阅读。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章