Generación de Variables Aleatorias · Tema 20

Generación de Poisson

Eventos raros en un intervalo: método de Knuth por productos e interarribos exponenciales, con media y varianza λ.

01 · Punto de partida

Cuántos llegan por intervalo

¿Cuántas llamadas entran por minuto? ¿Cuántos clientes llegan por hora? ¿Cuántos clics raros ocurren por día? Todos son Poisson(λ): conteo de eventos en un intervalo fijo cuando los eventos son independientes y con tasa media λ.

Es el límite de la Binomial del Tema 19 con n grande y p chica (λ = np), y la contracara del tiempo exponencial del Tema 22: contar eventos o medir esperas son dos vistas del mismo proceso.

  • ¿Por qué multiplicar uniformes hasta cruzar e^(−λ) da Poisson?
  • ¿Qué significa que media y varianza valgan lo mismo?
  • ¿Cuándo Poisson aproxima a Binomial y cuándo a normal?
  • ¿Qué método usar si λ = 2 y si λ = 200?

02 · Definición

Masa, equidispersión y memoria del proceso

Soporte {0,1,2,…} sin tope. F en escalera infinita. La igualdad media = varianza se llama equidispersión: es la firma para auditar el generador. Los tiempos entre eventos son Exp(λ) independientes.

∏U

Producto de Knuth

Multiplicar Uᵢ hasta que el producto caiga bajo e^(−λ). El conteo de factores de más es Poisson(λ). Exacto y sin tablas.

⏱

Interarribos Exp

Sumar −ln(U)/λ hasta superar 1 (intervalo unidad). Cada suma es una espera; contarlas es contar eventos. Misma ley, otra intuición.

=

Equidispersión

Media ≈ varianza ≈ λ en la muestra. Si la varianza duplica a la media, no es Poisson: hay ráfagas o sobredispersión.

La misma receta, distinta tasa: de ralo a denso.
CasoMedia = VarP(X=0)Lectura
Poisson(1)1,00,368Ralo: muchos ceros, cola corta
Poisson(4)4,00,018Típico: campana asimétrica 1–8
Poisson(10)10,00,00005Denso: casi simétrico, ancho √10

03 · Anatomía

Knuth, inversión y λ grande

Knuth por productos O(λ)
Fijar L = e^(−λ), multiplicar q *= U hasta q ≤ L. Gasta media λ+1 uniformes por muestra. Perfecto si λ ≤ 20.
Inversión por CDF O(λ)
Un U contra F(0), F(1), … con recurrencia P(k+1) = P(k)·λ/(k+1). Un uniforme por muestra, ideal con tabla precomputada y λ moderada.
Interarribos exponenciales
Acumular −ln(U)/λ hasta pasar 1. Matemáticamente idéntico a Knuth (producto ↔ suma de logs). Útil para simular además los instantes de llegada, no solo el conteo.
λ grande (≥ 30)
Knuth gasta 30+ U por muestra y e^(−λ) subfluye a 0 en doble. Pasar a normal N(λ,λ) redondeada o a rechazo PTRS (Tema 39): aproximado pero O(1).

Knuth / interarribos

Exacto y sin tablas

La opción por defecto con λ chica o media. Además enseña la conexión Poisson ↔ exponencial.

Normal o rechazo

Rápido con λ grande

Con λ ≥ 30 la campana N(λ,λ) es buena base; el rechazo la corrige. Validar media, varianza y cola.

04 · Dónde late Poisson

Del conteo al proceso

Exp(λ)→suma ≤ 1→Poisson(λ)
  1. 1
    Llegadas y colas.

    Llamadas, clientes, paquetes por intervalo: demanda del simulador de colas.

  2. 2
    Eventos raros.

    Fallas, errores, mutaciones, clics con p chica: Bin(n,p) con n grande ⇒ Poisson(np).

  3. 3
    Thinning.

    Quedarse con cada evento con prob. p: Poisson(λ) ⇒ Poisson(λp) con una Bernoulli por evento. (Tema 16)

  4. 4
    Puente a exponencial.

    Contar eventos en [0,1] o medir esperas Exp(λ) es el mismo proceso visto de dos lados. (Tema 22)

05 · Representación en Python

Knuth e interarribos lado a lado

Mismo λ, dos escrituras del mismo proceso: producto contra umbral, o suma de exponenciales contra 1.

Python en tu navegador. Subí λ a 10: la varianza debe seguir a la media.

import random
import math

random.seed(160)
lam, N = 4.0, 8000
L = math.exp(-lam)

def poisson_knuth(lam, L):
    k, q = 0, 1.0
    while True:
        q *= random.random()
        if q <= L:
            return k
        k += 1

def poisson_exparribos(lam):
    t, k = 0.0, 0
    while True:
        t += -math.log(1 - random.random()) / lam
        if t > 1.0:
            return k
        k += 1

m1 = [poisson_knuth(lam, L) for _ in range(N)]
m2 = [poisson_exparribos(lam) for _ in range(N)]
media1 = sum(m1) / N
var1 = sum((x - media1) ** 2 for x in m1) / N
print("knuth media:", round(media1, 3), "var:", round(var1, 3), "teo:", lam)
print("exparribos media:", round(sum(m2) / N, 3))
print("P(X=0):", round(m1.count(0) / N, 4), "vs", round(math.exp(-lam), 4))

Media ≈ 4,0, var ≈ 4,0 y P(X=0) ≈ 0,0183. Si la varianza se despega de la media, el generador no es Poisson.

06 · Exploración

Laboratorio: de ralo a denso

Movete λ con N fijo. Las barras son frecuencia 0…20 (+ cola ≥21); los rombos, e^(−λ)λ^k/k!. Con λ = 1 dominan 0–2; con λ = 10 aparece la campana ancha.

EXPERIMENTO 20

Poisson por Knuth

q *= U hasta q ≤ e^(−λ)

Los resultados numéricos aparecen debajo.
Media muestral4,000
Teórica λ4,000
Var. muestral4,000
P(X=0) muestral0,018

Con λ 4,0 y N 6000, media y varianza ≈ 4.

21 barras 0–20 más cola. Probá λ = 1 (ralo) y λ = 10 (denso casi simétrico).

Preguntas para explorar

  1. Con λ = 4, ¿media, varianza y P(X=0) teóricas? Leelas en el panel.
  2. Bajá a λ = 1. ¿P(X=0) sube a ≈ 0,368? ¿La varianza baja a 1?
  3. Subí a λ = 12. ¿Por qué la forma se parece a una normal?
Ver respuestas sugeridas
  1. Media 4, varianza 4 y P(X=0) = e^(−4) ≈ 0,0183.
  2. Sí: e^(−1) ≈ 0,368 y Var = 1. Casi todo cae en 0, 1 y 2.
  3. Por el teorema central del límite: Poisson(λ) es suma de λ Poisson(1); con λ grande la campana N(λ,λ) la aproxima.

07 · Comprensión

Confusiones frecuentes

«Poisson es Binomial con decimales»

No: Poisson cuenta 0,1,2,… sin tope n. Solo coincide como límite Bin(n,λ/n) con n grande y p = λ/n chica.

«La media alcanza para validar»

Una geométrica o una binomial pueden compartir media con otra λ. La firma Poisson es media = varianza + P(X=0) = e^(−λ).

«Knuth sirve para cualquier λ»

Solo hasta λ ≈ 20–30: el costo crece con λ y e^(−λ) subfluye. Con λ grande, normal o rechazo.

«λ puede ser negativo o conteo con tope»

λ > 0 es tasa media; el soporte es infinito. Un conteo 0…n con tope es binomial, no Poisson.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: call center

λ = 6 llamadas/minuto, N = 6000 (semilla 161): estimá media (≈ 6), varianza (≈ 6) y P(0) (≈ 0,0025).

import random
import math

random.seed(161)
lam, N = 6.0, 6000
L = math.exp(-lam)

def poisson(lam, L):
    k, q = 0, 1.0
    while True:
        q *= random.random()
        if q <= L:
            return k
        k += 1

m = [poisson(lam, L) for _ in range(N)]
media = sum(m) / N
print(round(media, 3), "vs", lam)
print(round(sum((x - media) ** 2 for x in m) / N, 3), "vs", lam)
print(round(m.count(0) / N, 4), "vs", round(math.exp(-lam), 4))
Ver solución razonada

≈ 6,0, ≈ 6,0 y ≈ 0,0025 (típicamente 0,001–0,004). Con N = 6000 se esperan ~15 ceros: pocos pero visibles.

Ejercicio 2: límite binomial

Compará Bin(1000; 0,004) por suma contra Poisson(4) con 3000 réplicas: medias y P(X=0) deben coincidir.

import random
import math

random.seed(162)
n, p, lam, N = 1000, 0.004, 4.0, 3000
L = math.exp(-lam)
b = [sum(1 for _ in range(n) if random.random() < p) for _ in range(N)]
random.seed(162)
k, q = 0, 1.0
poi = []
for _ in range(N):
    kk, qq = 0, 1.0
    while True:
        qq *= random.random()
        if qq <= L:
            poi.append(kk)
            break
        kk += 1
print(round(sum(b) / N, 3), "vs", round(sum(poi) / N, 3), "vs 4.0")
print(round(b.count(0) / N, 3), "vs", round(poi.count(0) / N, 3))
Ver solución

Ambas ≈ 4,0 y P(0) ≈ 0,018. Es la ley de los eventos raros: n grande × p chica con np fijo ⇒ Poisson.

Ejercicio 3: thinning que escala la tasa

Generá 3000 Poisson(8) y quedate con cada evento con p = 0,25: debe dar Poisson(2).

Ver una posible respuesta
import random
import math

random.seed(163)
lam, p, N = 8.0, 0.25, 3000
L = math.exp(-lam)

def poisson(lam, L):
    k, q = 0, 1.0
    while True:
        q *= random.random()
        if q <= L:
            return k
        k += 1

adelgazada = [sum(1 for _ in range(poisson(lam, L)) if random.random() < p)
              for _ in range(N)]
media = sum(adelgazada) / N
print(round(media, 3), "vs", lam * p)
print(round(sum((x - media) ** 2 for x in adelgazada) / N, 3), "vs", lam * p)

Media y varianza ≈ 2,0. Cada evento sobrevive como Bernoulli(p): thinning de Poisson es Poisson(λp).

09 · Síntesis

Ideas para recordar

  • Poisson(λ): P(X=k) = e^(−λ)λ^k/k!, media = varianza = λ.
  • Knuth (productos) e interarribos Exp: exactos, O(λ), ideales con λ ≤ 20.
  • Inversión con recurrencia P(k+1) = P(k)·λ/(k+1): 1 uniforme por muestra.
  • Límite de Bin(n,λ/n); con λ grande ⇒ campana N(λ,λ).
  • Auditar media + varianza + P(X=0) = e^(−λ).

En el próximo tema cambiamos de conteos a continuo: la uniforme continua U(a,b).