Método de Monte Carlo · Tema 29

Comparación de métodos

El mismo presupuesto, las mismas semillas: qué técnica gana en tu problema.

01 · Punto de partida

Comparar en serio, no a ojo

Cada técnica promete menos σ, pero solo en su terreno. La comparación justa exige mismo presupuesto de evaluaciones, mismas semillas y métrica común: el factor (s_crudo/s_nuevo)².

En e^x gana el control; en picos, el estratificado; en colas, IS. El crudo es el árbitro.

  • ¿Cuál es el presupuesto común (evals)?
  • ¿Uso las mismas semillas para todos?
  • ¿Mido factor o solo SE?
  • ¿El ganador paga su complejidad?

02 · Definición

Reglas del duelo

💰

Presupuesto

Igual n° de evaluaciones f: N pares = 2N crudas. El tiempo manda.

🌱

Semillas

Mismas U base para todos: la diferencia es técnica, no suerte.

📏

Factor

(s_crudo/s)² con s sobre el estimador final. 4× = de 20 000 a 5 000.

Guía rápida por problema (e^x, pico, cola).
ProblemaGanadorFactor típico
e^x suave monótonaControl (x)~17×
Pico en [0,9, 1]Estratificado10×+ (hasta exacto)
P(Z > 3)IS N(3,1)50–100×
Plana sin estructuraCrudo1×: no complicar

03 · Protocolo

Fijar N→Mismas U→Factor
  1. 1
    Fijar presupuesto.

    Ej.: 4 000 evals para todos. Antitético: 2 000 pares; resto: 4 000.

  2. 2
    Reutilizar U.

    Generar una base U y derivar cada método de ella (pares, estratos, controles).

  3. 3
    Medir y decidir.

    s, SE y factor por método. Elegir el de mayor factor/costo.

Varianza común
Usar las mismas U correlaciona los estimadores: la diferencia se mide con menos ruido.
Costo por eval
Si IS evalúa p y q, cuesta ~2×: el factor debe superar 2.
Robustez
Repetir el duelo con 5 semillas: el ganador debe ganar siempre, no una vez.

04 · Duelo en e^x

Integral e^x en [0,1] = e−1 con 4 000 evals para todos. Resultado típico:

  1. 1
    Crudo.

    SE ≈ 0,008. Referencia 1×.

  2. 2
    Antitético.

    SE ≈ 0,005. Factor ~3×.

  3. 3
    Control x.

    SE ≈ 0,002. Factor ~17×. Ganador aquí.

  4. 4
    Estratificado 4.

    SE ≈ 0,004. Factor ~4×. Segundo.

05 · Representación en Python

Benchmark justo en 20 líneas

Python en tu navegador. Misma base U, cuatro estimadores, cuatro s.

import random
import math
import statistics

N = 4000
us = [random.random() for _ in range(N)]
crudo = [math.exp(u) for u in us]
anti = [(math.exp(us[i]) + math.exp(1-us[i]))/2 for i in range(0, N, 2)]
mc = sum(us)/N
b = sum((y-sum(crudo)/N)*(c-mc) for y, c in zip(crudo, us))/sum((c-mc)**2 for c in us)
ctrl = [y-b*(c-0.5) for y, c in zip(crudo, us)]
K = 4
est = []
for k in range(K):
    xs = [(k+random.random())/K for _ in range(N//K)]
    est += [math.exp(x) for x in xs]

def se(a):
    return statistics.pstdev(a)/math.sqrt(len(a))
print("crudo", round(se(crudo), 5))
print("anti", round(se(anti), 5))
print("control", round(se(ctrl), 5))
print("estrat", round(se(est), 5))

06 · Exploración

Laboratorio: el duelo en vivo

Cuatro barras con bigotes ±2·SE para e−1 ≈ 1,718 con igual presupuesto. Cambiá N y mirá quién se achica más.

EXPERIMENTO 29

Mismo N, distinto ±

factor = s_crudo² / s²

Los resultados numéricos aparecen debajo.
Ganador—
Factor ganador—
Crudo ±—
Lectura—

Tocá «Duelo» para comparar.

Verde corto = ganador. Si dos empatan, gana el más simple: menos código, menos bugs.

Preguntas para explorar

  1. ¿Gana siempre el control en e^x?
  2. ¿El ranking cambia con N?
  3. ¿Qué método elegirías para un pico agudo?
Ver respuestas sugeridas
  1. Sí: ρ ≈ 0,97 es imbatible aquí. Factor 12–20 estable.
  2. No el orden, solo los anchos: los factores son propiedad de f.
  3. Estratificado o IS: el control con x no ve picos locales.

07 · Comprensión

Confusiones frecuentes

«Comparo con N distintos»

Sin igual presupuesto no hay duelo: el de más N gana por gastar más, no por ser mejor.

«Gana el de media más linda»

Gana el de menor SE con igual media. La media debe coincidir (insesgados).

«Un duelo basta»

Repetir con 5 semillas: si el ganador rota, empatan.

«El ganador vale para todo»

Solo para esa f y ese N. Cambia el problema, cambia el duelo.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: duelo mínimo

Compará crudo vs antitético para e^x con 4 000 evals.

import random
import math
import statistics

us = [random.random() for _ in range(4000)]
crudo = [math.exp(u) for u in us]
anti = [(math.exp(us[i])+math.exp(1-us[i]))/2 for i in range(0, 4000, 2)]
print(statistics.pstdev(crudo)/math.sqrt(4000))
print(statistics.pstdev(anti)/math.sqrt(2000))
Ver solución razonada

~0,008 vs ~0,005: antitético gana ~3× con igual evals.

Ejercicio 2: precio del IS

Si IS evalúa 2 densidades por muestra, ¿qué factor mínimo lo justifica?

print("Factor > 2 para empatar en tiempo; > 4 para convenir.")
Ver solución

En colas el factor es 50+: paga. En cuerpos con factor 1,5 no paga.

Ejercicio 3: elegir por problema

Elegí técnica para: a) e^x, b) pico [0,9, 1], c) P(Z > 3).

Ver una posible respuesta
print("a) control x; b) estratificado; c) IS N(3,1)")

Suave → control; pico → estratos; cola → IS. Diagnóstico antes que moda.

09 · Síntesis

Ideas para recordar

  • Duelo justo: mismo presupuesto, mismas U, factor común.
  • e^x: control gana (~17×); pico: estratificado; cola: IS.
  • El factor es de f, no de N: el ranking es estable.
  • Desempatar por simplicidad si los SE empatan.
  • Repetir el duelo: el ganador debe ganar siempre.

En el próximo tema diseñaremos los experimentos: el diseño de experimentos Monte Carlo.