Markov Chain Monte Carlo e ajuste de modelos

Análise de Dados Bayesiana em Python

Michal Oleszak

Machine Learning Engineer

Análise Bayesiana em produção

  • Aproximação por grade: inviável com muitos parâmetros
  • Amostragem de posterior conhecida: exige priors conjugados
  • Markov Chain Monte Carlo (MCMC): amostra de posterior desconhecida!
Análise de Dados Bayesiana em Python

Monte Carlo

  • Aproximar uma quantidade gerando números aleatórios
  • Pela fórmula, $\pi r^2 \simeq 78.5$

Um círculo com raio 5.

Análise de Dados Bayesiana em Python

Monte Carlo

  • Aproximar uma quantidade gerando números aleatórios
  • Pela fórmula, $\pi r^2 \simeq 78.5$
  • Desenhe um quadrado 10x10 ao redor do círculo.

Um círculo com raio 5 com um quadrado definido ao redor.

Análise de Dados Bayesiana em Python

Monte Carlo

  • Aproximar uma quantidade gerando números aleatórios
  • Pela fórmula, $\pi r^2 \simeq 78.5$
  • Desenhe um quadrado 10x10 ao redor do círculo.
  • Amostre 25 pontos aleatórios no quadrado.
  • Quantos caem dentro do círculo? $19/25=76\%$
  • Aproximação da área do círculo: 76% * 100 = 76

Um círculo com raio 5 com um quadrado ao redor e 25 pontos aleatórios no quadrado.

Análise de Dados Bayesiana em Python

Cadeias de Markov

  • Modela uma sequência de estados, entre os quais se transita com probabilidades dadas.
Análise de Dados Bayesiana em Python

Cadeias de Markov

  • Modela uma sequência de estados, entre os quais se transita com probabilidades dadas.

O que o urso fará em seguida:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Após muitos períodos, as probabilidades de transição ficam iguais, não importa de onde começamos.
Análise de Dados Bayesiana em Python

Cadeias de Markov

  • Modela uma sequência de estados, entre os quais se transita com probabilidades dadas.

O que o urso fará em seguida:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Após muitos períodos, as probabilidades de transição ficam iguais, não importa de onde começamos.

O que o urso fará em um futuro distante:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Um único ponto vermelho ao longo de um eixo numerado.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Dois pontos ao longo de um eixo numerado, um vermelho e um preto.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Dois pontos ao longo de um eixo numerado, um vermelho e um verde.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Três pontos ao longo de um eixo numerado: um vermelho, um verde e um preto.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Dois pontos ao longo de um eixo numerado, dois vermelhos e um verde.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Quatro pontos ao longo de um eixo numerado, dois vermelhos e dois verdes.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Sete pontos ao longo de um eixo numerado, dois vermelhos e cinco verdes.

Análise de Dados Bayesiana em Python

Markov Chain Monte Carlo

Muitos pontos ao longo de um eixo numerado, alguns vermelhos e a maioria verdes.

Análise de Dados Bayesiana em Python

Dados agregados de anúncios

print(ads_aggregated)
           date  clothes_banners_shown  sneakers_banners_shown  num_clicks
0    2019-01-01                     20                      18           2
1    2019-01-02                     24                      19           8
2    2019-01-03                     20                      20           5
..          ...                    ...                     ...         ...
148  2019-05-29                     24                      25           8
149  2019-05-30                     26                      27          11
150  2019-05-31                     26                      24           8

[151 rows x 4 columns]
Análise de Dados Bayesiana em Python

Regressão linear com pyMC3

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"


with pm.Model() as model: pm.GLM.from_formula(formula, data=ads_aggregated)
# Print model specification print(model)
# Sample posterior draws trace = pm.sample(draws=1000, tune=500)

Saída da função print do pymc3, listando os priors dos parâmetros do modelo.

Análise de Dados Bayesiana em Python

Vamos praticar MCMC!

Análise de Dados Bayesiana em Python

Preparing Video For Download...