4.5 Simulering og stokastiske eksperimenter
Monte Carlo-simulering, Python og GeoGebra, store talls lov.
Kasinoet som ble metode
Under andre verdenskrig satt fysikere og strevde med sannsynlighetsberegninger som var altfor kompliserte å løse med penn og papir. Løsningen deres var like enkel som den var radikal: ikke regn ut svaret — spill spillet tusenvis av ganger og tell. Metoden fikk navn etter kasinoet i Monte Carlo, fordi den bygger på tilfeldighet, akkurat som rulett.
Monte Carlo-simulering følger fire steg: definer en modell for det stokastiske forsøket, generer tilfeldige tall som simulerer forsøket, gjenta et stort antall ganger , og bruk de observerte frekvensene som estimat for sannsynlighetene: .
Hvorfor simulere? Noen problemer er for kompliserte til å løse eksakt. Simulering gir dessuten en intuitiv forståelse av sannsynlighet, digitale verktøy gjør det trivielt å kjøre tusenvis av forsøk, og resultatene kan brukes til å kontrollere analytiske beregninger.
Råvaren er tilfeldige tall. I praksis bruker datamaskiner pseudotilfeldige tallgeneratorer (PRNG): algoritmer som produserer tallsekvenser som ser tilfeldige ut, men egentlig er deterministiske, bestemt av en startverdi kalt «seed». I Python gir random.random() et uniformt tall i , random.randint(a, b) et tilfeldig heltall mellom og , og random.choice(liste) et tilfeldig element; med random.seed(42) blir kjøringen reproduserbar. I GeoGebra heter verktøyene Tilfeldig() og TilfeldigMellom(a, b). Med disse byggeklossene kan vi simulere alt fra terningkast til kompliserte køsystemer — og til og med beregne .
Å treffe pi med dartpiler
Det klassiske eksempelet på Monte Carlo er nesten poetisk: vi estimerer ved å kaste tilfeldige punkter. Tenk deg et kvadrat med en innskrevet sirkel med radius 1. Et tilfeldig punkt i kvadratet ligger innenfor sirkelen hvis , og sannsynligheten for det er forholdet mellom arealene: Dermed er , der er andelen treff i simuleringen.
I Python er hele eksperimentet noen få linjer: en løkke som genererer punkter med random.uniform(-1, 1) for både og , teller hvor mange som oppfyller x**2 + y**2 <= 1, og skriver ut 4 * innenfor / N. Med ga en kjøring — riktig på fire desimaler.
Men hvor nøyaktig kan vi vente at estimatet er? Her trengs et mål på presisjon: standardfeilen til et simuleringsestimat er omtrent . For er den rundt ; for rundt — som stemmer pent med avviket vi faktisk så. Legg merke til kvadratrotens tyranni: for å få én desimal mer presisjon (ti ganger mindre feil) må du kjøre hundre ganger flere forsøk. Det er derfor man typisk bruker for god presisjon, og heller millioner når maskinen har tid.
Dette mønsteret — at estimater blir jevnt bedre med flere forsøk — er ikke en tilfeldighet. Det er en matematisk lov, og den har et navn.
Loven bak det hele
Simuler 5000 myntkast og plot andelen kron underveis. Grafen forteller en historie: i starten svinger andelen vilt — etter ti kast kan den fint være 0,7 — men etter hvert som kastene hoper seg opp, roer kurven seg og legger seg tettere og tettere rundt 0,5. Svingningene avtar i takt med .
Dette er store talls lov i praksis. Formelt: la være uavhengige stokastiske variabler med samme fordeling og forventningsverdi . Da gjelder Gjennomsnittet av observasjonene nærmer seg forventningsverdien når antall forsøk øker. Loven gjelder for alle fordelinger med endelig forventningsverdi.
Konsekvensene er store. Den relative frekvensen av en hendelse nærmer seg den teoretiske sannsynligheten — det er derfor Monte Carlo-metoden i det hele tatt fungerer. Gjennomsnittlig gevinst i et spill nærmer seg forventningsverdien — det er derfor kasinoet alltid vinner til slutt, og derfor forsikringsselskaper kan prise polisene sine. Og estimater fra simulering blir bedre med større , med standardfeil .
Men loven misforstås ofte, og misforståelsen har et navn: gamblerfeilslutningen. Store talls lov sier ikke at det «jevner seg ut» på kort sikt. Har mynten gitt fem kron på rad, er sannsynligheten for kron i neste kast fortsatt nøyaktig 0,5 — mynten har ingen hukommelse og skylder ingen mynt-utfall. Utjevningen skjer ikke ved at fortiden kompenseres, men ved at den druknes: fem ekstra kron betyr ingenting i et gjennomsnitt over hundre tusen kast. Hvert enkelt forsøk er og blir helt tilfeldig; det er bare gjennomsnittene som er forutsigbare.
Oppsummering: tell deg til svaret
Monte Carlo-metoden snur sannsynlighetsregningen på hodet: i stedet for å regne ut svaret, simulerer vi forsøket mange ganger og teller. Oppskriften er fast — modeller forsøket, generer tilfeldige tall, gjenta ganger, og bruk frekvensen som estimat: . Verktøyene er pseudotilfeldige tallgeneratorer: random.random(), random.randint() og random.choice() i Python (med random.seed() for reproduserbarhet), og Tilfeldig() og TilfeldigMellom() i GeoGebra. Slik kastet vi en million dartpiler mot et kvadrat og fikk riktig på fire desimaler.
Presisjonen styres av standardfeilen : gir feil rundt 0,01, og hver tidobling av nøyaktigheten koster hundre ganger flere forsøk.
Fundamentet under det hele er store talls lov: når for alle fordelinger med endelig forventningsverdi. Den forklarer hvorfor relative frekvenser nærmer seg teoretiske sannsynligheter, hvorfor simulering fungerer, og hvorfor aktører som ser millioner av uavhengige utfall — kasinoer, forsikringsselskaper — kan stole på gjennomsnittene sine. Men husk hva loven ikke sier: den lover ingen utjevning på kort sikt. Mynten husker ingenting, og fem kron på rad endrer ikke neste kast. Tilfeldigheten regjerer i hvert enkelt forsøk — det er bare i det lange løp den blir tellbar, forutsigbar og, med en datamaskin til hjelp, et av de mest praktiske verktøyene i moderne statistikk.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.