Monte Carlo-metoder
Kunna skatta sannolikheter och integraler med simulering och bedöma antalet körningar som krävs.
Förkunskaper
Intuition
Monte Carlo: när något är svårt att räkna ut exakt — simulera det många gånger och räkna.
Sannolikheten att summan av tre tärningar blir minst 15? Du kan räkna kombinatoriskt. Eller kasta 100 000 gånger i kod och räkna andelen. Svaret blir lika användbart och tar tre rader.
Felet minskar som 1/√n. Det betyder:
- 100 körningar → osäkerhet ~10 %
- 10 000 → ~1 %
- 1 000 000 → ~0,1 %
Hundra gånger fler körningar för tio gånger bättre precision. Det är metodens pris — och varför man inte simulerar sig till godtycklig noggrannhet.
Kod
import numpy as np
rng = np.random.default_rng(0)
# 1. Sannolikhet: tre tärningar, summa ≥ 15
kast = rng.integers(1, 7, size=(200_000, 3)).sum(axis=1)
p = float((kast >= 15).mean())
se = float(np.sqrt(p * (1 - p) / len(kast)))
print(f"{p:.4f} ± {1.96*se:.4f}") # 0.0925 ± 0.0013
# 2. Integral: arean under en kurva som saknar enkel primitiv
f = lambda x: np.exp(-x**2)
x = rng.uniform(0, 2, 500_000)
print(round(float(f(x).mean() * 2), 4)) # 0.8821 (exakt: 0.88208)
# 3. Osäkerhet i ett resultat (parametrisk bootstrap)
acc = rng.binomial(200, 0.85, size=10_000) / 200
print(np.percentile(acc, [2.5, 97.5]).round(3)) # [0.8 0.9]
Var det används i ML: bootstrap-konfidensintervall, dropout vid inferens som osäkerhetsskattning (MC dropout), sampling ur generativa modeller, förväntad nytta i beslutsanalys, och simulerad miljö i RL.
Beräkna alltid felmarginalen. En Monte Carlo-siffra utan osäkerhet är en gissning med onödigt många decimaler.
Behärskning innebär
- Skattar sannolikheter och integraler med simulering
- Bedömer hur många körningar som krävs
- Förklarar 1/√n-konvergensen
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — Monte Carlo-metod (CC BY-SA 4.0) — CC BY-SA 4.0