Kaique Mitsuo Silva Yamamoto
Ia

Inferência Bayesiana — Probabilidade, MCMC e Aprendizado

Fundamentos de inferência bayesiana: Teorema de Bayes, priors e posteriors, MCMC, algoritmo de Metropolis-Hastings, Gibbs sampling e aplicações em machine learning.

Inferência Bayesiana é uma abordagem à estatística onde probabilidade representa grau de crença — não apenas frequência de eventos. Ao invés de estimar parâmetros como valores fixos (frequentismo), o bayesianismo os trata como variáveis aleatórias com distribuições que são atualizadas à medida que novos dados chegam.

É o framework mais coerente matematicamente para raciocínio sob incerteza, e a base teórica de muitos avanços modernos em machine learning.

Papers de referência: arXiv stat.ML — Machine Learning (Statistics)


O Teorema de Bayes

A equação central:

P(θ | dados) = P(dados | θ) × P(θ) / P(dados)

Onde:
- P(θ | dados): posterior — crença sobre θ após observar os dados
- P(dados | θ): likelihood — probabilidade dos dados dado θ
- P(θ): prior — crença sobre θ antes dos dados
- P(dados): evidência — constante normalizadora

Intuição: começamos com uma crença inicial (prior), observamos dados, e atualizamos nossa crença (posterior).

Exemplo: diagnóstico médico

Teste para doença rara com prevalência de 0.1% (1 em 1000 pessoas tem a doença):

  • Teste tem 99% de sensitividade (detecta 99% dos doentes)
  • Teste tem 99% de especificidade (99% dos saudáveis testam negativo)

Se o teste deu positivo, qual a probabilidade de ter a doença?

P(doença | positivo) = P(positivo | doença) × P(doença) / P(positivo)

P(positivo | doença) = 0.99
P(doença) = 0.001
P(positivo) = P(positivo|doença)×P(doença) + P(positivo|saudável)×P(saudável)
           = 0.99×0.001 + 0.01×0.999 = 0.01098

P(doença | positivo) = 0.99×0.001 / 0.01098 ≈ 9%

Resultado surpreendente: mesmo com um teste de 99% de precisão, um resultado positivo em uma doença rara tem apenas ~9% de chance de ser verdadeiro. O prior (baixa prevalência) domina.


Prior, Likelihood e Posterior

Priors

O prior codifica o conhecimento antes dos dados:

Tipo de priorQuando usar
InformativoConhecimento científico sólido existe (ex: parâmetro físico conhecido)
Fracamente informativoRestrições gerais conhecidas (ex: variância deve ser positiva)
Non-informativo (flat)Mínima influência do prior — deixa dados "falar"
ConjugadoPrior que gera posterior da mesma família — simplifica cálculo analítico

Priors conjugados

Quando o prior e a likelihood são conjugados, o posterior tem forma fechada:

LikelihoodPrior conjugadoPosterior
Bernoulli/BinomialBetaBeta
Normal (variância conhecida)NormalNormal
PoissonGammaGamma
MultinomialDirichletDirichlet

Exemplo: estimando probabilidade de cara em uma moeda

Prior: Beta(2, 2) — crença inicial de moeda justa
Dados: 7 caras em 10 lançamentos
Posterior: Beta(2+7, 2+3) = Beta(9, 5) — média = 9/14 ≈ 0.64

O problema: intratabilidade

Para modelos complexos, o denominador P(dados) — a evidência — é uma integral intratável:

P(dados) = ∫ P(dados | θ) × P(θ) dθ

Para modelos com muitos parâmetros, essa integral não tem solução analítica. É aqui que o MCMC entra.


MCMC — Markov Chain Monte Carlo

MCMC é uma família de algoritmos que amostra de distribuições de probabilidade complexas sem precisar calcular a integral normalizadora. Permite computar o posterior mesmo quando sua forma exata é desconhecida.

A ideia: construir uma cadeia de Markov cuja distribuição estacionária seja exatamente o posterior desejado. Após "aquecimento" (burn-in), as amostras da cadeia são amostras do posterior.

Por que funciona?

A cadeia de Markov precisa satisfazer balanço detalhado:

π(x) × T(x → y) = π(y) × T(y → x)

Onde:
- π: distribuição alvo (posterior)
- T: kernel de transição da cadeia

Qualquer algoritmo que satisfaça essa condição converge para o posterior correto.


Algoritmo de Metropolis-Hastings

O algoritmo MCMC mais fundamental:

def metropolis_hastings(log_posterior, x_init, num_samples, proposal_std):
    x = x_init
    samples = []

    for _ in range(num_samples):
        # 1. Propor novo ponto (distribuição simétrica)
        x_proposto = x + np.random.normal(0, proposal_std)

        # 2. Calcular razão de aceitação (em log para estabilidade)
        log_alpha = log_posterior(x_proposto) - log_posterior(x)

        # 3. Aceitar ou rejeitar
        if np.log(np.random.uniform()) < log_alpha:
            x = x_proposto  # aceita

        samples.append(x)

    return samples

Intuição: propõe um passo aleatório. Aceita sempre se o novo ponto tem posterior maior; aceita com probabilidade proporcional se tem posterior menor — permitindo exploração.

Taxa de aceitação ideal: ~23-44% para dimensão alta. Muito alta → passos pequenos, exploração lenta. Muito baixa → passos grandes demais, poucos aceitos.


Gibbs Sampling

Quando a distribuição conjunta P(θ₁, θ₂, ..., θₙ | dados) é complexa mas as distribuições condicionais P(θᵢ | θ₋ᵢ, dados) são tratáveis, Gibbs Sampling amostra ciclicamente:

for iteration in range(num_samples):
    θ₁ = sample_from(P(θ₁ | θ₂, θ₃, ..., dados))
    θ₂ = sample_from(P(θ₂ | θ₁, θ₃, ..., dados))
    ...
    θₙ = sample_from(P(θₙ | θ₁, θ₂, ..., dados))

Eficiente quando condicionais têm forma fechada — comum com priors conjugados.


HMC — Hamiltonian Monte Carlo

Usa gradientes do posterior para fazer propostas mais inteligentes — análogo à física hamiltoniana onde uma partícula "rola" pela superfície do posterior.

NUTS (No-U-Turn Sampler): versão adaptativa do HMC que ajusta automaticamente o tamanho dos passos. Implementado em:

  • Stan (linguagem estatística)
  • PyMC (Python)
  • NumPyro / Pyro (JAX/PyTorch)
import pymc as pm

with pm.Model() as modelo:
    # Prior
    mu = pm.Normal("mu", mu=0, sigma=10)
    sigma = pm.HalfNormal("sigma", sigma=1)

    # Likelihood
    y_obs = pm.Normal("y_obs", mu=mu, sigma=sigma, observed=dados)

    # MCMC com NUTS
    trace = pm.sample(2000, tune=1000)

pm.plot_posterior(trace)

Diagnóstico de convergência

Como saber se a cadeia de Markov convergiu?

DiagnósticoO que verifica
R-hat (Gelman-Rubin)Variância entre cadeias vs dentro de cadeias. Ideal: R̂ < 1.01
Effective Sample Size (ESS)Amostras independentes efetivas. Ideal: ESS > 400
Trace plotsVisualiza a cadeia — deve parecer "caterpillar" estacionário
AutocorrelaçãoAlta autocorrelação = exploração ineficiente

Variational Inference — alternativa escalável ao MCMC

Para modelos de grande escala (como redes neurais), MCMC é lento. Variational Inference aproxima o posterior com uma distribuição parametrizada:

Objetivo: minimizar KL(q(θ; φ) || p(θ | dados))

Equivalente a maximizar o ELBO (Evidence Lower Bound):
ELBO = E_q[log p(dados, θ)] - E_q[log q(θ; φ)]

Redes neurais bayesianas: pesos são distribuições, não valores pontuais → quantificação de incerteza nas predições.


Aplicações em ML e finanças

AplicaçãoComo usa inferência bayesiana
Bayesian optimizationModelo probabilístico de função objetivo para hyperparameter tuning (Gaussian Process)
Filtro de KalmanAtualização bayesiana em tempo real para rastreamento e previsão
Modelos de séries temporaisStan/Prophet para previsão com quantificação de incerteza
Precificação de opçõesCalibração bayesiana de modelos de volatilidade estocástica
Detecção de anomaliasProbabilidade de observação dado o modelo — outliers têm baixa probabilidade
A/B TestingAnálise bayesiana de testes — decisão contínua sem p-value fixo

Frequentismo vs Bayesianismo

AspectoFrequentismoBayesianismo
O que é probabilidade?Frequência relativa em infinitas repetiçõesGrau de crença (subjetivo/epistêmico)
ParâmetrosFixos, desconhecidosVariáveis aleatórias com distribuições
IncertezaIntervalos de confiança (sobre o método)Intervalos de credibilidade (sobre o parâmetro)
DadosAleatórios (amostras)Fixos (observados)
ComputaçãoFórmulas fechadas geralmentePode exigir MCMC
PriorNão usaParte central do modelo

Conexões com outras seções


Referências:

Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento.

On this page