track
Vissa sannolikhetsfördelningar är helt enkelt för komplexa för att du ska kunna arbeta direkt med dem.
När du modellerar data från verkligheten går matematiken ofta i kras innan du kommer någonvart. Det händer ofta att integraler ser hanterbara ut på papper, men blir olösbara i samma stund som du lägger till ett par latenta variabler. Detta är särskilt vanligt i Bayesiansk inferens, där den posteriora fördelningen kombinerar dina priorer med observerade data – och resultatet är något du inte kan sammanfatta med en enkel formel.
Den grundläggande idén med Markovkedje–Monte Carlo är att MCMC, i stället för att arbeta direkt med matematiken, utforskar fördelningen genom simulering. Den drar stickprov som återspeglar dess form utan att någonsin behöva beräkna den fullt ut.
I den här artikeln går jag igenom kärnkoncepten bakom MCMC, går igenom de vanligaste algoritmerna och visar hur du använder det i Python.
Behöver du fräscha upp matten i Python? Läs våra blogginlägg Demystifying Mathematical Concepts for Deep Learning för att se matte tillämpad i Numpy.
Vad är Markovkedje–Monte Carlo?
Markovkedje–Monte Carlo (MCMC) är en familj av algoritmer som genererar stickprov från sannolikhetsfördelningar – även när dessa fördelningar är för komplexa för att arbeta med direkt.
Namnet delas upp i två delar. Markovkedja styr hur algoritmen rör sig genom möjliga tillstånd. Varje steg beror bara på var du befinner dig just nu, inte på hela historiken av hur du kom dit. Monte Carlo betyder att du använder slumpmässig sampling för att uppskatta storheter av intresse.
Tillsammans bygger MCMC en kedja av slumpmässiga stickprov som över tid speglar formen på din målfördelning. Det är i första hand en sampelteknik. Du löser inte matematiken exakt, utan approximerar den genom simulering.
Varför Markovkedje–Monte Carlo behövs
Problemet med fördelningar i verkliga data är att de inte alls är så prydliga som i läroböckerna.
I Bayesiansk inferens försöker du ofta beräkna en posterior fördelning – den uppdaterade sannolikheten för dina modellparametrar efter att ha sett data. Formeln ser enkel ut på papper: multiplicera priorn med sannolikheten och dela sedan med den marginella sannolikheten. Den sista termen kräver integrering över varje möjligt parametervärde. I hög dimension är den integralen praktiskt taget omöjlig att beräkna.
Det blir bara värre ju större din modell blir. När du lägger till fler parametrar eller fler latenta variabler blir exakt beräkning en återvändsgränd. Du stöter på detta i många vanliga scenarier:
- Bayesianska hierarkiska modeller: Där parametrar beror på andra parametrar och skapar nästlade fördelningar som inte integrerar snyggt
- Högdimensionella posteriorer: Där antalet parametrar gör rutnätsbaserade approximationer beräkningsmässigt oförenliga
- Icke-konjugerade priorer: Där prior och likelihood inte kombineras till en igenkännbar fördelning
MCMC är en bra lösning i dessa scenarier. I stället för att beräkna fördelningen drar det stickprov från den. De stickproven innehåller allt du behöver utan att någonsin lösa integralen.
De två idéerna bakom MCMC
MCMC kombinerar två idéer som var för sig är ganska enkla men kraftfulla tillsammans. Låt mig gå igenom dem.
Markovkedjor
En Markovkedja är en sekvens av tillstånd där varje steg bara beror på var du befinner dig just nu.
Var du har varit tidigare spelar ingen roll. Endast ditt nuvarande tillstånd avgör vart du går härnäst. Denna ”minneslösa” egenskap – formellt kallad Markovegenskapen – är det som gör matematiken hanterbar och algoritmen praktisk.
Kedjan rör sig genom tillstånd ett steg i taget, och med rätt uppsättning stabiliserar den sig så småningom i en stationär fördelning – ett stabilt mönster där sannolikheten att vara i ett visst tillstånd slutar förändras. Det är just den stabila fördelningen som MCMC är designat för att arbeta med.
Monte Carlo-metoder
Monte Carlo-metoder använder slumpmässig sampling för att uppskatta storheter som är svåra att beräkna direkt.
Idén är att dra tillräckligt många slumpmässiga stickprov från en fördelning och sedan uppskatta dess medelvärde, varians eller andra egenskaper bara genom att titta på stickproven. Ju fler stickprov du drar, desto närmare kommer dina uppskattningar de sanna värdena.
På egen hand kräver Monte Carlo-metoder att du kan sampla direkt från fördelningen – vilket är precis problemet vi försöker lösa. Markovkedjor tar hand om den delen.
Hur Markovkedje–Monte Carlo fungerar
MCMC är en loop med ett enkelt beslut i varje steg.
- Börja med ett initialt tillstånd: Välj en startpunkt i ditt parameterutrymme, även om det är en grov gissning
- Föreslå ett nytt tillstånd: Använd en förslagsmekanism för att föreslå vart du ska flytta härnäst
- Avgör om det ska accepteras: Jämför det föreslagna tillståndet med det nuvarande och acceptera eller förkasta baserat på hur sannolika de är under målfördelningen
- Upprepa: Kör denna loop tusentals gånger och samla stickprov längs vägen
- Använd stickproven: Skatta medelvärden, trovärdighetsintervall eller andra storheter av intresse från de insamlade stickproven
Det är i acceptera/förkasta-steget som ”magin” sker.
Genom att acceptera bättre tillstånd oftare än sämre dras kedjan mot områden med hög sannolikhet – utan att någonsin behöva beräkna hela fördelningen.
Tidiga stickprov beror på var du startade, så de kasseras. Efter tillräckligt många iterationer glömmer kedjan sin startpunkt och de återstående stickproven speglar den sanna formen på din målfördelning.
Målfördelningen och stationär fördelning
MCMC bygger på målet att generera stickprov från en målfördelning som du inte kan sampla från direkt.
Målfördelningen är det du försöker lära dig om – oftast en posterior i Bayesiansk inferens. Du känner dess form upp till en normaliseringskonstant, men du kan inte beräkna den konstanten direkt. MCMC behöver den inte.
Varje MCMC-algoritm är konstruerad så att dess Markovkedja har en stationär fördelning som matchar målet. En stationär fördelning är den fördelning kedjan landar i efter tillräckligt många steg.
Låt kedjan fortsätta så börjar den producera stickprov som ser ut precis som dragningar från din målfördelning. Integralen kringgås.
Populära Markovkedje–Monte Carlo-algoritmer
Det finns ett antal MCMC-algoritmer som du ser i praktiken. De följer samma grundloop men skiljer sig i hur de föreslår nya tillstånd och hur de använder information om målfördelningen.
Metropolis-algoritmen
Metropolis-algoritmen är den enklaste MCMC-algoritmen och den som startade allt.
Vid varje steg föreslår den ett nytt tillstånd genom att lägga till slumpbrus till det nuvarande. Om det föreslagna tillståndet har högre sannolikhet under målfördelningen accepteras det alltid. Om det är lägre accepteras det med en sannolikhet proportionell mot kvoten mellan de två sannolikheterna – annars står kedjan still.
Denna acceptera/förkasta-mekanism gör att kedjan tillbringar mer tid i högsannolika områden utan att någonsin beräkna hela fördelningen.
Metropolis använder en symmetrisk förslagsfördelning, vilket betyder att det är lika sannolikt att föreslå ett steg i vilken riktning som helst. Den tenderar att haverera när modeller växer.
Metropolis–Hastings-algoritmen
Metropolis–Hastings (MH) generaliserar Metropolis genom att tillåta asymmetriska förslagsfördelningar.
MH justerar acceptanssannolikheten för att ta hänsyn till att vissa förslag är mer sannolika än andra. Du kan anpassa förslaget till formen på ditt mål, vilket ger bättre utforskning och snabbare konvergens.
De flesta moderna MCMC-metoder är utökningar av MH eller bygger på samma principer. Så om du förstår Metropolis–Hastings förstår du grunden i området.
Gibbs sampling
Gibbs sampling uppdaterar en variabel i taget i stället för att föreslå ett nytt tillstånd för alla parametrar på en gång.
Vid varje steg samplas varje variabel från sin betingade fördelning – fördelningen för den variabeln givet de nuvarande värdena på alla andra. När du har gått igenom alla variabler har du slutfört en full iteration.
Detta undviker helt acceptera/förkasta-steget, eftersom varje betingat stickprov alltid accepteras. Det är praktiskt när den fulla samfördelningen är svår att sampla från men de betingade är hanterliga, vilket är vanligt i Bayesianska hierarkiska modeller.
Hamiltonian Monte Carlo
Hamiltonian Monte Carlo (HMC) var den första algoritmen som gjorde modern Bayesiansk inferens praktiskt användbar i stor skala.
I stället för att slumpmässigt föreslå nya tillstånd använder HMC gradientinformation från målfördelningen för att föreslå tillstånd som ligger långt från den aktuella positionen men ändå sannolikt accepteras. Den rör sig mycket bättre genom parameterutrymmet än slumpvandring. Det blir färre förkastade förslag och bättre utforskning av högdimensionella fördelningar.
Slumpvandringsmetoder som Metropolis skalar inte när antalet parametrar växer. HMC har inte det problemet i samma utsträckning.
HMC är motorn bakom Stan, en av de mest använda probabilistiska programmeringsplattformarna. No-U-Turn Sampler (NUTS), en adaptiv utökning av HMC som används i PyMC, tar bort behovet av att manuellt ställa in steglängd och antal steg.
Markovkedje–Monte Carlo i Bayesiansk statistik
Om det finns ett område där MCMC haft störst påverkan så är det Bayesiansk inferens.
Bayesiansk statistik kretsar kring den posteriora fördelningen, som är den uppdaterade sannolikheten för dina modellparametrar efter att ha sett data. Att beräkna den innebär att multiplicera priorn med likelihood och normalisera. Normaliseringssteget kräver en integral som sällan är hanterbar.
MCMC tar helt bort detta steg. Du utvärderar bara den onormaliserade posteriorn i en given punkt och låter kedjan göra resten.
Här är ett enkelt exempel. Anta att du skattar snedheten hos ett mynt. Du börjar med en prior som säger att myntet troligen är rättvist och observerar sedan en sekvens av kast. För en enkel myntmodell har posteriorn en sluten form. Om du lägger till en hierarkisk struktur, alltså skattar snedheten över hundra mynt samtidigt, blir det omöjligt att beräkna.
Med MCMC kör du kedjan, samlar posteriora stickprov och använder dessa för att beräkna det du behöver.
Förstå burn-in, konvergens och mixning
Dessa tre begrepp förvirrar ofta data scientists som är nya på MCMC. Om du missförstår dem får du visserligen resultat, men du vet inte varför de är opålitliga.
Burn-in
När en Markovkedja startar har den ingen aning om var högsannolika områden i din målfördelning finns.
Dessa tidiga stickprov påverkas av din startpunkt, inte av målfördelningen. Burn-in är praxis att kassera dem. Du kör kedjan ett visst antal iterationer först, slänger de stickproven och behåller bara det som kommer efter att kedjan haft tid att hitta en bra utgångspunkt.
Det finns ingen universell regel för hur lång burn-in ska vara. Det beror på din modell, din startpunkt och hur väl kedjan mixar. I praktiken diagnostiserar du det visuellt med spårgrafer (trace plots) snarare än att välja ett fast antal i förväg.
Konvergens
Konvergens betyder att kedjan inte längre påverkas av sin startpunkt och nu drar stickprov som speglar målfördelningen.
En kedja som inte konvergerat producerar skeva stickprov. Medelvärdet du beräknar av dem matchar inte det sanna posteriora medelvärdet. I stället speglar det var kedjan råkade fastna.
Konvergens bedömer du i efterhand med diagnostik. Att köra flera kedjor från olika startpunkter och kontrollera om de överensstämmer är ett av de mest pålitliga sätten att upptäcka konvergensfel.
Mixning
En kedja som konvergerar men mixar dåligt är fortfarande problematisk.
Mixning beskriver hur väl kedjan utforskar målfördelningen. En välmixande kedja rör sig fritt, besöker både höga och låga sannolikhetsområden och producerar stickprov som är ungefär oberoende av varandra. En dåligt mixande kedja stannar i ett område i många iterationer innan den rör sig och producerar starkt korrelerade stickprov som inte representerar hela fördelningen.
Dålig mixning syns ofta som en spårgraf som ser ut som en långsam, slingrande flod i stället för ett brusigt horisontellt band. När du ser det behöver din sampler trimmas – en bättre förslagsfördelning eller en helt annan algoritm.

Jämförelseplott för mixning
Hur du utvärderar MCMC-resultat
Jag visar nu fyra sätt att utvärdera MCMC och förklarar när du använder respektive metod.
Spårgrafer (trace plots)
En spårgraf visar det samplade värdet av en parameter vid varje iteration. Det är det första du bör titta på efter att ha kört MCMC.
En sund spårgraf ser ut som vitt brus kring ett stabilt medelvärde. Du bör inte se trender, långa platta partier eller långsam drift. Om du ser kedjan vandra eller fastna i ett område under många iterationer är det ett mixningsproblem och dina stickprov är inte tillförlitliga.

Spårgrafer visualiserade
Autokorrelation
MCMC-stickprov är aldrig helt oberoende. Varje stickprov påverkas av det föregående. Autokorrelation mäter hur starkt stickprov är korrelerade över iterationer.
Hög autokorrelation betyder att dina stickprov bär mindre information än deras antal antyder. Tvåtusen korrelerade stickprov kan ge samma information som tvåhundra oberoende. De flesta MCMC-bibliotek innehåller autokorrelationsplottar så att du kan se hur snabbt korrelationen avtar när stickprov blir längre ifrån varandra.

Autokorrelationsplottar visualiserade
Effektiv stickprovsstorlek
Effektiv stickprovsstorlek (ESS) översätter den autokorrelationen till ett praktiskt tal: hur många oberoende stickprov din kedja motsvarar.
Om du drog 5 000 stickprov men ESS är 200 arbetar du med den statistiska styrkan hos 200 oberoende dragningar. En låg ESS betyder att du behöver köra kedjan längre, trimma samplern eller båda. De flesta praktiker siktar på en ESS på minst ett par hundra per parameter innan de litar på sina skattningar.
Konvergensdiagnostik
När du kör flera kedjor kan du formellt testa om de konvergerat till samma fördelning. Gelman–Rubin-diagnostiken, rapporterad som R-hat, jämför varians inom varje kedja med varians mellan kedjor.
Ett R-hat nära 1,0 betyder att kedjorna överensstämmer, vilket är ett gott tecken. Värden över 1,01 eller 1,05 (beroende på tröskel i ditt bibliotek) antyder att kedjorna inte konvergerat och att du behöver fler iterationer. De flesta moderna bibliotek, som PyMC, beräknar R-hat automatiskt och flaggar varningar när den är för hög.
Markovkedje–Monte Carlo i Python
Python har ett par bibliotek för MCMC, var och en med en egen filosofi.
- PyMC: Det mest lättillgängliga alternativet för de flesta data scientists. Du definierar din modell med Python-syntax, och PyMC hanterar sampling under huven med NUTS (en adaptiv version av HMC). Det är förstahandsvalet för Bayesiansk modellering i Python.
- CmdStanPy / PyStan: Python-gränssnitt till Stan, ett dedikerat probabilistiskt programmeringsspråk. Stan kompilerar din modell till C++ innan körning, vilket gör det snabbt och väl lämpat för komplexa hierarkiska modeller. Nackdelen är en brantare inlärningskurva.
- NumPy: Inget dedikerat MCMC-bibliotek, men du kan implementera algoritmer som Metropolis–Hastings från grunden. Användbart för att förstå vad som händer under huven innan du går vidare till högre nivåns verktyg.
För de flesta praktiska uppgifter börjar du med PyMC. Det är vad jag kommer att använda, så om du följer med – se till att installera biblioteket först:
pip install pymc
För enkelhetens skull håller jag mig till ett lätt exempel: att skatta snedheten hos ett mynt från en sekvens av kast.
Steg 1: Definiera modellen
import pymc as pm
import numpy as np
# 1 = heads, 0 = tails
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])
with pm.Model() as coin_model:
# Prior: we believe the coin is probably fair
bias = pm.Beta("bias", alpha=2, beta=2)
# Likelihood: observed flips given the bias
flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)
Priorfördelningen pm.Beta kodar en svag tro att myntet är rättvist. Likelihood pm.Bernoulli kopplar modellen till de observerade data.
Steg 2: Kör samplern
with coin_model:
trace = pm.sample(2000, tune=1000, return_inferencedata=True)

Utdata från körning av samplern
tune anger antalet burn-in-steg – dessa stickprov kasseras. sample drar 2000 posteriora stickprov per kedja efter trimning.
Steg 3: Inspektera posteriorn
import arviz as az
az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

Modellens spårgraf och sammanfattning
az.summary() ger dig posteriort medelvärde, standardavvikelse och R-hat för varje parameter. Om R-hat ligger nära 1,0 har kedjorna konvergerat. az.plot_trace() ritar spårgraf och posteriorfördelning sida vid sida för varje parameter.
För detta dataset – 7 krona av 10 kast – är det posteriora medelvärdet 0,642 med en standardavvikelse på 0,124. Det speglar evidensen i data samtidigt som det ligger nära priorn om ett rättvist mynt. R-hat är 1,00 och ESS är långt över 2000, så kedjorna har konvergerat och stickproven är tillförlitliga.
Vanliga misstag med MCMC
MCMC är lätt att köra men också lätt att missbruka. Här är misstagen som oftast dyker upp.
- Förutsätter konvergens för tidigt: Bara för att samplern kördes utan fel betyder det inte att den konvergerade. Kontrollera alltid R-hat och spårgrafer innan du litar på resultaten. En kedja kan se stabil ut och ändå sitta fast i ett område av parameterutrymmet.
- Ignorerar burn-in: Tidiga stickprov är snedfördelade mot din startpunkt, inte din målfördelning. Kassera dem. De flesta bibliotek hanterar detta automatiskt via parametern
tune, men se till att du inte av misstag inkluderar dessa stickprov i din analys. - Dålig mixning: En kedja som rör sig för långsamt producerar starkt korrelerade stickprov som bär mindre information än deras antal antyder. Om din spårgraf ser ut som en långsam drift snarare än ett brusigt horisontellt band behöver din förslagsfördelning trimmas, eller så behöver du en bättre algoritm. Att byta från Metropolis till NUTS löser ofta detta direkt.
- För få stickprov: En låg effektiv stickprovsstorlek (ESS) betyder att dina skattningar är opålitliga även om kedjan tekniskt sett konvergerade. Om din ESS är en liten andel av dina totala dragningar, kör kedjan längre eller förbättra mixningen innan du drar slutsatser.
MCMC vs andra samplingmetoder
MCMC är inte det enda sättet att approximera en fördelning. Så här står det sig mot alternativen.
- Rejectionsampling drar förslag från en enklare fördelning och accepterar dem baserat på hur väl de matchar målet. Det är exakt när det fungerar, men acceptansgraden kollapsar i höga dimensioner.
- Viktning (importance sampling) viktar stickprov från en förslagsfördelning för att approximera förväntningar under målet. Det är snabbt och fungerar väl i låga dimensioner, men variansen i vikterna exploderar när dimensionaliteten ökar. I praktiken bär ett fåtal stickprov nästan all vikt, vilket gör skattningarna opålitliga.
- Variationsinferens (VI) anpassar en enklare fördelning för att approximera målet genom att minimera ett divergensmått. VI är mycket snabbare än MCMC och skalar till stora datamängder, men introducerar en approximationsfel som MCMC undviker. Den anpassade fördelningen kan missa posteriorstruktur som MCMC skulle fånga.
Här är kortversionen:

MCMC jämfört med alternativ
MCMC är rätt val när noggrannhet är viktigare än hastighet. Om du behöver skala till stora datamängder eller köra inferens i realtid kan variationsinferens vara värd avvägningen i noggrannhet.
Slutsats
MCMC är ett sådant verktyg som ser skrämmande ut utifrån men blir logiskt när du förstår vad det faktiskt gör – bygger en kedja av stickprov som gradvis speglar formen på en fördelning du inte kan beräkna direkt.
Det är också mycket lättare att greppa när du delar upp det i delar: Markovkedjor och Monte Carlo-metoder.
Dess roll i Bayesiansk statistik kan knappast överskattas. Posteriorfördelningar som annars vore utom räckhåll blir hanterbara i samma stund som du har en pålitlig sampler. Det är därför MCMC är kärnan i probabilistiska programmeringsbibliotek som PyMC och Stan.
Men innan du hoppar på implementationen bör du få intuitionen rätt. Förstå varför kedjan behöver burn-in, vad mixning faktiskt betyder och hur man läser en spårgraf. Själva koden är den enkla delen, eftersom Python-bibliotek döljer alla abstraktioner bakom enkla funktionsanrop.
Om du vill bli skicklig inom maskininlärning, anmäl dig till vår Machine Learning Scientist in Python-spår. 85 timmars material hjälper dig bli jobbklar 2026.
MCMC – vanliga frågor
Vad används Markovkedje–Monte Carlo till?
MCMC används för att dra stickprov från sannolikhetsfördelningar som är för komplexa för att arbeta med direkt. Det är vanligast i Bayesiansk statistik, där det skattar posteriora fördelningar utan att kräva slutna lösningar. Du hittar det också i fysiksimuleringar, beräkningsbiologi och alla områden där exakt inferens inte är genomförbar.
Hur skiljer sig MCMC från vanlig slumpmässig sampling?
Vanlig slumpmässig sampling antar att du kan dra direkt från din målfördelning. MCMC kringgår det genom att bygga en kedja av stickprov som gradvis konvergerar mot målet. Du behöver inte känna till hela fördelningen, bara kunna utvärdera den i en given punkt. Nackdelen är att MCMC-stickprov är korrelerade, vilket betyder att du behöver fler av dem för att få tillförlitliga skattningar.
Hur vet du om en MCMC-sampler har konvergerat?
Den vanligaste kontrollen är Gelman–Rubin-diagnostiken, rapporterad som R-hat. Värden nära 1,0 indikerar att kedjorna konvergerat till samma fördelning. Spårgrafer och effektiv stickprovsstorlek (ESS) är också användbara. En sund spårgraf ser ut som slumpmässigt brus kring ett stabilt medelvärde, och en hög ESS betyder att dina stickprov bär tillräckligt med information för att lita på dina skattningar.
Vad är skillnaden mellan Metropolis–Hastings och Hamiltonian Monte Carlo?
Metropolis–Hastings föreslår nya tillstånd genom att lägga till slumpbrus till den aktuella positionen, vilket kan vara långsamt när målfördelningen har komplex geometri. Hamiltonian Monte Carlo använder gradientinformation för att föreslå tillstånd som ligger långt från den aktuella positionen men ändå sannolikt accepteras, vilket ger mycket bättre utforskning i höga dimensioner. För de flesta moderna Bayesianska arbetsflöden är HMC – och dess adaptiva version NUTS – det föredragna valet.
När ska du använda variationsinferens i stället för MCMC?
När hastighet och skalbarhet är viktigare än noggrannhet. MCMC producerar högkvalitativa stickprov men skalar dåligt till stora datamängder och högdimensionella modeller. Variationsinferens anpassar en enklare fördelning för att approximera posteriorn, vilket är mycket snabbare men introducerar ett approximationsfel som MCMC undviker. Om du prototypar i skala eller behöver inferens i realtid är variationsinferens värd avvägningen.