来源 | Data Science from Scratch, Second Edition
作者 | Joel Grus
译者 | cloverErna
校对 | gongyouliu
编辑 | auroral-L
全文共4998字,预计阅读时间30分钟。
第七章 假设与统计判断
7.1 统计假设检验
7.2 案例:掷硬币
7.3 置信区间
7.4 P-hacking
7.5 案例:运行A/B测试
7.6 贝叶斯推断
7.7 延伸学习
深谙统计之道,方为人中之龙。
——萧伯纳
具备以上统计学和概率理论知识以后,我们接着该做什么呢?数据科学的科学部分,乃是不断针对我们的数据和生成数据的机制建立假设和检验假设。
7.1 统计假设检验
通常,作为数据科学家,我们常常需要检验某个假设是否成立。有时,假设是诸如“这枚硬币是均匀的”“数据科学家喜欢 Python 胜过 R”或“如果人们点开某个突然弹出的小广告,广告的关闭按钮又小又难找,那么大家更倾向于离开这个页面,压根不会阅读”等可以被翻译成统计数据的断言。在各种各样的假设之下,这些统计数据可以理解为从某种已知分布中抽取的随机变量观测值,这可以让我们对这些假设是否成立做出论断。
典型的步骤是这样的,首先我们有一个零假设 H0,它代表一个默认的立场,而替代假设H1代表我们希望与零假设对比的立场。我们通过统计来决定我们是否可以拒绝 H0,即判断它是否错误。通过举例能更直观地说明这个过程。
7.2 案例:掷硬币
假设有一枚硬币,我们试图判断它是否均匀,即任何一面朝上的可能性是否相等。首先,假设硬币落地后正面朝上的概率为 p,所以我们的零假设为硬币均匀,即 p=0.5。我们要对比替代假设 p≠0.5 来检验这个假设。
具体来说,首先掷硬币 n 次,将出现正面朝上的次数记为 X。每次掷硬币都是一次伯努利试验,意味着 X 是二项式随机变量 Binomial(n,p),(正如第 6 章中所讲到的)可以用正态分布来拟合:
只要一个随机变量服从正态分布,我们就可以用 normal_cdf 来计算出一个变量位于(或不在)某个特定区间的概率:
或者反过来,找出非尾区域,或者找出均值两边的(对称)区域,这个区域恰好对应特定的可能性。比如,如果我们需要找出以均值为中心、覆盖 60% 可能性的区间,那我们需要找到两个截点,使上尾和下尾各覆盖 20% 的可能性(给中间留出 60%):
具体来讲,首先我们选择掷硬币 n=1000 次。如果关于均匀的原假设是正确的,那么 X 近似服从正态分布,均值为 50,标准差为 15.8:
我们需要对显著性(significance)下定义——我们有多大的可能性犯第 1 类错误(“容错”)。在这种情况下,我们拒绝了原假设 H0,但实际上原假设是正确的。出于历史上的某些原因,可能性的大小通常设定为 5% 或者 1%。本书在此选择 5%。
考虑这样的检验——如果 X 落在以下区间以外,就拒绝原假设 H0:
假设 p 实际上等于 0.5(即,此时 H0 成立),那么我们有 5% 的可能观测到 X 落在区间之外,这正是我们想要的显著性。换句话说,如果 H0 为真,那么 20 次检验中大约有 19 次会得出正确的结果。
我们常常对检验的势(power)有兴趣,它指的是不犯第 2 类错误的概率。第 2 类错误指原假设 H0 是错的,但我们的检验结果没有拒绝原假设(即“纳伪”)。为了衡量统计的势,我们需要精确衡量 H0 是错的意味着什么。(仅仅知道 p 不是 0.5 不足以为 X 的分布提供足够的信息。)具体来说,假如 p 实际上是 0.55,那么掷硬币的结果会稍微多偏向正面朝上。
在这种情形下,我们这样计算检验的势:
如果我们把原假设变为掷硬币的结果不会偏重于正面朝上,即 P ≤ 0.5,在这种情形下,我们使用单边检验。如果 X 远大于 500,我们就拒绝原假设,如果 X 小于 500,就不拒绝原假设。因此,显著性为 5% 的检验需要使用 normal_probability_below 来找出小于 95% 的概率对应的截点:
这是更有效的检验。如果 X 小于 469,我们就不再拒绝 H0(如果 H1 为真,这不太可能发生),当 X 在 526 和 531 之间时则拒绝 H0(如果 H1 为真,这很有可能发生)。
p-值
进行上述检验的另一种方式涉及 p 值。我们不再基于某个概率截点选择临界值,而是计算概率——假设 H0 正确——我们可以找到一个至少与我们实际观测到的值一样极端的值。
对于硬币是否均匀的双边检验,我们可以做以下计算:
如果我们希望看到结果中有 530 次为正面朝上,可以这样计算:
注意
为 什 么 我 们 用 529.5 而 不 用 530 ? 这 就 是 所 谓 的 连 续 校 正(continuity correction)。它反映了一个事实,即对从掷硬币结果中看到 530 次正面朝上的概率而言,normal_probability_between(529.5, 530.5, mu_0,sigma_0) 是比normal_probability_between(530, 531, mu_0, sigma_0) 更好的估计。
相应地,normal_probability_above(529.5, mu_0, sigma_0) 是看到至少530次正面朝上概率的更好估计。你可以在通过代码生成的图 6-4 中看到。
验证这种观点是否合理的一个方法是模拟:
因为 p 值大于 5% 的显著性,所以我们不能拒绝原假设。如果我们看到了 532 次正面朝上,那么相应的 p 值为:
它小于 5% 的显著性,因此我们拒绝原假设。它正好是和之前相同的检验,只是计算统计
量的方法稍有不同。
同样,我们有:
对于单边检验,如果我们看到 525 次正面朝上,那么可以计算:
这意味着我们不会拒绝原假设。如果我们看到 527 次正面朝上,相应计算如下:
根据结果,我们会拒绝原假设。
警告
在调用函数 normal_probability_above 计算 p 值之前,需要确定你的数据大致上服从正态分布。数据科学的不良数据记录中充斥着差之毫厘失之千里的例子,原因在于“数据是正态分布的”,如果数据本身不是正态分布,那结果就毫无意义。
对正态分布的检验方法有好几种,绘图是不错的首选方案。
7.3 置信区间
我们一直在对正面朝上的概率 p 进行假设检验,这是未知的“正面朝上”分布的参数。对假设检验,我们还有第三种方法:在参数的观测值附近建立置信区间(confidence interval)。
例如,我们可以通过计算每次抛掷对应的伯努利随机变量的均值来估计不均匀硬币的概率——正面朝上记为 1,背面朝上记为 0,取这一系列伯努利随机变量的平均值。如果我们观测的 1000 次抛掷中有 525 次正面朝上,那么我们可以估计出 p 等于 0.525。
但是这个估计的可信度有多大呢?如果我们已知 p 的精确值,那么根据中心极限定理(见6.7 节),伯努利随机变量的均值近似服从正态分布,其中均值为 p,标准差为:
这里,p 是未知的,所以我们使用估值:
这种计算是不严格的,但运用广泛。借助正态近似我们得出结论:以下区间包含真实参数
p 的可能性为 95%:
注意
这是关于区间的解释,不是关于 p 值的解释。你需要这样理解:如果你重复实验很多次,其中 95% 的“真”参数(也就是正面朝上)会落在观测到的置信区
间(每次具体落在的点可能会都不同)中。
注意,我们没有得出不均匀硬币的结论,因为 0.5 落入了我们的置信区间。
如果我们观察到的是 540 次正面朝上,那么相应计算为:
在这种情形下,“均匀硬币”没有落入置信区间。(“均匀硬币”的假设没有通过检验。如果假设是真的,那需要在 95% 的情况下都能通过。)
7.4 P-hacking
如果一个程序仅有 5% 的时间错误地拒绝了原假设,那么根据定义:
这意味着如果你有意找出“显著”结果,那么总是可以的。只要对数据的假设检验次数足够多,就总有某些会表现出显著性。移除右边的那些异常值,你就可以得到小于 0.05 的 p值。(注意,这与 5.2 节讲的相关性有些类似。)
这就是所谓的 P-hacking, 它某种程度上是“基于 p 值框架的推断”的结果。批评这种方法的一篇绝好文章是雅各布·科恩的“地球是圆的”。
如果想做好科学工作,就要在审查数据之前确定你的假设,就要在做假设之前整理好你的数据,并且要牢记,p 值并不是靠直觉得出的。(一个替代方案是下文 7.6 节“贝叶斯推断”。)
7.5 案例:运行A/B测试
你在 DataSciencester 的主要职责之一是经验值优化,这是个委婉的说法,其实就是设法让人点击广告。你的一个广告商针对数据科学家开发了一种新的能量饮料,广告部门的副总希望你帮助他在广告 A(“口味好”)和广告 B(“营养均衡”)之间进行选择。
作为一名科学家,你得做一次实验,对网站访问者随机放送不同的广告,并记录每个广告的点击数。
如果 1000 个看到广告 A 的人中有 990 个人点击广告,而 1000 个看到广告 B 的人中只有10 个点击,你可以确认 A 是更棒的广告。但倘若区别并不如此分明,可以使用统计推断进行选择。
假设有 NA 个人看到广告 A,其中 nA 个人点击广告。每次广告浏览都是一次伯努利试验,其中 pA 是点击广告 A 的概率。然后(如果 NA 足够大。此处就足够大)我们知道 nA/NA 是近似服从正态分布的随机变量,其中均值为 pA,标准差为同样,
是近似服从正态分布的随机变量,均值为pB,标准差为
如果我们假设这两个正态分布互相独立(这个假设是合理的,因为每个伯努利试验也是独立的),那么它们的差也是正态分布的,其中均值为 pB - pA,标准差为
注意
这某种程度上有些欺骗性。只有在标准差已知的条件下数学推理才正确。我们从数据中估计参数,这意味着我们实际中应该用 t 分布。但如果数据集足够大,正态分布和 t 分布之间的差别可以忽略不计。
这意味着我们可以检验 pA 和 pB 相等(即 pA-pB 等于零)这个原假设,具体方式如下:
这应该近似一个标准正态分布。
比如,如果“口味好”的广告从 1000 次浏览中获得 200 次点击量,而“营养均衡”广告则从 1000 次浏览中获得 180 次点击量,则统计量等于:
如果两个均值实际上相等,那么看到如此大的差异的概率为:
这计算出的数值很大,以至于你不可以得出有差距的结论。另一方面,如果“营养均衡”仅仅获得 150 次点击量,则:
这意味着如果广告的效果相同,那么你看到有明显差异的概率只有 0.003(也就是效果相同的概率很小)。
7.6 贝叶斯推断
我们所看到的处理方式都包含对检验所做的与概率有关的陈述:“如果原假设正确,那么你观测到极端统计量的概率仅有 3%。”
推断的一个替代方法是将未知参数视为随机变量。分析师(也就是你)从参数的先验分布(prior distribution)出发,再利用观测数据和贝叶斯定理计算出更新后的后验分布(posterior distribution)。不再对检验本身给出概率判断,而是对参数本身给出概率判断。
比如,如果未知参数是概率(就像掷硬币的例子),我们使用 Beta 分布(Beta distribution)作为先验分布,Beta 分布仅对 0 和 1 赋值:
一般来说,以上分布的权重中心为:
alpha 和 beta 越大,分布就越“紧密”。
例如,如果 alpha 和 beta 都是 1,那么刚好是均匀分布(以 0.5 为中心,非常分散)。如果alpha 比 beta 大很多,那么大多数权重接近 1。如果 alpha 比 beta 小很多,那么大多数权重接近零。图 7-1 展示了几种不同的 Beta 分布。
图 7-1:Beta 分布举例
让我们先假设一个先验分布 p。如果对硬币是否均匀不预设立场,那么将 alpha 与 beta 都设定为 1。或者如果我们坚信硬币有 55% 的可能正面朝上,就选择让 alpha 等于 55,beta等于45。
然后我们多次掷起硬币,结果有 h 次正面朝上,有 t 次背面朝上。根据贝叶斯定理(和一些太过冗繁的数学,此处不赘述),p 的后验分布仍然是 Beta 分布,但参数分别为alpha + h 和 beta + t。
注意
后验分布也是 Beta 分布,这并非偶然。二项分布给出了正面朝上的数字,Beta 是二项分布的共轭先验分布。这意味着,无论你何时使用从相关的二项分布中得到的观测值更新 Beta 先验分布,你还是会得到一个 Beta 后验分布。
假设你掷硬币 10 次并且观测到 3 次正面朝上。
如果你从均匀分布的先验开始(有时候不会采取硬币均匀的立场),那么你的后验分布为Beta(4, 8),中心为 0.33。如果你认为所有的概率是相等的,那么你最好的猜测就会非常接近观测到的概率。
如果你从 Beta(20, 20) 开始(表明硬币大致上是均匀的),那么你的后验分布为 Beta(23,27),中心为 0.46,这表明可能硬币稍稍倾向于背面朝上。
如果你从 Beta(30, 10) 开始(表明硬币是不均匀的,即有 75% 的可能会正面朝上),那么你的后验分布为 Beta(33, 17),中心为 0.66。这种情况下,你仍然相信正面朝上的概率会大一 些,只是没一开始那么坚定了。这几个不同的后验分布如图 7-2 所示。
图 7-2:从不同先验分布得到的后验分布
如果你多次掷硬币,无论你最初选择了什么样的先验分布,先验分布对后验分布的影响会越来越小,直到最后得到(几乎)相同的后验分布。
比如,无论你最初对掷硬币的结果有怎样的倾向猜想,当看到 2000 次掷硬币的结果中有1000 次正面朝上时,你都会很难维持原先的看法(除非你极端地选择了 Beta(1000000, 1)这样的先验分布)。
有趣的是,这允许我们对假设“基于先验分布和已观测数据,正面朝上的概率介于 49% ~51% 的可能性仅有 5%”做出概率判断。这在哲学上不同于论断“如果硬币是均匀的,那么只有 5% 的机会能观测到极端数据”。
用贝叶斯推断进行假设检验是饱受争议的——部分源于它的数学原理让事情变得更复杂,部分源于选择先验分布的主观性。本书中我们不会挖掘得太深,但稍作了解还是有益的。
7.7 延伸学习
• 我们仅仅讲解了统计推断的一点皮毛知识。第5章末推荐的相关书籍有大量更加深入的细节知识。
• 在线公开课(https://www.coursera.org/specializations/statistics)提供了涵盖许多相关主题的数据分析与统计推断课程。