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 테스트를 수행하는 방법