Python에서 kolmogorov-smirnov 테스트를 수행하는 방법


Kolmogorov-Smirnov 테스트는 표본이 특정 분포에서 나오는지 여부를 테스트하는 데 사용됩니다.

Python에서 Kolmogorov-Smirnov 테스트를 수행하려면 단일 샘플 테스트에 scipy.stats.kstest()를 사용하거나 2샘플 테스트에 scipy.stats.ks_2samp()를 사용할 수 있습니다.

이 튜토리얼에서는 각 기능을 실제로 사용하는 방법의 예를 보여줍니다.

예 1: Kolmogorov-Smirnov 테스트 샘플

다음과 같은 샘플 데이터가 있다고 가정합니다.

 from numpy.random import seed
from numpy.random import fish

#set seed (eg make this example reproducible)
seed(0)

#generate dataset of 100 values that follows a Poisson distribution with mean=5
data = fish(5, 100)

다음 코드는 이 100개의 데이터 값 샘플에 대해 Kolmogorov-Smirnov 테스트를 수행하여 정규 분포에서 나온 것인지 확인하는 방법을 보여줍니다.

 from scipy.stats import kstest

#perform Kolmogorov-Smirnov test
kstest(data, ' norm ')

KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)

결과에서 검정 통계량은 0.9072 이고 해당 p-값은 1.0908e-103 임을 알 수 있습니다. p-값이 0.05보다 작으므로 귀무가설을 기각합니다. 표본 데이터가 정규 분포에서 나오지 않는다고 말할 수 있는 충분한 증거가 있습니다.

Poisson 분포를 따르는 임의의 값을 생성하는 Poisson() 함수를 사용하여 샘플 데이터를 생성했기 때문에 이 결과는 놀라운 일이 아닙니다.

예 2: 2-표본 Kolmogorov-Smirnov 검정

다음과 같은 두 가지 샘플 데이터 세트가 있다고 가정해 보겠습니다.

 from numpy.random import seed
from numpy.random import randn
from numpy.random import lognormal

#set seed (eg make this example reproducible)
seed(0)

#generate two datasets
data1 = randn(100)
data2 = lognormal(3, 1, 100)

다음 코드는 이 두 샘플에 대해 Kolmogorov-Smirnov 테스트를 수행하여 두 샘플이 동일한 분포에서 나온 것인지 확인하는 방법을 보여줍니다.

 from scipy.stats import ks_2samp

#perform Kolmogorov-Smirnov test
ks_2samp(data1, data2)

KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)

결과에서 검정 통계량은 0.99 이고 해당 p-값은 4.4175e-57 임을 알 수 있습니다. p-값이 0.05보다 작으므로 귀무가설을 기각합니다. 두 개의 샘플 데이터 세트가 동일한 분포에서 나온 것이 아니라고 말할 수 있는 충분한 증거가 있습니다.

표준 정규 분포를 사용하여 첫 번째 표본에 대한 값을 생성하고 로그 정규 분포를 사용하여 두 번째 표본에 대한 값을 생성했기 때문에 이 결과는 놀라운 일이 아닙니다.

추가 리소스

Python에서 Shapiro-Wilk 테스트를 수행하는 방법
Python에서 Anderson-Darling 테스트를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다