Home

La distribución de Poisson no es solo estadística

June 14, 2026

Vi un video donde alguien la mencionaba de pasada. La explicaban en dos líneas, seguían con otra cosa, y yo me quedé pensando: espera, ¿qué fue eso?

La distribución de Poisson. La conocía de nombre, pero no sabía realmente qué era ni por qué importaba.

El video no profundizaba. Así que lo hice yo.

Qué pregunta responde

La distribución de Poisson responde a algo muy concreto: ¿cuántas veces va a ocurrir un evento en un período fijo de tiempo, si sabes con qué frecuencia ocurre en promedio?

No es una pregunta abstracta. Es exactamente la pregunta que se hace un sistema de monitoreo, un call center, un servidor de logs, una tienda que modela picos de tráfico.

El parámetro clave es λ (lambda): la tasa promedio de ocurrencia. Si un servidor recibe 4 requests por segundo en promedio, λ = 4. Todo lo demás se deriva de ahí.

Las tres funciones que importan

Cuando empecé a implementarla, noté que hay tres preguntas distintas que se pueden responder:

¿Cuán probable es que ocurran exactamente k eventos?

javascript
1function poissonPMF(lambda, k) {
2 return (Math.pow(lambda, k) * Math.exp(-lambda)) / factorial(k)
3}

Esto es la PMF (Probability Mass Function). Con λ = 4, la probabilidad de recibir exactamente 6 requests en un segundo es ~10.4%. No es la más común, pero es una pregunta válida.

¿Cuán probable es que ocurran k eventos o menos?

javascript
1function poissonCDF(lambda, k) {
2 let cumulative = 0
3 for (let i = 0; i <= k; i++) {
4 cumulative += poissonPMF(lambda, i)
5 }
6 return cumulative
7}

La CDF (Cumulative Distribution Function) acumula todas las probabilidades hasta k. Con λ = 4, la probabilidad de recibir 5 requests o menos es ~78.5%. Esta es la pregunta que realmente importa en planificación de capacidad.

¿Cómo simulo valores que sigan esta distribución?

javascript
1function poissonRandom(lambda) {
2 const L = Math.exp(-lambda)
3 let k = 0
4 let p = 1
5 do {
6 k++
7 p *= Math.random()
8 } while (p > L)
9 return k - 1
10}

El algoritmo de Knuth. La idea es elegante: multiplica números aleatorios hasta que el producto cae por debajo de e^-λ. El número de pasos que necesita sigue la distribución de Poisson de forma natural. No por magia, sino porque así funciona la probabilidad acumulada.

Lo que me sorprendió

Cuando implementé las tres funciones y las probé con ejemplos reales, el modelo encajó.

No en el sentido de "funciona el código". En el sentido de que entendí por qué esta distribución aparece en tantos sistemas distintos: un servidor web, un call center, el tráfico de una intersección, los goles de un partido de fútbol. Todos son el mismo problema. Eventos independientes que ocurren a una tasa constante.

El modelo funciona cuando se cumplen dos condiciones: los eventos son independientes entre sí, y la tasa promedio es estable. Cuando esas condiciones se rompen (un pico de tráfico en Black Friday, un accidente que bloquea la intersección), el modelo ya no aplica y hay que usar otro.

Eso también es valioso saberlo.

Una limitación técnica que vale la pena conocer

Para valores de k mayores a ~170, factorial(k) supera el límite de JavaScript y devuelve Infinity. Si necesitás trabajar con valores grandes, la solución es operar en escala logarítmica:

javascript
1function poissonPMFLog(lambda, k) {
2 const logP = k * Math.log(lambda) - lambda - logFactorial(k)
3 return Math.exp(logP)
4}

En lugar de multiplicar números enormes, sumás sus logaritmos. El resultado es el mismo, pero sin el desbordamiento.


A veces la mejor forma de entender un modelo matemático es implementarlo. No leer sobre él, no ver la fórmula: escribir el código, meter números reales, ver qué sale.

Con Poisson me pasó eso.