Cover image created by Author | Segmind SSD-1B ModelHave you ever wondered how statisticians predict the number of customers entering a store in an hour or how often a website gets hits in a minute? These problems can be modeled using the Poisson distribution.
The Poisson distribution models the number of events occurring within a fixed interval of time or space, given that these events happen independently and at a constant average rate.
In this article, we’ll learn about the Poisson distribution, the math behind it, how to work with it in Python, and explore real-world applications. Let’s get started.
What Is the Poisson Distribution?
The Poisson distribution applies when:
- Events occur independently: What happens now doesn’t affect the future.
- A constant average rate (λ): The rate of occurrence doesn’t change over time.
- No simultaneous events: Two events can’t happen at the exact same moment.
It’s used in problems like:
- Estimating the number of cars passing an intersection per hour
- Predicting the number of emails you’ll receive in a day
- Modeling the arrival of calls in a customer service center
Mathematically, the Poisson distribution calculates the probability of observing k events in a fixed interval. The formula is:

Where:
- k: Number of events (non-negative integer)
- λ: Average number of events (mean)
- e: Euler’s number (~2.718)
This means the average number of events and the variability of the data are the same. The mean and variance of the Poisson distribution are both λ.
Let’s implement the formula in Python.
import math
def poisson_probability(k, lambd):
return (lambd ** k) * math.exp(-lambd) / math.factorial(k)
Although libraries can handle most calculations for us, implementing the formula helps you truly understand it.
As an example, let’s calculate the probability of exactly 3 events when λ = 2:
k = 3
lambd = 2
prob = poisson_probability(k, lambd)
print(f"Probability of exactly {k} events: {prob:.4f}")
The function call returns the probability of exactly 3 events happening when the average rate is 2.
Probability of exactly 3 events: 0.1804
Exploring the Poisson Distribution in Python
But it’s much easier to use libraries like NumPy and SciPy. So going forward, we’ll use SciPy for the code examples.
Generating Probabilities and CDFs
Let’s calculate the probability mass function (PMF) and the cumulative distribution function (CDF) for a Poisson distribution with λ=4.
from scipy.stats import poisson
lambd = 4 # average rate of events
k_values = list(range(10)) # possible event counts (0 to 9)
# PMF and CDF
pmf_values = [poisson.pmf(k, lambd) for k in k_values]
cdf_values = [poisson.cdf(k, lambd) for k in k_values]
print("PMF values:", pmf_values)
print("CDF values:", cdf_values)
Output:
PMF values: [0.01831563888873418, 0.07326255555493673, 0.14652511110987343, 0.19536681481316454, 0.19536681481316454, 0.1562934518505317, 0.10419563456702102, 0.0595403626097263, 0.029770181304863145, 0.013231191691050305] CDF values: [0.018315638888734182, 0.0915781944436709, 0.23810330555354436, 0.43347012036670896, 0.6288369351798734, 0.7851303870304052, 0.8893260215974264, 0.9488663842071527, 0.9786365655120158, 0.9918677572030661]
Visualizing the Distribution
A chart helps us better understand how probabilities are distributed.
This visualization gives you an intuitive grasp of how likely different outcomes are for a given λ.

Real-World Applications of the Poisson Distribution
Let’s look at some real-world use cases where you can use the Poisson distribution. In all the code snippets, if you want reproducibility, be sure to set the seed.
Use Case 1: Website Traffic
Say you’re managing a website, and you want to predict the number of visitors in a given minute.
from scipy.stats import poisson
# Simulating website visits per minute with λ = 10
data = poisson.rvs(mu=10, size=1000)
# Visualizing the simulation
plt.hist(data, bins=15, density=True, alpha=0.7, color='skyblue')
plt.title("Simulated Website Traffic (λ = 10)")
plt.xlabel("Number of Visitors")
plt.ylabel("Frequency")
plt.show()
Here, the histogram shows the distribution of visitor counts over many simulated minutes.

Use Case 2: Call Center Traffic
What’s the chance of exactly 5 calls in a minute if the average is 3?
from scipy.stats import poisson
prob_5_calls = poisson.pmf(5, 3)
print(f"Probability of exactly 5 calls: {prob_5_calls:.4f}")
Output:
Probability of exactly 5 calls: 0.1008
Use Case 3: Rare Events Like System Failures
Rare events like system crashes are often modeled with Poisson distributions.
from scipy.stats import poisson
# Simulating daily system failures (λ = 0.5 failures/day)
failures = poisson.rvs(mu=0.5, size=365)
# Plotting the simulation
plt.hist(failures, bins=range(5), density=True, color='salmon', alpha=0.7)
plt.title("Simulated Daily System Failures (λ = 0.5)")
plt.xlabel("Number of Failures")
plt.ylabel("Frequency")
plt.show()
Here’s the plot.

Wrap Up & Next Steps
The Poisson distribution is versatile but not without limitations:
- It assumes a constant average rate, which isn’t true for all real-world situations.
- It doesn’t handle dependencies between events.
💡The Poisson distribution can approximate the Binomial distribution when:
- The number of trials (n) is very large.
- The probability of success (p) is too small.
- And the mean is given by λ = n.p
When you’re simulating traffic or analyzing event probabilities, the Poisson distribution can come in handy.
