O que é o risco bayesiano?
O risco bayesiano é o valor esperado da função de perda sob a distribuição a posteriori. Ele mede o custo médio de uma decisão, dado os dados observados e o conhecimento prévio. Matematicamente, R(a|x) = ∫ L(θ, a) * P(θ|x) dθ, onde a é a ação escolhida. A decisão ótima é aquela que minimiza esse risco esperado. O risco bayesiano é uma medida subjetiva, pois depende da perda e do prior. Ele é fundamental para comparar diferentes regras de decisão. Uma regra é chamada de “admissível” se não existe outra com risco menor para todo θ. O risco bayesiano mínimo é o valor da função de perda no ponto ótimo. Ele também é usado para avaliar a qualidade de estimadores pontuais.
Características fundamentais do risco bayesiano
O risco bayesiano possui três características principais que o definem. Primeiro, ele é um número escalar para cada ação possível. Segundo, ele integra a incerteza sobre o parâmetro θ. Terceiro, ele permite comparação direta entre ações concorrentes. A função de perda pode ser quadrática, absoluta, 0-1 ou assimétrica. Cada perda leva a um estimador diferente (média, mediana, moda, etc.). O risco bayesiano é frequentemente usado em problemas de estimação e classificação.
Vantagens e aplicações típicas
A principal vantagem é a incorporação de custos reais na tomada de decisão. Ele é usado em controle de qualidade, diagnóstico e planejamento financeiro. Também é aplicado em aprendizado por reforço e otimização de portfólio. Contudo, a escolha da função de perda pode ser arbitrária e influenciar o resultado.
O risco bayesiano é a base da teoria da decisão estatística. Para perda quadrática, o risco bayesiano é a variância a posteriori. Para perda 0-1, o risco é a probabilidade de erro de classificação. O estimador de Bayes (que minimiza o risco) é ótimo para a perda escolhida. O risco mínimo é chamado de “risco de Bayes” e é um limite inferior. Nenhum outro estimador pode ter risco médio menor (sob o mesmo prior). Isso é análogo ao erro de Bayes em classificação. O risco bayesiano pode ser calculado analiticamente para modelos conjugados. Para modelos complexos, usa-se MCMC para aproximar a integral. O risco também pode ser decomposto em viés² + variância (para perda quadrática). Essa decomposição ajuda a entender o compromisso entre viés e variância. Em problemas de decisão sequencial, o risco é acumulado ao longo do tempo. A programação dinâmica busca minimizar o risco total esperado. Assim, o risco bayesiano é um conceito unificador em estatística e aprendizado.
Um exemplo clássico é estimar a média μ de uma normal com prior normal. A perda quadrática leva à média a posteriori como estimador. O risco bayesiano desse estimador é a variância a posteriori. Quanto mais informativo o prior, menor o risco.
Enunciado do exemplo clássico
Implemente o cálculo do risco bayesiano para estimação da média de uma normal com prior normal. Dados: 10 observações de N(μ, σ²=4). Prior: μ ~ N(0, 1). Perda quadrática. Calcule a média a posteriori e o risco bayesiano (variância a posteriori) para uma amostra específica. Plote o risco como função do tamanho da amostra e como função do parâmetro de precisão do prior.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm # Configuração do problema sigma2 = 4.0 # variância dos dados (conhecida) prior_mean = 0.0 prior_var = 1.0 # variância do prior # Gerar uma amostra sintética np.random.seed(10) n = 10 mu_real = 2.0 dados = np.random.normal(mu_real, np.sqrt(sigma2), n) # Fórmulas para posteriori (normal-normal conjugada) def posterior_norm(dados, sigma2, prior_mean, prior_var): n = len(dados) # Precisões prec_dados = n / sigma2 prec_prior = 1.0 / prior_var # Média posterior peso_dados = prec_dados / (prec_dados + prec_prior) peso_prior = prec_prior / (prec_dados + prec_prior) mean_post = peso_dados * np.mean(dados) + peso_prior * prior_mean var_post = 1.0 / (prec_dados + prec_prior) return mean_post, var_post # Calcular para os dados atuais mu_post, var_post = posterior_norm(dados, sigma2, prior_mean, prior_var) print(f"Tamanho da amostra: {n}") print(f"Média amostral: {np.mean(dados):.3f}") print(f"Média a posteriori: {mu_post:.3f}") print(f"Variância a posteriori (risco Bayesiano quadrático): {var_post:.4f}") # Calcular risco Bayesiano teórico (para perda quadrática) # O risco é a variância a posteriori, que diminui com n e com a precisão do prior # Gráfico 1: Risco vs tamanho da amostra (usando a mesma média amostral) n_vals = np.arange(1, 51) riscos_n = [] for n_aux in n_vals: # Usar os primeiros n_aux dados (ou simular nova amostra? Usamos os mesmos dados) # Para consistência, usamos a média amostral dos primeiros n_aux if n_aux <= len(dados): dados_aux = dados[:n_aux] else: # Estender com dados adicionais simulados da mesma distribuição extras = np.random.normal(mu_real, np.sqrt(sigma2), n_aux - len(dados)) dados_aux = np.concatenate([dados, extras]) _, var_post_aux = posterior_norm(dados_aux, sigma2, prior_mean, prior_var) riscos_n.append(var_post_aux) plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.plot(n_vals, riscos_n, 'b-', linewidth=2) plt.xlabel('Tamanho da amostra (n)') plt.ylabel('Risco Bayesiano (variância posterior)') plt.title('Risco Bayesiano vs. Tamanho da Amostra') plt.grid(True) # Gráfico 2: Risco vs variância do prior (precisão) prior_vars = np.linspace(0.1, 10, 100) riscos_prior = [] for pv in prior_vars: _, var_post_aux = posterior_norm(dados, sigma2, prior_mean, pv) riscos_prior.append(var_post_aux) plt.subplot(1, 2, 2) plt.plot(prior_vars, riscos_prior, 'r-', linewidth=2) plt.xlabel('Variância do prior (τ²)') plt.ylabel('Risco Bayesiano (variância posterior)') plt.title('Risco Bayesiano vs. Incerteza do Prior') plt.grid(True) plt.tight_layout() plt.show() # Comparação com o estimador de máxima verossimilhança (MLE) # Risco da MLE = σ²/n (variância amostral) risco_mle = sigma2 / n print(f"\nRisco do estimador MLE (variância): {risco_mle:.4f}") print(f"Risco do estimador Bayesiano (variância posterior): {var_post:.4f}") print("O Bayesiano tem risco menor (prior informativo).") # Demonstrar perda 0-1 para classificação (ilustrativo) # Suponha que queremos decidir se μ > 1.5. Perda 0-1. # O risco é a probabilidade de errar. prob_pos = 1 - norm.cdf(1.5, mu_post, np.sqrt(var_post)) prob_neg = 1 - prob_pos risco_01 = min(prob_pos, prob_neg) # decisão MAP print(f"\nPara perda 0-1 (decidir μ > 1.5):") print(f" P(μ > 1.5 | dados) = {prob_pos:.3f}") print(f" Risco (prob. de erro) = {risco_01:.3f}") |
Este código calcula o risco bayesiano para estimação da média com perda quadrática. O risco é a variância a posteriori, que diminui com mais dados. Prior mais incerto (variância alta) aumenta o risco, pois confia menos no prior. O estimador bayesiano tem risco menor que o MLE quando o prior é informativo. Para perda 0-1, o risco é a probabilidade de erro na decisão. Para iniciantes, este exemplo mostra como o risco quantifica a qualidade da decisão. O risco bayesiano é, portanto, uma métrica fundamental em estatística decisória.