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?
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?
1function poissonCDF(lambda, k) {2 let cumulative = 03 for (let i = 0; i <= k; i++) {4 cumulative += poissonPMF(lambda, i)5 }6 return cumulative7}
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?
1function poissonRandom(lambda) {2 const L = Math.exp(-lambda)3 let k = 04 let p = 15 do {6 k++7 p *= Math.random()8 } while (p > L)9 return k - 110}
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:
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.