Poisson Processes
A model for arrivals that come one at a time, at a steady average rate, with no memory and no bunching built in. Clicks, calls, decays and goals.
Why Does This Exist?
Many ML inputs are event streams: ad clicks, support tickets, server errors, sensor triggers. The Poisson process is the default model for such streams when events arrive singly at a steady average rate with no aftereffects. It gives closed forms for everything you need: the count in any window, the wait until the next event, and the likelihood of an observed stream, which is what lets you fit the rate from data.
It also sits underneath half of applied probability. The number of arrivals in a window of length at rate is Poisson with mean . The gaps between arrivals are independent exponentials with mean . And the central limit theorem eventually describes the count when the rate is large. This page covers the process itself; the distribution family is in probability distributions.
The one idea you need first
A Poisson random variable with mean takes values with . Mean equals variance equals . That single equality is also the diagnostic: real streams whose variance far exceeds the mean are overdispersed and need a richer model.
Think of It Like This
Popcorn in a steady microwave
Kernels pop one at a time at a roughly steady pace. Knowing that nothing popped in the last ten seconds tells you nothing about the next ten: no kernel remembers, none is due. Sometimes two pops land close together by pure chance, and that clump means nothing.
The rate knob is the power setting. Turn it up and pops come faster on average, but each individual gap stays unpredictable. The Poisson process is this picture with the mathematics filled in: rate is the power setting, the exponential gap is the unpredictability of each wait, and the Poisson count is how many pops a timed window catches.
Where the analogy stops: real popcorn changes rate as kernels deplete. The basic Poisson process holds fixed; a rate that varies with time needs the nonhomogeneous version.
How It Actually Works
A homogeneous Poisson process with rate satisfies three axioms: counts in disjoint windows are independent, the distribution in a window depends only on its length, and two arrivals never land at exactly the same instant. From these, the count in a window of length is Poisson with mean :
The gap between consecutive arrivals is exponential with density and mean , and it is memoryless: . This is why the process never gets due for an arrival.
Worked example
Support tickets arrive at per hour. For a one-hour window, :
- , about 5 percent of hours are silent.
- , about 15 percent.
- , about 22 percent.
- , about 22 percent.
The chance of more than 5 arrivals is . Mean gap between tickets is hour, 20 minutes, but the chance a gap exceeds 40 minutes is .
Fitting the rate is one line: observe arrivals over total time and . Ten tickets in four hours gives per hour.
Code
This checks the worked probabilities and the memoryless gap property by direct simulation.
import numpy as np
rng = np.random.default_rng(3)lam = 3.0 # arrivals per hourgaps = rng.exponential(1 / lam, size=20000) # mean gap 20 minutesprint(round(float(np.mean(gaps)), 3)) # -> 0.333 hoursprint(round(float(np.mean(gaps > 2 / 3)), 3)) # -> 0.135counts = rng.poisson(lam, size=20000) # arrivals per hourprint(round(float(np.mean(counts == 0)), 3)) # -> 0.05The three prints land near 0.333, 0.135 and 0.05, matching hours, and . If your stream's sample variance is triple its mean, stop here and reach for a negative-binomial or Hawkes model instead.
Watch Out For
Fitting Poisson to bursty data
Real arrivals often come in bursts: one outage triggers fifty alerts in a minute. The Poisson variance-equals-mean check catches this immediately. On bursty data the Poisson fit underestimates both silence and storms, so capacity planned from it fails exactly when load spikes. Test dispersion first; use a Hawkes self-exciting process when an arrival raises the near-term rate.
Assuming the rate is constant across the day
Ticket arrivals at 3 per hour on average might be 8 per hour at noon and 0.2 at night. A homogeneous fit averages these into a rate that describes no actual hour, and staffing from it leaves noon drowning and midnight overstaffed. Segment by hour or fit a nonhomogeneous before trusting any probability the model quotes.
The Quick Version
- A Poisson process models single arrivals at a steady rate with no memory.
- Counts in a window of length are Poisson with mean ; gaps are exponential with mean .
- At rate 3 per hour, silent hours happen about 5 percent of the time and the mean gap is 20 minutes.
- The rate estimate is arrivals divided by total time: 10 tickets in 4 hours means 2.5 per hour.
- Variance far above the mean means the data is overdispersed, so use a richer model.
- A rate that drifts with time of day needs segmenting or a nonhomogeneous process.