Programa
Algumas distribuições de probabilidade são complexas demais para trabalhar diretamente com elas.
Ao modelar dados do mundo real, a matemática muitas vezes desanda antes de chegar a algo útil. É comum integrais parecerem administráveis no papel, mas se tornarem intratáveis no momento em que você adiciona algumas variáveis latentes. Isso é especialmente comum em inferência bayesiana, onde a distribuição a posteriori combina suas crenças prévias com os dados observados — e o resultado é algo que você não consegue resumir com uma fórmula simples.
A ideia básica de Markov Chain Monte Carlo é que, em vez de atacar a matemática diretamente, o MCMC explora a distribuição por meio de simulação. Ele gera amostras que refletem o formato da distribuição sem jamais precisar calculá-la por completo.
Neste artigo, vou apresentar os conceitos centrais por trás do MCMC, percorrer os algoritmos mais comuns e mostrar como colocá-lo em prática em Python.
Precisa revisar a matemática em Python? Leia nossos posts Demystifying Mathematical Concepts for Deep Learning para ver a matemática aplicada no Numpy.
O que é Markov Chain Monte Carlo?
Markov Chain Monte Carlo (MCMC) é uma família de algoritmos que geram amostras de distribuições de probabilidade — mesmo quando essas distribuições são complexas demais para trabalhar diretamente.
O nome se divide em duas partes. A cadeia de Markov controla como o algoritmo se move entre estados possíveis. Cada passo depende apenas de onde você está agora, não de todo o caminho que te trouxe até ali. A parte Monte Carlo significa usar amostragem aleatória para estimar quantidades de interesse.
Combinados, MCMC constrói uma cadeia de amostras aleatórias que, com o tempo, reflete o formato da sua distribuição-alvo. É, antes de tudo, uma técnica de amostragem. Você não resolve a matemática exatamente, apenas a aproxima por simulação.
Por que o Markov Chain Monte Carlo é necessário
O problema com distribuições do mundo real é que elas estão longe de ser tão limpas quanto as de livros-texto.
Em inferência bayesiana, você geralmente tenta calcular uma distribuição a posteriori — a probabilidade atualizada dos parâmetros do modelo após ver os dados. A fórmula parece simples no papel: basta multiplicar a priori pela verossimilhança e dividir pela verossimilhança marginal. Esse último termo exige integrar sobre todos os valores possíveis dos parâmetros. Em alta dimensionalidade, essa integral é praticamente impossível de calcular.
E só piora à medida que seu modelo cresce. Quando você adiciona mais parâmetros ou mais variáveis latentes, o cálculo exato vira um beco sem saída. Você verá isso em vários cenários comuns:
- Modelos hierárquicos bayesianos: quando parâmetros dependem de outros parâmetros, criando distribuições aninhadas que não se integram de forma limpa
- Posteriores de alta dimensão: quando o número de parâmetros torna aproximações em grade computacionalmente inviáveis
- Priors não conjugados: quando a priori e a verossimilhança não se combinam em uma distribuição reconhecível
Nesses cenários, MCMC é um ótimo drible. Em vez de calcular a distribuição, ele extrai amostras dela. As amostras trazem tudo o que você precisa sem nunca resolver a integral.
As duas ideias por trás do MCMC
MCMC combina duas ideias que, sozinhas, são simples, mas ficam poderosas quando unidas. Deixa eu te guiar por elas.
Cadeias de Markov
Uma cadeia de Markov é uma sequência de estados em que cada passo depende apenas de onde você está agora.
Por onde você passou antes não importa. Só o estado atual determina para onde você vai em seguida. Essa propriedade de "sem memória" — formalmente chamada de propriedade de Markov — é o que torna a matemática gerenciável e o algoritmo prático.
A cadeia se move entre estados um passo de cada vez e, com a configuração certa, acaba se estabilizando em uma distribuição estacionária — um padrão estável em que a probabilidade de estar em qualquer estado deixa de mudar. Essa distribuição estável é exatamente com o que o MCMC foi projetado para trabalhar.
Métodos de Monte Carlo
Métodos de Monte Carlo usam amostragem aleatória para estimar quantidades difíceis de calcular diretamente.
A ideia é extrair amostras aleatórias suficientes de uma distribuição e, a partir delas, estimar média, variância ou qualquer outra propriedade. Quanto mais amostras, mais próximos seus estimadores ficam dos valores verdadeiros.
Sozinhos, os métodos de Monte Carlo exigem que você consiga amostrar diretamente da distribuição — que é justamente o problema que estamos tentando resolver. Cadeias de Markov resolvem essa parte.
Como o Markov Chain Monte Carlo funciona
MCMC é um loop com uma decisão simples a cada passo.
- Comece com um estado inicial: escolha um ponto inicial no seu espaço de parâmetros, mesmo que seja um chute aproximado
- Proponha um novo estado: use um mecanismo de proposta para sugerir o próximo movimento
- Decida se aceita: compare o estado proposto com o atual e aceite ou rejeite com base em quão provável cada um é sob a distribuição-alvo
- Repita: rode esse loop milhares de vezes, coletando amostras pelo caminho
- Use as amostras: estime médias, intervalos credíveis ou qualquer outra quantidade de interesse a partir das amostras coletadas
A etapa de aceitar/rejeitar é onde a “mágica” acontece.
Ao aceitar estados melhores com mais frequência do que piores, a cadeia gravita para regiões de alta probabilidade — sem nunca precisar calcular a distribuição completa.
As primeiras amostras dependem de onde você começou, então elas são descartadas. Depois de iterações suficientes, a cadeia “esquece” o ponto inicial e as amostras restantes refletem o formato verdadeiro da sua distribuição-alvo.
A distribuição-alvo e a distribuição estacionária
MCMC é construído em torno do objetivo de gerar amostras de uma distribuição-alvo da qual você não consegue amostrar diretamente.
A distribuição-alvo é aquilo que você quer entender — geralmente uma distribuição a posteriori em inferência bayesiana. Você conhece seu formato até uma constante de normalização, mas não consegue calcular essa constante diretamente. O MCMC não precisa dela.
Todo algoritmo de MCMC é projetado para que sua cadeia de Markov tenha uma distribuição estacionária que corresponda à distribuição-alvo. Distribuição estacionária é aquela em que a cadeia se estabiliza após passos suficientes.
Mantenha a cadeia rodando e ela começará a produzir amostras que parecem saídas diretamente da sua distribuição-alvo. A integral fica contornada.
Algoritmos populares de Markov Chain Monte Carlo
Existem alguns algoritmos de MCMC que você verá na prática. Todos seguem o mesmo loop central, mas diferem em como propõem novos estados e em como usam informações sobre a distribuição-alvo.
Algoritmo de Metropolis
O algoritmo de Metropolis é o mais simples e foi o que deu início a tudo.
A cada passo, ele propõe um novo estado adicionando ruído aleatório ao atual. Se o estado proposto tiver maior probabilidade sob a distribuição-alvo, ele é sempre aceito. Se for menor, é aceito com probabilidade proporcional à razão entre as duas probabilidades — caso contrário, a cadeia permanece onde está.
Esse mecanismo de aceitar/rejeitar faz a cadeia passar mais tempo em regiões de alta probabilidade sem jamais calcular a distribuição completa.
O algoritmo de Metropolis usa uma distribuição de proposta simétrica, ou seja, é igualmente provável propor um passo em qualquer direção. Ele tende a se degradar conforme os modelos crescem.
Algoritmo de Metropolis-Hastings
O algoritmo Metropolis-Hastings (MH) generaliza o Metropolis permitindo distribuições de proposta assimétricas.
MH ajusta a probabilidade de aceitação para levar em conta o fato de que algumas propostas são mais prováveis do que outras. Você pode ajustar a proposta ao formato da sua distribuição-alvo, o que leva a uma exploração melhor e a uma convergência mais rápida.
A maioria dos métodos modernos de MCMC são extensões de MH ou se baseiam nos mesmos princípios. Então, se você entende Metropolis-Hastings, entende a base do campo.
Amostragem de Gibbs
A amostragem de Gibbs atualiza uma variável por vez, em vez de propor um novo estado para todos os parâmetros de uma só vez.
A cada passo, ela amostra cada variável de sua distribuição condicional — a distribuição daquela variável dado os valores atuais de todas as outras. Quando você percorre todas as variáveis, completa uma iteração inteira.
Isso evita totalmente a etapa de aceitar/rejeitar, já que cada extração condicional é sempre aceita. É útil quando a distribuição conjunta completa é difícil de amostrar, mas as condicionais são tratáveis, algo comum em modelos hierárquicos bayesianos.
Hamiltonian Monte Carlo
Hamiltonian Monte Carlo (HMC) foi o primeiro algoritmo que tornou a inferência bayesiana moderna prática em escala.
Em vez de propor novos estados aleatoriamente, HMC usa informações de gradiente da distribuição-alvo para propor estados distantes da posição atual, mas ainda com alta probabilidade de serem aceitos. Ele se move pelo espaço de parâmetros muito melhor do que métodos de passeio aleatório. Há menos propostas rejeitadas e melhor exploração de distribuições de alta dimensão.
Métodos de passeio aleatório como Metropolis não escalam conforme o número de parâmetros cresce. HMC não sofre desse problema no mesmo grau.
HMC é o motor por trás do Stan, uma das plataformas de programação probabilística mais usadas. O No-U-Turn Sampler (NUTS), uma extensão adaptativa do HMC usada no PyMC, elimina a necessidade de ajustar manualmente o tamanho do passo e o número de passos.
Markov Chain Monte Carlo em estatística bayesiana
Se tem uma área em que o MCMC teve o maior impacto, é na inferência bayesiana.
A estatística bayesiana gira em torno da distribuição a posteriori, que é a probabilidade atualizada dos parâmetros do seu modelo após observar os dados. Calcular isso significa multiplicar a priori pela verossimilhança e normalizar. Essa normalização exige uma integral que raramente é tratável.
MCMC elimina completamente essa etapa. Você só avalia a posteriori não normalizada em qualquer ponto e deixa a cadeia fazer o resto.
Aqui vai um exemplo simples. Suponha que você esteja estimando o viés de uma moeda. Você começa com a crença prévia de que a moeda provavelmente é justa, depois observa uma sequência de lançamentos. Para um modelo simples de moeda, a posteriori tem forma fechada. Se você adicionar uma estrutura hierárquica, ou seja, estimar o viés de cem moedas simultaneamente, o cálculo fica impraticável.
Com MCMC, você roda a cadeia, coleta amostras da posteriori e usa essas amostras para calcular o que precisa.
Entendendo burn-in, convergência e mistura
Esses três conceitos confundem quem está começando com MCMC. Se você errar neles, até vai obter resultados, mas não vai saber por que eles são pouco confiáveis.
Burn-in
Quando uma cadeia de Markov começa, ela não faz ideia de onde estão as regiões de alta probabilidade da sua distribuição-alvo.
As amostras iniciais são influenciadas pelo ponto de partida, não pela distribuição-alvo. Burn-in é a prática de descartá-las. Você roda a cadeia por um número de iterações primeiro, joga essas amostras fora e só mantém o que vem depois que a cadeia teve tempo de encontrar um bom ponto de partida.
Não há uma regra universal para o tempo de burn-in. Depende do seu modelo, do ponto inicial e de quão bem a cadeia mistura. Na prática, você diagnostica visualmente com trace plots, em vez de escolher um número fixo de antemão.
Convergência
Convergência significa que a cadeia deixou de ser influenciada pelo ponto inicial e agora está gerando amostras que refletem a distribuição-alvo.
Uma cadeia que não convergiu produz amostras enviesadas. A média que você calcula a partir delas não vai corresponder à média verdadeira da posteriori. Em vez disso, vai refletir onde a cadeia ficou “presa”.
Convergência é algo que você avalia depois, com diagnósticos. Rodar múltiplas cadeias a partir de pontos iniciais diferentes e verificar se elas concordam é uma das formas mais confiáveis de detectar falhas de convergência.
Mistura
Uma cadeia que converge mas mistura mal ainda é problemática.
Mistura descreve quão bem a cadeia explora a distribuição-alvo. Uma boa mistura faz a cadeia se mover livremente, visitando regiões de alta e baixa probabilidade e produzindo amostras aproximadamente independentes entre si. Uma mistura ruim mantém a cadeia em uma região por muitas iterações antes de se mover, gerando amostras altamente correlacionadas que não representam a distribuição inteira.
Mistura ruim geralmente aparece como um trace plot que parece um rio lento e sinuoso, em vez de uma faixa horizontal ruidosa. Quando você vir isso, seu amostrador precisa de ajustes — uma proposta melhor ou até outro algoritmo.

Gráfico de comparação de mistura
Como avaliar resultados de MCMC
Agora vou te mostrar quatro formas de avaliar MCMC e quando usar cada uma.
Trace plots
Um trace plot mostra o valor amostrado de um parâmetro a cada iteração. É a primeira coisa que você deve olhar depois de rodar o MCMC.
Um trace plot saudável parece ruído branco em torno de uma média estável. Você não deve ver tendências, longos trechos planos ou deriva lenta. Se vir a cadeia vagando ou presa em uma região por muitas iterações, isso é problema de mistura e suas amostras não são confiáveis.

Trace plots visualizados
Autocorrelação
Amostras de MCMC nunca são totalmente independentes. Cada amostra é influenciada pela anterior. Autocorrelação mede quão fortemente as amostras estão correlacionadas ao longo das iterações.
Autocorrelação alta significa que suas amostras carregam menos informação do que a contagem sugere. Duas mil amostras correlacionadas podem equivaler à informação de duzentas independentes. A maioria das bibliotecas de MCMC inclui gráficos de autocorrelação para você ver quão rápido a correlação cai conforme as amostras se afastam.

Gráficos de autocorrelação visualizados
Tamanho efetivo da amostra
O tamanho efetivo da amostra (ESS) traduz essa autocorrelação em um número prático: a quantas amostras independentes sua cadeia equivale.
Se você coletou 5.000 amostras mas o ESS é 200, você está trabalhando com o poder estatístico de 200 extrações independentes. Um ESS baixo significa que você precisa rodar a cadeia por mais tempo, ajustar o amostrador ou ambos. A maioria dos praticantes busca um ESS de pelo menos algumas centenas por parâmetro antes de confiar nas estimativas.
Diagnósticos de convergência
Ao rodar múltiplas cadeias, você pode testar formalmente se elas convergiram para a mesma distribuição. O diagnóstico de Gelman-Rubin, reportado como R-hat, compara a variância dentro de cada cadeia com a variância entre cadeias.
Um R-hat próximo de 1,0 significa que as cadeias concordam, o que é um bom sinal. Valores acima de 1,01 ou 1,05 (dependendo do limiar da biblioteca) sugerem que as cadeias não convergiram e você precisa de mais iterações. Bibliotecas modernas como PyMC calculam R-hat automaticamente e sinalizam alertas quando ele está alto demais.
Markov Chain Monte Carlo em Python
Python tem algumas bibliotecas para MCMC, cada uma com uma filosofia diferente.
- PyMC: a opção mais acessível para a maioria dos data scientists. Você define seu modelo em sintaxe Python e o PyMC cuida da amostragem por baixo dos panos usando NUTS (uma versão adaptativa do HMC). É a principal escolha para modelagem bayesiana em Python.
- CmdStanPy / PyStan: interfaces em Python para o Stan, uma linguagem dedicada de programação probabilística. O Stan compila seu modelo em C++ antes de rodar, o que o torna rápido e adequado para modelos hierárquicos complexos. A desvantagem é uma curva de aprendizado mais íngreme.
- NumPy: não é uma biblioteca dedicada de MCMC, mas você pode implementar algoritmos como Metropolis-Hastings do zero. Útil para entender o que acontece por baixo do capô antes de migrar para ferramentas de mais alto nível.
Para a maioria dos trabalhos práticos, PyMC é onde você vai começar. É o que vou usar aqui, então, se for acompanhar, instale a biblioteca primeiro:
pip install pymc
Para manter simples, vou ficar em um exemplo fácil: estimar o viés de uma moeda a partir de uma sequência de lançamentos.
Passo 1: defina o modelo
import pymc as pm
import numpy as np
# 1 = cara, 0 = coroa
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])
with pm.Model() as coin_model:
# Prior: acreditamos que a moeda provavelmente é justa
bias = pm.Beta("bias", alpha=2, beta=2)
# Verossimilhança: lançamentos observados dado o viés
flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)
A prior pm.Beta codifica uma crença fraca de que a moeda é justa. A verossimilhança pm.Bernoulli conecta o modelo aos dados observados.
Passo 2: rode o amostrador
with coin_model:
trace = pm.sample(2000, tune=1000, return_inferencedata=True)

Saída da execução do amostrador
tune define o número de passos de burn-in — essas amostras são descartadas. sample extrai 2000 amostras da posteriori por cadeia após o tuning.
Passo 3: inspecione a posteriori
import arviz as az
az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

Trace plot do modelo e resultados do sumário
az.summary() traz a média a posteriori, o desvio padrão e o R-hat para cada parâmetro. Se o R-hat estiver perto de 1,0, as cadeias convergiram. az.plot_trace() plota o traço e a distribuição a posteriori lado a lado para cada parâmetro.
Para este conjunto de dados — 7 caras em 10 lançamentos — a média a posteriori é 0,642 com desvio padrão de 0,124. Isso reflete a evidência nos dados, permanecendo próximo à prior de moeda justa. O R-hat é 1,00 e o ESS está bem acima de 2000, então as cadeias convergiram e as amostras são confiáveis.
Erros comuns com MCMC
MCMC é fácil de rodar, mas também é fácil de usar errado. Aqui estão os erros que mais aparecem.
- Assumir convergência cedo demais: só porque o amostrador rodou sem erros não significa que convergiu. Sempre cheque R-hat e trace plots antes de confiar nos resultados. Uma cadeia pode parecer estável e ainda assim estar presa em uma região do espaço de parâmetros.
- Ignorar o burn-in: amostras iniciais são enviesadas para o seu ponto de partida, não para a distribuição-alvo. Descarte-as. A maioria das bibliotecas lida com isso automaticamente via o parâmetro
tune, mas verifique se você não está incluindo essas amostras sem querer na sua análise. - Mistura ruim: uma cadeia que se move devagar demais produz amostras altamente correlacionadas que carregam menos informação do que a contagem sugere. Se seu trace plot parece uma deriva lenta em vez de uma faixa horizontal ruidosa, sua proposta precisa de ajuste — ou você precisa de um algoritmo melhor. Migrar de Metropolis para NUTS costuma resolver de cara.
- Amostras de menos: um tamanho efetivo de amostra (ESS) baixo significa estimativas pouco confiáveis, mesmo que a cadeia tenha convergido tecnicamente. Se seu ESS for uma fração pequena do total de amostras, rode a cadeia por mais tempo ou melhore a mistura antes de tirar conclusões.
MCMC vs outros métodos de amostragem
MCMC não é a única forma de aproximar uma distribuição. Veja como ele se compara às alternativas.
- Amostragem por rejeição gera propostas de uma distribuição mais simples e as aceita com base em quão bem combinam com a alvo. É exata quando funciona, mas as taxas de aceitação desabam em alta dimensão.
- Amostragem por importância pondera amostras de uma distribuição de proposta para aproximar expectativas sob a alvo. É rápida e funciona bem em baixa dimensão, mas a variância dos pesos explode conforme a dimensionalidade aumenta. Na prática, poucas amostras acabam carregando quase todo o peso, o que torna as estimativas pouco confiáveis.
- Inferência variacional (VI) ajusta uma distribuição mais simples para aproximar a alvo minimizando uma medida de divergência. VI é muito mais rápida que MCMC e escala para grandes volumes de dados, mas introduz erro de aproximação. A distribuição ajustada pode perder estruturas da posteriori que o MCMC capturaria.
Em resumo:

MCMC versus alternativas
MCMC é a escolha certa quando a precisão importa mais do que a velocidade. Se você precisa escalar para grandes volumes de dados ou fazer inferência em tempo real, a inferência variacional pode valer a troca na acurácia.
Conclusão
MCMC é uma daquelas ferramentas que parecem intimidadoras por fora, mas fazem todo sentido quando você entende o que ela realmente faz — construir uma cadeia de amostras que gradualmente reflete o formato de uma distribuição que você não consegue calcular diretamente.
Também fica muito mais fácil de compreender quando você divide em partes: cadeias de Markov e métodos de Monte Carlo.
Seu papel na estatística bayesiana é enorme. Distribuições a posteriori que seriam inalcançáveis tornam-se viáveis no momento em que você tem um amostrador confiável. Por isso o MCMC está no coração de bibliotecas de programação probabilística como PyMC e Stan.
Mas antes de sair implementando, vale acertar a intuição. Entenda por que a cadeia precisa de burn-in, o que mistura realmente significa e como ler um trace plot. O código em si é a parte fácil, já que as bibliotecas em Python escondem as abstrações por trás de chamadas simples.
Se você quer se tornar proficiente em machine learning, inscreva-se na nossa trilha Machine Learning Scientist in Python. São 85 horas de conteúdo para te deixar pronto para o mercado em 2026.
FAQs sobre MCMC
Para que é usado o Markov Chain Monte Carlo?
MCMC é usado para extrair amostras de distribuições de probabilidade que são complexas demais para trabalhar diretamente. É mais comum em estatística bayesiana, onde estima distribuições a posteriori sem exigir soluções em forma fechada. Você também o encontra em simulações de física, biologia computacional e em qualquer área em que a inferência exata não é viável.
Como o MCMC difere da amostragem aleatória comum?
A amostragem aleatória regular pressupõe que você pode extrair diretamente da sua distribuição-alvo. O MCMC contorna isso construindo uma cadeia de amostras que converge gradualmente para a alvo. Você não precisa conhecer a distribuição completa, apenas como avaliá-la em qualquer ponto. A desvantagem é que as amostras de MCMC são correlacionadas, o que significa que você precisa de mais delas para obter estimativas confiáveis.
Como saber se um amostrador MCMC convergiu?
A verificação mais comum é o diagnóstico de Gelman-Rubin, reportado como R-hat. Valores próximos de 1,0 indicam que as cadeias convergiram para a mesma distribuição. Trace plots e tamanho efetivo da amostra (ESS) também são úteis. Um trace plot saudável parece ruído aleatório em torno de uma média estável, e um ESS alto significa que suas amostras carregam informação suficiente para confiar nas suas estimativas.
Qual é a diferença entre Metropolis-Hastings e Hamiltonian Monte Carlo?
Metropolis-Hastings propõe novos estados adicionando ruído aleatório à posição atual, o que pode ser lento quando a distribuição-alvo tem geometria complexa. Hamiltonian Monte Carlo usa informações de gradiente para propor estados distantes da posição atual, mas ainda com boa chance de aceitação, o que leva a uma exploração muito melhor em alta dimensão. Para a maioria dos fluxos de trabalho bayesianos modernos, HMC — e sua versão adaptativa, NUTS — é a escolha preferida.
Quando usar inferência variacional em vez de MCMC?
Quando velocidade e escalabilidade importam mais do que precisão. MCMC produz amostras de alta qualidade, mas escala mal para conjuntos de dados grandes e modelos de alta dimensão. A inferência variacional ajusta uma distribuição mais simples para aproximar a posteriori, sendo muito mais rápida — porém introduz erro de aproximação que o MCMC evita. Se você está prototipando em escala ou precisa de inferência em tempo real, a inferência variacional vale a troca.
