Geometric Distribution
Probability Distributions
How Long Until First Success?
The geometric distribution answers a natural question: how long must we wait for the first success? It is the discrete analogue of the exponential distribution and the only discrete distribution possessing the memoryless property.
- Quality control — how many items until first defect
- Recruiting — how many interviews until first hire
- Sales — how many calls until first sale
- Sports — how many games until first win
The geometric distribution is the mathematics of waiting — and its memoryless property makes it unique.
Core Concepts
The geometric distribution answers a natural question: how long must we wait for the first success in a sequence of independent Bernoulli trials? It is the discrete analogue of the exponential distribution and the only discrete distribution possessing the memoryless property.
PMF Derivation and Verification
CDF
Mean and Variance: Derivation
The Memoryless Property
Hazard Function
The geometric distribution has a constant hazard rate — the probability of success on any trial, given that we haven't succeeded yet, is always . This is another manifestation of memorylessness and distinguishes the geometric from distributions with increasing or decreasing hazard rates.
Relationship to Other Distributions
Worked Example: Quality Control
Python Implementation
import numpy as np
from scipy import stats
np.random.seed(42)
# Simulate geometric random variables
p = 0.3
n = 10000
samples = np.random.geometric(p, size=n)
# Verify mean and variance
print(f"Geometric(p={p})")
print(f" Empirical mean: {np.mean(samples):.4f} (theoretical: {1/p:.4f})")
print(f" Empirical variance: {np.var(samples, ddof=0):.4f} (theoretical: {(1-p)/p**2:.4f})")
# Verify memoryless property
for s in [5, 10, 20]:
given_gt_s = samples[samples > s]
empirical = np.mean(given_gt_s > s + 5) # P(X > s+5 | X > s) ≈ P(X > 5)
theoretical = (1-p)**5
print(f" P(X > {s+5} | X > {s}): empirical={empirical:.4f}, theoretical P(X>5)={theoretical:.4f}")
Python Implementation: Hazard Rate Verification
import numpy as np
np.random.seed(42)
# Verify constant hazard rate for geometric distribution
p = 0.25
n = 50000
samples = np.random.geometric(p, size=n)
print(f"Geometric(p={p}) — Hazard Rate Verification")
print(f"{'k':>4} {'P(X=k | X>=k)':>14} {'p (theoretical)':>16}")
print("-" * 36)
for k in [1, 2, 3, 5, 10, 20]:
given_ge_k = samples[samples >= k]
if len(given_ge_k) > 0:
hazard = np.mean(given_ge_k == k)
print(f"{k:>4} {hazard:>14.4f} {p:>16.4f}")
# Show that geometric inter-arrival times in Bernoulli process are geometric
print(f"\nBernoulli process inter-arrival times:")
bernoulli = np.random.binomial(1, p, size=10000)
successes = np.where(bernoulli == 1)[0]
inter_arrival = np.diff(np.concatenate([[-1], successes]))
print(f" Mean inter-arrival: {np.mean(inter_arrival):.4f} (theoretical: {1/p:.4f})")