Priors Conjugados (Conjugate Priors)
Visão geral
Em Inferência Bayesiana, aprender a partir de dados significa atualizar uma crença a priori sobre parâmetros desconhecidos para uma crença a posteriori usando a regra de Bayes (Bayes’ rule):
[ p(\theta \mid \mathcal{D}) \propto p(\mathcal{D}\mid \theta), p(\theta) ]
onde:
- (\theta) são parâmetros desconhecidos (por exemplo, uma probabilidade de sucesso de Bernoulli).
- (\mathcal{D}) são os dados observados.
- (p(\mathcal{D}\mid \theta)) é a verossimilhança (likelihood).
- (p(\theta)) é o prior (prior).
- (p(\theta\mid \mathcal{D})) é o posterior (posterior).
Um prior conjugado (conjugate prior) é uma escolha especial de (p(\theta)) tal que o posterior (p(\theta\mid \mathcal{D})) permanece na mesma família de distribuições (distribution family) que o prior. Isso torna a atualização bayesiana em forma fechada (closed-form) (sem amostragem, sem otimização numérica) e, muitas vezes, reduz a inferência à atualização de alguns hiperparâmetros (hyperparameters).
Priors conjugados são um pilar na estatística bayesiana clássica e ainda aparecem no aprendizado de máquina moderno—especialmente para atualizações online (online updates), problemas de bandido (bandit problems) (amostragem de Thompson), modelos generativos simples (simple generative models) e como blocos de construção dentro de métodos de inferência aproximada (approximate inference).
O que “conjugado” significa (definição)
Considere que a verossimilhança vem de uma família (p(\mathcal{D}\mid \theta)). Uma família de priors (p(\theta \mid \alpha)) (hiperparâmetros (\alpha)) é conjugada a essa verossimilhança se:
[ p(\theta \mid \mathcal{D}, \alpha) \in \text{a mesma família que } p(\theta \mid \alpha) ]
Assim, o posterior é apenas o mesmo tipo de distribuição com hiperparâmetros atualizados:
[ p(\theta \mid \mathcal{D}, \alpha) = p(\theta \mid \alpha') ]
Isso importa porque a inferência bayesiana vira “atualizar os hiperparâmetros”, muitas vezes somando estatísticas suficientes (sufficient statistics) (como contagens, somas e soma de quadrados).
Por que priors conjugados existem: famílias exponenciais e estatísticas suficientes
A maioria dos pares conjugados comuns surge quando a verossimilhança está na família exponencial (exponential family), que inclui as distribuições Bernoulli, categórica/multinomial, Poisson e Gaussiana (entre outras). Uma verossimilhança da família exponencial pode ser escrita como:
[ p(x\mid \eta) = h(x)\exp\left(\eta^\top T(x) - A(\eta)\right) ]
- (\eta) é o parâmetro natural (natural parameter)
- (T(x)) são estatísticas suficientes
- (A(\eta)) é a função log-partição (log-partition function)
Para essas verossimilhanças, um prior conjugado sobre (\eta) tem a forma genérica:
[ p(\eta \mid \lambda, \nu) \propto \exp\left(\eta^\top \lambda - \nu A(\eta)\right) ]
Após observar (n) pontos de dados (x_1,\dots,x_n), os hiperparâmetros do posterior são atualizados como:
[ \lambda' = \lambda + \sum_{i=1}^n T(x_i), \quad \nu' = \nu + n ]
Esta é a razão central pela qual priors conjugados são tão convenientes computacionalmente: a atualização bayesiana vira uma soma de estatísticas suficientes.
Interpretando hiperparâmetros como “pseudo-dados”
Uma intuição prática é que muitos priors conjugados se comportam como se você tivesse começado com algumas observações imaginárias:
- Os hiperparâmetros do prior Beta ((\alpha,\beta)) se comportam como contagens prévias de sucessos e falhas.
- O prior de Dirichlet (\alpha_k) se comporta como contagens prévias para cada classe.
- O prior Gamma se comporta como “contagens” prévias e exposição para taxas de Poisson.
- O prior Normal se comporta como observações prévias em torno de (\mu_0) com certa força.
Isso torna priors conjugados fáceis de ajustar e de explicar.
Pares centrais de priors conjugados (com exemplos práticos)
Beta–Bernoulli (e Beta–Binomial)
Caso de uso: modelar uma probabilidade desconhecida (p) de sucesso (clique, conversão, vitória etc.).
Modelo
- Verossimilhança: (x_i \sim \text{Bernoulli}(p))
- Prior: (p \sim \text{Beta}(\alpha, \beta))
A densidade Beta é:
[ p(p) \propto p^{\alpha-1}(1-p)^{\beta-1} ]
Atualização do posterior
Seja (s=\sum_i x_i) o número de sucessos e (f=n-s) o número de falhas. Então:
[ p \mid \mathcal{D} \sim \text{Beta}(\alpha+s,\ \beta+f) ]
Ou seja, atualizar é apenas somar contagens.
Média do posterior e MAP
- Média do posterior: (\mathbb{E}[p\mid \mathcal{D}] = \dfrac{\alpha+s}{\alpha+\beta+n})
- Moda do posterior (máximo a posteriori (Maximum A Posteriori, MAP)), se (\alpha+s>1) e (\beta+f>1):
[ \text{MAP} = \frac{\alpha+s-1}{\alpha+\beta+n-2} ]
Isso se conecta à regularização (regularization): em comparação com a MLE (estimação por máxima verossimilhança (Maximum Likelihood Estimation, MLE)) (s/n), a média do posterior é “puxada” em direção à média do prior (\alpha/(\alpha+\beta)).
Preditiva do posterior (probabilidade do próximo sucesso)
[ p(x_{n+1}=1 \mid \mathcal{D}) = \mathbb{E}[p \mid \mathcal{D}] = \frac{\alpha+s}{\alpha+\beta+n} ]
Exemplo prático: estimação online de taxa de conversão
Você pode atualizar em uma linha por evento:
# Beta-Bernoulli online update
alpha, beta = 1.0, 1.0 # uniform prior
def update(click: int):
global alpha, beta
if click == 1:
alpha += 1
else:
beta += 1
def posterior_mean():
return alpha / (alpha + beta)
# stream of clicks (1=click, 0=no click)
for click in [1, 0, 0, 1, 1, 0]:
update(click)
print(alpha, beta, posterior_mean())
Isso é extremamente comum em protótipos de testes A/B (A/B testing), bandits e painéis de monitoramento.
Dirichlet–Categórica / Dirichlet–Multinomial
Caso de uso: modelar probabilidades desconhecidas sobre (K) classes discretas (tópicos, palavras, rótulos).
Modelo
- Verossimilhança (categórica): (x_i \sim \text{Categorical}(\pi))
- Ou verossimilhança (multinomial): contagens (\mathbf{c}\sim \text{Multinomial}(n,\pi))
- Prior: (\pi \sim \text{Dirichlet}(\alpha_1,\dots,\alpha_K))
Densidade de Dirichlet:
[ p(\pi) \propto \prod_{k=1}^K \pi_k^{\alpha_k-1} ]
Atualização do posterior
Seja (c_k) o número de observações na classe (k). Então:
[ \pi \mid \mathcal{D} \sim \text{Dirichlet}(\alpha_1+c_1,\dots,\alpha_K+c_K) ]
Preditiva do posterior
[ p(x_{n+1}=k\mid \mathcal{D}) = \mathbb{E}[\pi_k \mid \mathcal{D}] = \frac{\alpha_k+c_k}{\sum_{j=1}^K (\alpha_j+c_j)} ]
Exemplo prático: suavização de probabilidades categóricas
Isso aparece como suavização aditiva (additive smoothing) em modelos como a classificação de texto com naive Bayes (prior de Dirichlet sobre probabilidades de palavras). Se (\alpha_k=1), você obtém a suavização “add-one” (Laplace).
import numpy as np
alpha = np.ones(4) # 4 classes, symmetric Dirichlet prior
counts = np.array([10, 3, 0, 1])
posterior_alpha = alpha + counts
predictive = posterior_alpha / posterior_alpha.sum()
print("posterior alpha:", posterior_alpha)
print("predictive probs:", predictive)
Mesmo que uma classe nunca tenha aparecido ((c_k=0)), o prior evita probabilidade zero—importante para previsões estáveis.
Normal–Normal (média Gaussiana com variância conhecida)
Caso de uso: estimar uma média desconhecida (\mu) a partir de observações reais quando a variância do ruído de observação (\sigma^2) é conhecida (ou tratada como fixa).
Modelo
- Verossimilhança: (x_i \sim \mathcal{N}(\mu, \sigma^2)), com (\sigma^2) conhecido
- Prior: (\mu \sim \mathcal{N}(\mu_0, \tau_0^2))
Atualização do posterior
O posterior também é normal:
[ \mu \mid \mathcal{D} \sim \mathcal{N}(\mu_n, \tau_n^2) ]
É mais fácil expressar em termos de precisão (precision) (inversa da variância):
- Precisão do prior: (\lambda_0 = 1/\tau_0^2)
- Precisão da verossimilhança por ponto: (1/\sigma^2)
Então:
[ \lambda_n = \lambda_0 + \frac{n}{\sigma^2}, \quad \tau_n^2 = \frac{1}{\lambda_n} ]
[ \mu_n = \tau_n^2\left(\lambda_0\mu_0 + \frac{1}{\sigma^2}\sum_{i=1}^n x_i\right) ]
Isso é uma média ponderada entre a média do prior e a média amostral.
Interpretação
- Se (\tau_0^2) é grande (prior fraco), (\mu_n) se aproxima da média amostral.
- Se (\tau_0^2) é pequeno (prior forte), o posterior permanece mais próximo de (\mu_0).
Exemplo prático: fusão de sensores (sensor fusion) / rastreamento (tracking) com ruído fixo
Se você recebe um fluxo de medições ruidosas e quer uma crença atualizada analiticamente sobre o valor verdadeiro, Normal–Normal oferece uma atualização online limpa (fortemente relacionada a um filtro de Kalman (Kalman filter) 1D com suposições de variância fixa).
Gamma–Poisson (e preditiva Binomial Negativa)
Caso de uso: estimar uma taxa de eventos desconhecida (\lambda) para contagens (requisições por minuto, chegadas, defeitos).
Modelo
- Verossimilhança: (x_i \sim \text{Poisson}(\lambda))
- Prior: (\lambda \sim \text{Gamma}(\alpha, \beta))
Seja explícito sobre a parametrização. Usando forma–taxa (shape–rate):
[ p(\lambda) \propto \lambda^{\alpha-1} e^{-\beta \lambda} ]
Atualização do posterior
Dadas contagens (x_1,\dots,x_n):
[ \lambda \mid \mathcal{D} \sim \text{Gamma}\left(\alpha+\sum_{i=1}^n x_i,\ \beta+n\right) ]
Novamente, basta somar estatísticas suficientes: contagem total e número de observações.
Média do posterior
[ \mathbb{E}[\lambda\mid \mathcal{D}] = \frac{\alpha+\sum x_i}{\beta+n} ]
Preditiva do posterior
A distribuição preditiva para uma contagem futura integra (\lambda) e se torna Binomial Negativa, capturando naturalmente sobredispersão (overdispersion) em relação a uma Poisson de taxa fixa. Esse é um dos motivos pelos quais Gamma–Poisson é útil na prática.
Por que priors conjugados são úteis na prática de IA/ML
1) Inferência em forma fechada e prototipagem rápida
A conjugação evita inferência numérica por completo:
- Sem loops de amostragem MCMC (MCMC)
- Sem otimizar um Limite Inferior da Evidência (Evidence Lower Bound, ELBO)
- Sem escolher famílias aproximadas de posteriores
Isso os torna ótimos para linhas de base (baselines), verificações de sanidade (sanity checks) e sistemas que precisam de tempo de execução (runtime) previsível.
2) Atualizações online e dados em streaming (streaming data)
Como as atualizações muitas vezes se resumem a “incrementar contagens” ou “atualizar somas”, modelos conjugados são ideais quando os dados chegam sequencialmente.
Padrões de exemplo:
- Beta–Bernoulli: atualizar ((\alpha,\beta)) por evento
- Dirichlet–Categórica: atualizar (\alpha_k) para a classe observada
- Gamma–Poisson: atualizar ((\alpha,\beta)) com totais de contagem
Isso se encaixa em ambientes operacionais (telemetria (telemetry), anúncios (ads), experimentos) onde armazenar todos os dados é caro.
3) Amostragem de Thompson (Thompson sampling) para bandits (aplicação clássica)
Em um bandido multiarmado (multi-armed bandit) com recompensas Bernoulli (clique/sem clique), a amostragem de Thompson mantém um posterior sobre a probabilidade de sucesso de cada braço e amostra dele para escolher ações.
Com Beta–Bernoulli, isso é extremamente simples e eficaz:
- Para cada braço (a), mantenha (\alpha_a,\beta_a)
- Amostre (\tilde{p}_a \sim \text{Beta}(\alpha_a,\beta_a))
- Escolha o braço (a=\arg\max \tilde{p}_a)
- Observe a recompensa (r\in{0,1}) e atualize (\alpha_a,\beta_a)
import numpy as np
n_arms = 3
alpha = np.ones(n_arms) # prior successes
beta = np.ones(n_arms) # prior failures
def choose_arm():
samples = np.random.beta(alpha, beta)
return int(np.argmax(samples))
def update(arm, reward):
if reward == 1:
alpha[arm] += 1
else:
beta[arm] += 1
# Example loop (reward generation omitted)
for t in range(1000):
arm = choose_arm()
reward = np.random.rand() < [0.05, 0.08, 0.06][arm] # unknown to learner
update(arm, int(reward))
Isso é amplamente usado em sistemas de decisão online porque equilibra naturalmente exploração e exploração com ajuste mínimo.
4) Suavização bayesiana e evitar probabilidades zero
A suavização Dirichlet–Multinomial é uma forma principiada de evitar zeros patológicos:
- Modelos de linguagem: palavras não vistas recebem probabilidade pequena, mas não nula
- Priors de classe: classes raras ainda têm suporte
- Matrizes de confusão (confusion matrices) e probabilidades de transição (transition probabilities): estimativas estáveis a partir de poucos dados
5) Regularização interpretável e estimação MAP
A inferência bayesiana se conecta a estimadores baseados em otimização:
- Estimação por Máxima Verossimilhança (Maximum Likelihood Estimation, MLE) maximiza (p(\mathcal{D}\mid\theta))
- MAP maximiza (p(\theta\mid\mathcal{D}) \propto p(\mathcal{D}\mid\theta)p(\theta))
Com priors conjugados, MAP frequentemente corresponde a regularizadores comuns (por exemplo, prior gaussiano (Gaussian prior) (\Rightarrow) regularização L2 (L2 regularization)). Isso fornece uma interpretação probabilística da força de regularização.
Escolhendo hiperparâmetros na prática
Uma forma comum de definir hiperparâmetros conjugados é pensar em “tamanho amostral prévio”.
Prior Beta
- Média do prior: (m=\alpha/(\alpha+\beta))
- Força do prior: (\alpha+\beta) (quantos pseudo-ensaios)
Exemplo: você acredita que o CTR está em torno de 2% com cerca de 100 pseudo-impressões (pseudo-impressions):
- (\alpha=2), (\beta=98)
Prior de Dirichlet
- Média do prior: (\mathbb{E}[\pi_k]=\alpha_k/\sum_j\alpha_j)
- Força: (\sum_j\alpha_j)
Dirichlet simétrico (\alpha_k=\alpha) é comum quando você quer um prior uniforme e leve.
Prior Gamma
Com forma–taxa ((\alpha,\beta)):
- Média do prior: (\alpha/\beta)
- A força aumenta conforme (\alpha,\beta) aumentam proporcionalmente
Em modelos de taxa, frequentemente ajuda escolher (\beta) para corresponder a uma escala de “exposição” (por exemplo, por minuto, por dia).
Limitações e armadilhas
Priors conjugados podem ser restritivos demais
Famílias conjugadas são escolhidas por conveniência matemática. Elas podem não representar bem crenças prévias reais, especialmente em problemas de alta dimensionalidade ou estruturados.
Exemplos:
- Um prior Normal pode ser inadequado para um parâmetro estritamente positivo, a menos que seja transformado.
- Suposições de independência em configurações conjugadas (por exemplo, naive Bayes) podem ser irreais.
Nem toda verossimilhança tem priors conjugados convenientes
Muitos modelos modernos de ML (redes profundas, modelos hierárquicos complexos) não geram posteriores em forma fechada. Então você recorre a:
- Amostragem (MCMC)
- Inferência aproximada como Inferência Variacional (Variational Inference)
- Algoritmos específicos do modelo como Maximização de Expectativa (Expectation Maximization, EM)
- Inferência automatizada em Programação Probabilística (Probabilistic Programming)
Priors conjugados ainda importam nesses casos: eles podem ser usados dentro de modelos maiores (por exemplo, subcomponentes conjugados) para tornar partes da inferência mais rápidas ou exatas.
Confusão de parametrização
Distribuições como Gamma têm múltiplas parametrizações (forma–taxa vs forma–escala (shape–scale)). Em trabalho aplicado, erros frequentemente surgem ao misturar essas convenções. Sempre verifique se (\beta) é uma taxa ou uma escala.
Onde priors conjugados aparecem além do básico
Mesmo que seu modelo final não seja conjugado, a conjugação influencia muitas ferramentas padrão:
- Regressão linear bayesiana (Bayesian linear regression) (frequentemente usa priors Normal–Inversa-Gamma ou Normal–Inversa-Wishart).
- Modelos ocultos de Markov (Hidden Markov models) e modelos de mistura (mixture models), onde priors conjugados simplificam atualizações em procedimentos do tipo EM.
- Inferência colapsada (collapsed inference): integrar parâmetros conjugados pode reduzir variância e acelerar a inferência (comum em modelos de tópicos como LDA).
Esses tópicos se conectam naturalmente a Variáveis Aleatórias e Distribuições e a métodos aproximados como Inferência Variacional quando a conjugação exata falha.
Resumo
- Um prior conjugado é um prior que, quando combinado com uma verossimilhança via regra de Bayes, produz um posterior na mesma família de distribuições.
- Pares conjugados permitem atualização bayesiana em forma fechada usando estatísticas suficientes.
- Os pares mais comuns e práticos são:
- Beta–Bernoulli/Binomial: probabilidades de sucesso; suporta atualizações online e amostragem de Thompson.
- Dirichlet–Categórica/Multinomial: probabilidades de classe; fornece suavização principiada.
- Normal–Normal: inferência da média Gaussiana com variância conhecida; média ponderada entre prior e dados.
- Gamma–Poisson: taxas de contagem; produz preditiva Binomial Negativa e lida com incerteza nas taxas.
- Eles são valiosos para streaming, bandits, linhas de base rápidas, e regularização bayesiana interpretável—mesmo quando o ML moderno frequentemente depende de inferência aproximada para modelos não conjugados.
Se você está aprendendo métodos bayesianos, priors conjugados são uma das formas mais rápidas de construir intuição sobre como priors e dados interagem—e uma das formas mais práticas de implantar atualizações bayesianas em sistemas reais.