How to Use the Poisson Distribution in Python

Spread the love


The Poisson distribution is a probability distribution that is often used to model the number of times an event occurs in a fixed interval of time or space. It is especially useful for modeling events that are rare, occur independently, and occur at a constant mean rate. Examples of such events include the number of phone calls received by a call center per hour or the number of decay events per second from a radioactive source.

Python, a high-level, general-purpose programming language, provides powerful tools for working with the Poisson distribution and other statistical distributions. This article will discuss how to leverage Python to use and understand the Poisson distribution.

Understanding the Poisson Distribution

In a Poisson distribution, only one parameter, λ (lambda), needs to be specified. This parameter is both the mean and the variance of the distribution, and it represents the average rate of occurrence of the event.

The probability of observing ‘k’ events in an interval is given by the formula:

P(k events in an interval) = λ^k * e^-λ / k!


  • λ is the average rate of occurrence,
  • e is the base of the natural logarithm, and
  • k! is the factorial of k.

Generating a Poisson Distribution in Python

Python’s NumPy library offers the numpy.random.poisson function that allows you to generate random variates from a Poisson distribution. This function takes two parameters: lam (which represents λ) and size (which specifies the number of random variates you want to generate).

Let’s generate a Poisson distribution representing the number of calls a call center receives every hour, given that the average rate (λ) is 10:

import numpy as np

lam = 10  # average rate of occurrence per interval
size = 1000  # number of variates

# Generate Poisson distribution
distribution = np.random.poisson(lam, size)


Visualizing a Poisson Distribution with Matplotlib

Python’s Matplotlib library provides a variety of tools for visualizing data. We can use it to plot a histogram of our Poisson-distributed random variates:

import matplotlib.pyplot as plt

plt.hist(distribution, bins=range(min(distribution), max(distribution) + 1), align='left')
plt.xlabel('Number of Calls')
plt.title('Poisson Distribution (λ=10)')

Calculating Probabilities with SciPy

Python’s SciPy library has a wide array of functions for scientific computing, including statistical distributions. The scipy.stats.poisson object lets you calculate probabilities associated with the Poisson distribution.

To calculate the probability of receiving exactly 15 calls in an hour:

from scipy.stats import poisson

k = 15  # number of occurrences

# Calculate probability
probability = poisson.pmf(k, lam)


Here, poisson.pmf(k, lam) calculates the Probability Mass Function (PMF) at ‘k’, giving the probability of exactly ‘k’ occurrences.

Calculating Cumulative Probabilities

We can also calculate cumulative probabilities, which give the probability of a certain number of events or fewer. To calculate the probability of receiving 15 or fewer calls.

# Calculate cumulative probability
cumulative_probability = poisson.cdf(k, lam)


Expectation and Variance

The expected value and variance of a Poisson distribution are both equal to λ. You can calculate these in Python as follows:

# Calculate mean and variance
mean, var = poisson.stats(lam)

print("Mean:", mean)
print("Variance:", var)


The Poisson distribution is a crucial tool in the field of statistics and probability, with wide-ranging applications. With the Python programming language and its vast ecosystem of libraries, harnessing the power of the Poisson distribution has never been more accessible.

As you progress in your data analysis or data science journey, knowledge of such statistical concepts and the ability to implement them using Python will prove invaluable. Keep experimenting, keep learning, and you’ll be surprised at the insights you can glean from your data!

Leave a Reply