You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何scipy.stats.kstest的p值随样本量增大而降低?

关于scipy.stats.kstest检验泊松分布的样本量与p值矛盾问题

我正在研究时间序列事件,希望证明其并非随机生成事件,因此尝试使用scipy中的kstest方法。但在检验泊松分布时遇到了困惑:


代码1(样本量n=100)

from scipy.stats import poisson, kstest

noPts = 100
lambdaPoisson = 10

my_data = poisson.rvs(size = noPts, mu = lambdaPoisson)

ks_statistic, p_value = kstest(my_data, 'poisson', args=(lambdaPoisson,0))
print(ks_statistic, p_value)

输出:

0.18677614630310613 0.0015821590670650476

代码2(样本量n=1000)

from scipy.stats import poisson, kstest

noPts = 1000
lambdaPoisson = 10

my_data = poisson.rvs(size = noPts, mu = lambdaPoisson)

ks_statistic, p_value = kstest(my_data, 'poisson', args=(lambdaPoisson,0))
print(ks_statistic, p_value)

输出:

0.13477614630310608 2.6511802749311937e-16

我原本认为样本量越大,poisson.rvs生成的数据与kstest检验的泊松分布统计匹配度越高,KS统计量确实变小了,但p值却变得极小,导致拒绝原假设。由于数据是用同一参数的泊松分布生成的,我对此感到困惑,想知道哪里出错了。


问题原因解释

这不是代码错误,而是统计检验的本质特性导致的:

  • 原假设的局限性:KS检验的原假设是“样本严格来自指定的理论分布”,但实际中,哪怕是用poisson.rvs生成的样本,也只是理论分布的有限次抽样结果,不可能和理论分布完全重合。样本量越大,检验的灵敏度越高,哪怕极其微小的偏差都会被检测出来,进而得到极小的p值。
  • p值的统计意义:p值衡量的是“原假设成立时,观测到当前样本或更极端样本的概率”。当样本量n增大时,样本累积分布函数(CDF)会更接近理论CDF,但检验统计量的方差会随n增大而减小——同样大小的KS统计量,在大样本下对应的p值会急剧降低。也就是说,大样本下检验对任何微小偏离都极其敏感。
  • 离散分布的适配问题:KS检验最初是为连续分布设计的,泊松分布作为离散分布,用KS检验时的近似p值本身存在偏差,大样本下这种偏差带来的微小差异会被进一步放大,导致p值变得极小。

正确的使用思路

如果你想用KS检验证明你的时间序列不是随机泊松事件,应该:

  • 用真实的时间序列数据而非模拟泊松数据进行检验
  • 不要仅依赖p值大小,结合KS统计量(效应量)和业务场景判断偏差是否有实际意义——大样本下即使p值极小,若KS统计量很小,说明实际偏差可能可以忽略

内容的提问来源于stack exchange,提问作者Koohong Kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:32:47