Kolmogorov-Smirnov 检验 (KS 检验)

pythonserver side programmingprogramming

简介

统计分析中使用多种工具和方法来帮助将原始数据转化为有见地的信息。Kolmogorov-Smirnov 检验 (KS 检验) 就是这样一种强大的工具,以其适应性和耐用性而闻名。这种非参数检验是数据分析领域的支柱,以对比两个样本或将样本与参考概率分布进行比较(单样本 KS 检验)而闻名。我们将在本文中解释 KS 检验的概念、用途和工作原理,并提供 Python 编码的示例以便于理解。

解读 Kolmogorov-Smirnov 检验

KS 检验由 Nikolai Smirnov 和 Andrey Kolmogorov 开发,是一种非参数技术,用于评估数据与给定分布的拟合程度或对比两个累积分布函数 (CDF)。由于其非参数特性,它不对遵循特定分布的数据做出任何初始假设,因此其适应性得到了增强。

量化样本的经验分布函数 (EDF) 与参考分布的累积分布函数 (CDF) 之间或两个经验样本的 CDF 之间的最大差距 (D) 是 KS 检验背后的基本思想。

Kolmogorov-Smirnov 检验的 Python 示例

示例 1:Python 中的单样本 KS 检验

假设您有一个包含 50 个人体重的数据集,并且您认为这些体重呈规律分布。要检验这一假设,请进行单样本 KS 检验。执行此操作的 Python 代码如下 −

# 导入必要的库
from scipy import stats
import numpy as np

# 从正态分布中生成大小为 50 的样本
np.random.seed(0)
sample = np.random.normal(loc=0, scale=1, size=50)

# 单样本 KS 测试
d_statistic, p_value = stats.kstest(sample, 'norm')

print("单样本 KS 测试:")
print("D 统计量:", d_statistic)
print("p-value:", p_value)

输出

单样本 KS 测试:
D 统计量: 0.10706475374815838
p 值:0.5781417630622738

在此代码中,我们使用 kstest 函数中的"norm"参数将样本与典型的正态分布进行比较。如果 p 值小于显着性水平(通常为 0.05),则拒绝零假设。这表明数据可能不遵循正态分布。

示例 2:Python 中的双样本 KS 测试

假设您希望比较来自城市 A 和城市 B 的人的体重,看看他们是否来自同一分布。在这种情况下,双样本 KS 测试是理想的选择。执行此操作的 Python 代码如下 

# 从正态分布中生成另一个大小为 50 的样本
sample_2 = np.random.normal(loc=0.5, scale=1.5, size=50)

# 双样本 KS 测试
d_statistic_2, p_value_2 = stats.ks_2samp(sample, sample_2)

print("\n双样本 KS 测试:")
print("D 统计量:", d_statistic_2)
print("p 值:", p_value_2)

通过 ks_2samp 函数比较两个样本的分布。如果 p 值小于我们的显著性水平,我们拒绝零假设并得出结论:城市 A 和 B 的权重来自不同的分布。

利用 Kolmogorov-Smirnov 检验的力量

KS 检验因其适应性而成为许多领域的有用工具。金融分析师使用该检验来确定特定股票的收益是否遵循正态分布。该检验可用于环境科学,以比较两个不同地区的降雨模式。

KS 检验在数据科学和机器学习领域也非常有用。例如,在创建预测二元事件的模型时,KS 检验可用于比较正结果和负结果的预计概率分布。强大的 KS 统计数据(表明这些分布之间存在相当大的差异)将表明模型成功。

KS 检验有助于数字广告行业了解用户行为。举个例子,测试可能会检查用户在网页上花费的时间,以确定它是否遵循特定的分布,从而使组织能够做出数据驱动的决策。

结论

在统计分析领域,Kolmogorov-Smirnov 检验是一种有效的非参数技术,用于评估拟合优度和对比各种样本。该测试在众多行业中的广泛适用性强调了它在当今数据驱动环境中的重要性。

KS 测试易于访问且易于应用,具有 Python 的实际实现,可提供可靠的统计见解。无论您是试图验证机器学习模型性能的数据科学家、检查数据假设的财务分析师,还是希望比较数据集的研究人员,KS 测试都可以成为您进行全面统计测试的首选工具。


相关文章