Crença prévia

Análise de Dados Bayesiana em Python

Michal Oleszak

Machine Learning Engineer

Distribuição prévia

  • A distribuição prévia reflete o que sabemos sobre o parâmetro antes de observar dados:
    • nada   →   distribuição uniforme (todos os valores igualmente prováveis)
    • pôsterior anterior   →   pode ser atualizada com novos dados

 

  • Você pode escolher qualquer distribuição como prévia para incluir info externa no modelo:
    • opinião de especialista
    • conhecimento comum
    • pesquisas anteriores
    • crença subjetiva
Análise de Dados Bayesiana em Python

Impacto da prévia

Dois gráficos de densidade sobrepostos: um da distribuição prévia e outro da pôsterior. A prévia é uniforme; a pôsterior é em forma de sino, um pouco mais alta.

Dois gráficos de densidade sobrepostos: um da distribuição prévia e outro da pôsterior. A prévia é uniforme; a pôsterior é em forma de sino, um pouco mais alta e enviesada à direita.

Dois gráficos de densidade sobrepostos: um da distribuição prévia e outro da pôsterior. A prévia é uniforme; a pôsterior é em forma de sino, bem mais alta.

Dois gráficos de densidade sobrepostos: um da distribuição prévia e outro da pôsterior. A prévia é uniforme; a pôsterior é em forma de sino, muito mais alta.

Análise de Dados Bayesiana em Python

Distribuição prévia

  • A distribuição prévia é escolhida antes de ver os dados.
  • A escolha da prévia pode afetar a pôsterior (especialmente com poucos dados).
  • Para evitar cherry-picking, as prévias devem ser:
    • declaradas claramente,
    • explicáveis: baseadas em pesquisa prévia, suposições razoáveis, opinião de especialista etc.
Análise de Dados Bayesiana em Python

Escolhendo a prévia certa

Nossa crença prévia: cara é menos provável

Um gráfico de densidade em forma de sino, mas enviesado à esquerda, com pico em torno de 0,25.

Algumas escolhas são melhores que outras!

 

Um gráfico de densidade em forma de sino, mas enviesado à esquerda, com pico em torno de 0,25, um pouco mais estreito que o anterior.

Análise de Dados Bayesiana em Python

Prévias conjugadas

  • Algumas prévias, multiplicadas por verossimilhanças específicas, geram pôsteriores conhecidas.
  • Elas são chamadas de prévias conjugadas.
  • No caso de lançar moedas:
    • se escolhermos uma prévia Beta(a, b),
    • então a pôsterior é Beta(#caras + a, #lançamentos - #caras + b)
  • Podemos amostrar da pôsterior usando numpy.
  • get_heads_prob() do Capítulo 1:
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Análise de Dados Bayesiana em Python

Duas formas de obter a pôsterior

Simulação

  • Se a pôsterior é conhecida, podemos amostrar dela com numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Resultado: um array com 1000 amostras da pôsterior:
    array([0.05941031, ..., 0.70015975])
    
  • Pode ser plotado com
    sns.kdeplot(draws)
    

Cálculo

  • Se a pôsterior não é conhecida, podemos calculá-la por aproximação em grade.
  • Resultado: probabilidade pôsterior para cada elemento da grade:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Pode ser plotado com
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Análise de Dados Bayesiana em Python

Vamos praticar com prévias!

Análise de Dados Bayesiana em Python

Preparing Video For Download...