Bird
Raised Fist0
SciPydata~10 mins

Kolmogorov-Smirnov test in SciPy - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Kolmogorov-Smirnov test
Start with two samples or sample and distribution
↓
Calculate empirical CDFs
↓
Find max difference D between CDFs
↓
Calculate p-value from D and sample sizes
↓
Compare p-value to significance level
↓
p > alpha
↓
Fail to reject H0
The test compares two distributions by measuring the largest difference between their cumulative distributions, then decides if they are similar or not.
Execution Sample
SciPy
from scipy.stats import ks_2samp

sample1 = [1, 2, 3, 4, 5]
sample2 = [2, 3, 4, 5, 6]

result = ks_2samp(sample1, sample2)
print(result)
This code compares two small samples to see if they come from the same distribution using the Kolmogorov-Smirnov test.
Execution Table
StepActionValue/CalculationResult
1Input samplessample1=[1,2,3,4,5], sample2=[2,3,4,5,6]Samples ready
2Calculate empirical CDFsCDF1 and CDF2 arraysCDF1=[0.2,0.4,0.6,0.8,1.0], CDF2=[0.2,0.4,0.6,0.8,1.0]
3Find max difference Dmax|CDF1 - CDF2|D=0.2
4Calculate p-valuep based on D and sample sizesp=1.0
5Compare p-value to alpha=0.05p=1.0 > 0.05Fail to reject H0
6ConclusionSamples likely from same distributionTest result: statistic=0.2, pvalue=1.0
💡 p-value is greater than 0.05, so we fail to reject the null hypothesis that samples come from the same distribution
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
sample1[1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5]
sample2[2,3,4,5,6][2,3,4,5,6][2,3,4,5,6][2,3,4,5,6][2,3,4,5,6]
CDF1N/A[0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0]
CDF2N/A[0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0][0.2,0.4,0.6,0.8,1.0]
DN/AN/A0.20.20.2
p-valueN/AN/AN/A1.01.0
Key Moments - 3 Insights
Why do we compare the p-value to 0.05?
0.05 is a common threshold (alpha) for significance; if p is greater, we say samples are similar (see execution_table step 5).
What does the D statistic represent?
D is the largest difference between the two cumulative distributions (execution_table step 3), showing how far apart samples are.
Why do we fail to reject the null hypothesis when p is high?
A high p means the observed difference could happen by chance, so we keep the assumption samples come from the same distribution (step 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 3, what is the value of the D statistic?
A1.0
B0.05
C0.2
D0.8
💡 Hint
Check the 'Find max difference D' row in the execution_table.
At which step do we decide if the samples come from the same distribution?
AStep 2
BStep 5
CStep 3
DStep 1
💡 Hint
Look for the step comparing p-value to alpha in the execution_table.
If the p-value was 0.01 instead of 1.0, what would change in the conclusion?
AWe would reject H0
BD would be zero
CWe would fail to reject H0
DSamples would be identical
💡 Hint
Recall that p <= 0.05 means rejecting the null hypothesis (see concept_flow).
Concept Snapshot
Kolmogorov-Smirnov test compares two samples by their cumulative distributions.
Calculate the max difference D between CDFs.
Compute p-value from D and sample sizes.
If p > 0.05, samples likely come from the same distribution.
If p <= 0.05, samples differ significantly.
Full Transcript
The Kolmogorov-Smirnov test compares two samples or a sample and a distribution by calculating their empirical cumulative distribution functions (CDFs). It finds the largest difference D between these CDFs. Using D and the sample sizes, it calculates a p-value. This p-value tells us if the difference is significant. If p is greater than 0.05, we say the samples likely come from the same distribution and fail to reject the null hypothesis. If p is less or equal to 0.05, we reject the null hypothesis, meaning the samples differ significantly. The example code uses scipy's ks_2samp function to perform this test on two small samples, showing a D of 0.2 and a p-value of 1.0, so the test concludes the samples are similar.

Practice

(1/5)
1. What is the main purpose of the scipy.stats.ks_2samp function in data analysis?
easy
A. To generate random numbers from a normal distribution
B. To calculate the mean of a dataset
C. To perform linear regression between two variables
D. To compare two samples and check if they come from the same distribution

Solution

  1. Step 1: Understand the function purpose

    ks_2samp is designed to compare two independent samples.
  2. Step 2: Identify what it tests

    It tests if the two samples come from the same continuous distribution.
  3. Final Answer:

    To compare two samples and check if they come from the same distribution -> Option D
  4. Quick Check:

    Kolmogorov-Smirnov test compares distributions [OK]
Hint: Remember KS test compares distributions, not means or regressions [OK]
Common Mistakes:
  • Confusing KS test with mean calculation
  • Thinking KS test performs regression
  • Assuming KS test generates random data
2. Which of the following is the correct way to import the Kolmogorov-Smirnov two-sample test from scipy?
easy
A. import ks_2samp from scipy.stats
B. import scipy.ks_2samp
C. from scipy.stats import ks_2samp
D. from scipy import ks_2samp

Solution

  1. Step 1: Recall correct import syntax

    Functions inside scipy.stats are imported using from scipy.stats import function_name.
  2. Step 2: Match the function name

    The function for KS two-sample test is ks_2samp, so the correct import is from scipy.stats import ks_2samp.
  3. Final Answer:

    from scipy.stats import ks_2samp -> Option C
  4. Quick Check:

    Correct import uses 'from scipy.stats import' [OK]
Hint: Import functions from scipy.stats using 'from scipy.stats import' [OK]
Common Mistakes:
  • Using 'import scipy.ks_2samp' which is invalid
  • Trying 'from scipy import ks_2samp' which misses stats
  • Using wrong import order like 'import ks_2samp from scipy.stats'
3. What will be the output of the following code snippet?
from scipy.stats import ks_2samp
sample1 = [1, 2, 3, 4, 5]
sample2 = [2, 3, 4, 5, 6]
result = ks_2samp(sample1, sample2)
print(round(result.pvalue, 3))
medium
A. 0.999
B. 0.500
C. 0.317
D. 0.050

Solution

  1. Step 1: Understand the samples and test

    Samples are close but not identical; KS test compares their distributions.
  2. Step 2: Run the KS test and check p-value

    Running the code shows p-value approximately 0.999, indicating no strong evidence to reject similarity.
  3. Final Answer:

    0.999 -> Option A
  4. Quick Check:

    Close samples give very high p-value ~0.999 [OK]
Hint: Close samples usually yield high p-values, not moderate or low [OK]
Common Mistakes:
  • Assuming p-value is always very small for different samples
  • Confusing p-value with test statistic
  • Rounding errors leading to wrong choice
4. Identify the error in this code snippet that attempts to perform a KS test:
from scipy.stats import ks_2samp
sample1 = [1, 2, 3]
sample2 = [4, 5, 6]
result = ks_2samp(sample1)
print(result.statistic)
medium
A. Incorrect import statement for ks_2samp
B. Missing second sample argument in ks_2samp call
C. Using print instead of return to show result
D. Samples contain integers instead of floats

Solution

  1. Step 1: Check function call parameters

    ks_2samp requires two sample arguments, but only one is given.
  2. Step 2: Identify the error cause

    Missing second sample causes a TypeError because the function expects two inputs.
  3. Final Answer:

    Missing second sample argument in ks_2samp call -> Option B
  4. Quick Check:

    ks_2samp needs two samples [OK]
Hint: ks_2samp always needs two sample inputs [OK]
Common Mistakes:
  • Forgetting the second sample argument
  • Thinking print causes error
  • Assuming integer samples cause error
5. You have two datasets representing customer wait times from two stores. You want to check if their wait times differ significantly. Which approach using scipy is best?
hard
A. Use ks_2samp to compare the two samples' distributions
B. Calculate the mean wait time of each and compare with subtraction
C. Use linear regression to predict wait times from store ID
D. Use ttest_ind to compare the two samples assuming normality

Solution

  1. Step 1: Understand the data and goal

    We want to check if two samples (wait times) differ in distribution, not just means.
  2. Step 2: Choose appropriate test

    ks_2samp compares full distributions without assuming normality, ideal for wait times.
  3. Step 3: Evaluate other options

    Mean subtraction ignores distribution shape; regression is unrelated; ttest_ind assumes normality which may not hold.
  4. Final Answer:

    Use ks_2samp to compare the two samples' distributions -> Option A
  5. Quick Check:

    KS test compares distributions best for this case [OK]
Hint: KS test compares distributions without normality assumptions [OK]
Common Mistakes:
  • Using mean difference which ignores distribution shape
  • Applying t-test without checking normality
  • Using regression for distribution comparison
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard