Menu

Statistics course · Lesson 2 of 4

Probability Distributions and the Central Limit Theorem

Common probability distributions and the central limit theorem explained simply, with a Python simulation showing why sample means become bell-shaped.

  • Beginner
  • 4 min read
  • Updated Oct 2026
On this page
  1. Distributions you will meet
  2. The central limit theorem
  3. Why it matters
  4. When it helps less
  5. Common mistakes
  6. Key takeaway

A probability distribution describes how likely each possible value is. Knowing a few common distributions helps you choose the right test and spot when data looks wrong. And one result, the central limit theorem, explains why so many statistical methods work on messy real-world data.

Distributions you will meet

Distribution What it describes Example
Normal Symmetric, bell-shaped values around a mean Measurement errors, heights
Binomial The number of successes in a fixed number of yes/no trials Conversions out of 1,000 visitors
Poisson The number of events in a fixed time or space Support tickets per hour
Exponential The waiting time between random events Time between orders, session lengths
Log-normal Positive values with a long right tail Order values, incomes

Much business data is skewed, not normal. Plot it before assuming anything.

The central limit theorem

The central limit theorem (CLT) says: if you take many random samples of a reasonable size and calculate each sample’s mean, those means are approximately normally distributed around the true mean, even when the original data is not normal. The spread of the sample means also shrinks as samples get larger, in proportion to one over the square root of the sample size.

This simulation starts from a strongly skewed population (time spent on a website) and looks at the means of many samples:

import numpy as np
from scipy.stats import skew

rng = np.random.default_rng(11)
# A skewed population: minutes customers spend on a site. Most visits are short, a few are very long.
population = rng.exponential(scale=4.0, size=1_000_000)
print(f"population: mean {population.mean():.2f}, median {np.median(population):.2f}, skewness {skew(population):.2f}")

for n in (2, 30, 200):
    means = rng.choice(population, size=(10_000, n)).mean(axis=1)   # 10,000 samples of size n
    print(f"sample size {n:3}: mean of sample means {means.mean():.2f}, "
          f"spread (std) {means.std():.3f}, skewness {skew(means):.2f}")
print("a normal distribution has skewness 0")
population: mean 4.00, median 2.78, skewness 1.99
sample size   2: mean of sample means 4.00, spread (std) 2.818, skewness 1.42
sample size  30: mean of sample means 4.01, spread (std) 0.722, skewness 0.39
sample size 200: mean of sample means 4.01, spread (std) 0.286, skewness 0.13
a normal distribution has skewness 0

Three things to notice:

  • The average of the sample means stays at about 4.00, the true mean, at every sample size.
  • The spread shrinks as samples grow: averages of larger samples are more precise.
  • The skewness falls towards 0: averages of larger samples become more bell-shaped, even though the population is very skewed.

Why it matters

Because sample means are close to normal, you can use normal-based tools, such as confidence intervals and t-tests, to compare averages of skewed data, such as revenue per user in an A/B test. That is the foundation of the next two lessons.

When it helps less

  • Small samples from very skewed data: the means are still skewed (see sample size 2 above).
  • Heavy tails, such as a few customers with enormous spend: you may need much larger samples, or methods less sensitive to extremes, such as medians or trimmed means.
  • Dependent data, such as repeated measurements of the same user: the theorem assumes independent observations.

Common mistakes

  1. Saying the CLT makes the data normal. It makes the distribution of sample means approximately normal, not the data.
  2. Assuming 30 is always enough. It is a rough rule; very skewed data needs more.
  3. Ignoring dependence between observations.

Key takeaway

Know the common distributions so you recognise your data’s shape. The central limit theorem says averages of independent samples become approximately normal, with less spread as samples grow, which is why tests on averages work. Next: hypothesis testing and p-values.

By , Data Engineer and Founder of DataDank · Last reviewed Oct 2026 · Examples run on Python 3 with NumPy 2.x, SciPy 1.17 and statsmodels 0.15; their output is real.

Progress is saved in this browser only. No account needed.

Search
Filter by type