Método de Monte Carlo · Tema 43

Errores frecuentes

El museo de los tropiezos: 8 bugs clásicos con su síntoma y su vacuna.

01 · Punto de partida

Equivocarse es barato, no detectarlo es caro

El 90% de las simulaciones rotas fallan por 8 causas conocidas: F equivocada, U reutilizada, ×(b−a) olvidado, parada en el cruce, s por SE, semillas, N mágico y media sin ±. Con checklist se cazan en minutos.

Este tema es la vacuna antes del proyecto final.

  • ¿Mi F es la del problema o la cómoda?
  • ¿Cada columna usa su U fresco?
  • ¿Multipliqué por el ancho/volumen?
  • ¿Paré por regla o por cruce lindo?

03 · Tres bugs en detalle

🔁

U reutilizada

Usar x = y en π estima 2,83, no 3,14. La diagonal delata: nube en línea, no nube.

✖️

Sin ×ancho

∫₀^π sin sin ×π da 0,64 (altura) en vez de 2 (integral). Factor 5 de error.

🎯

Parar en cruce

π̂ cruza 3,1416 con N = 300 y se va. Parar ahí es elegir la suerte.

04 · Síntomas que delatan

  1. 1
    π ≈ 2,83 clavado.

    U reutilizada (x = y). Nube en diagonal.

  2. 2
    Integral 3× menor.

    Falta ×(b−a). Revisar escala.

  3. 3
    «Exacto» con N = 200.

    Cruce casual. Pedir banda, no punto.

05 · Representación en Python

Cazar los 3 bugs en código

Python en tu navegador. Mal vs bien, lado a lado.

import random
import math

N = 10000
# Bug 2: x = y en pi
mal = sum(1 for _ in range(N) if (u := random.random())**2 + u**2 <= 1) / N * 4
bien = sum(1 for _ in range(N) if random.random()**2 + random.random()**2 <= 1) / N * 4
print("pi mal (x=y):", round(mal, 3), "bien:", round(bien, 3))

# Bug 3: sin x(b-a)
mal2 = sum(math.sin(random.random()*math.pi) for _ in range(N)) / N
print("sin mal (sin xpi):", round(mal2, 3), "bien:", round(mal2*math.pi, 3), "(2.0)")

06 · Exploración

Laboratorio: museo del bug

Elegí el bug y N. Barra roja con bug vs verde correcta y línea de la exacta. El bug no se mueve con N: es sesgo, no ruido.

EXPERIMENTO 43

Sesgo que N no cura

mal vs bien vs exacta

Los resultados numéricos aparecen debajo.
Con bug—
Correcto—
Exacta—
Lectura—

Tocá «Cazar» para comparar.

El verde tiembla alrededor de la exacta y se calma con N. El rojo vive lejos siempre: más N no lo trae.

Preguntas para explorar

  1. Con N = 30 000, ¿el rojo se acerca a la exacta?
  2. ¿Cómo distinguir sesgo de ruido con N?
  3. ¿Qué test cazaría cada bug en 1 minuto?
Ver respuestas sugeridas
  1. No: 2,83 y 0,64 clavados. Sesgo ≠ ruido.
  2. El ruido cae 1/√N; el sesgo no se mueve. Si no se mueve con ×4 N, es bug.
  3. π ≈ 3,14 y ∫₀^π sin = 2: dos asserts que cazan el 80%.

07 · Checklist

Antibugs en 1 minuto

Checklist pre-informe (copiar y pegar)

☐ F validada sola · ☐ U frescos · ☐ ×(b−a)/Vol · ☐ N por fórmula · ☐ R semillas · ☐ media ± SE + IC · ☐ test π/x² pasa · ☐ código + semillas versionados.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: detectar sesgo con ×4 N

Si con N y 4N da lo mismo lejos de la exacta, ¿ruido o bug?

print("Bug: el ruido caería a la mitad; si no se mueve, es sesgo.")
Ver solución razonada

Regla de oro del debug Monte Carlo: ×4 N parte el ruido a la mitad. Lo que queda es sesgo.

Ejercicio 2: asserts de humo

Escribí 2 asserts que fallen con los bugs del laboratorio.

import random
import math

N = 5000
pi = sum(1 for _ in range(N) if random.random()**2 + random.random()**2 <= 1)/N*4
assert abs(pi-3.14) < 0.1, pi
s = sum(math.sin(random.uniform(0, math.pi)) for _ in range(N))/N*math.pi
assert abs(s-2) < 0.1, s
print("humo OK")
Ver solución

Con bug dan 2,83 y 0,64: los asserts gritan. Sin bug pasan.

Ejercicio 3: s vs SE

Con s = 15 y N = 100, ¿informás ±15 o ±1,5?

Ver una posible respuesta
print(15/(100**0.5))

±1,5: el error del promedio, no la dispersión del dato.

09 · Síntesis

Ideas para recordar

  • Sesgo no se mueve con N; ruido cae 1/√N: ×4 N diagnostica.
  • 8 bugs cubren el 90%: F, U, ×ancho, cruce, s/SE, semillas, N, ±.
  • Test π + x²(1,2) + moneda cazan casi todo en 1 minuto.
  • Checklist pre-informe siempre, sin excepciones.
  • Versionar código + semillas: bug reproducible es bug cazable.

En el próximo y último tema integraremos todo: el proyecto integral de Monte Carlo.