Interpretando resultados e comparando modelos

Análise de Dados Bayesiana em Python

Michal Oleszak

Machine Learning Engineer

Executando o modelo: revisão

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"

with pm.Model() as model_1:
    pm.GLM.from_formula(formula, data=ads_aggregated)
    trace_1 = pm.sample(draws=1000, tune=500)
Análise de Dados Bayesiana em Python

Executando o modelo: revisão

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"

with pm.Model() as model_1:
    pm.GLM.from_formula(formula, data=ads_aggregated)
    trace_1 = pm.sample(draws=1000, tune=500, chains=4)
  • Número de parâmetros: 4
  • Número de amostras por parâmetro: 1000 $\times$ 4 = 4000
Análise de Dados Bayesiana em Python

Trace plot

pm.traceplot(trace_1)

Uma grade com oito gráficos em duas colunas e quatro linhas. A coluna da esquerda tem quatro densidades e a da direita quatro séries temporais, uma por parâmetro do modelo.

Análise de Dados Bayesiana em Python

Trace plot: zoom em um parâmetro

 

Dois gráficos lado a lado: à esquerda, uma densidade; à direita, a série de amostras do parâmetro.

Análise de Dados Bayesiana em Python

Forest plot

pm.forestplot(trace_1)

Um gráfico mostrando a distribuição das amostras de cada parâmetro do modelo como barras horizontais.

Análise de Dados Bayesiana em Python

Resumo do trace

pm.summary(trace_1)
                         mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  \
Intercept               1.307  0.886  -0.305    2.962      0.018    0.013   
clothes_banners_shown   0.103  0.031   0.043    0.160      0.001    0.000   
sneakers_banners_shown  0.104  0.032   0.045    0.163      0.001    0.001   
sd                      2.654  0.157   2.382    2.970      0.003    0.002   

                        ess_mean  ess_sd  ess_bulk  ess_tail  r_hat  
Intercept                 2346.0  2318.0    2351.0    2083.0    1.0  
clothes_banners_shown     2085.0  2085.0    2089.0    1868.0    1.0  
sneakers_banners_shown    2105.0  1953.0    2122.0    1869.0    1.0  
sd                        2615.0  2590.0    2646.0    1834.0    1.0
Análise de Dados Bayesiana em Python

Ajustando outro modelo

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown + weekend"

with pm.Model() as model_2:
    pm.GLM.from_formula(formula, data=ads_aggregated)
    trace_2 = pm.sample(draws=1000, tune=500)
Análise de Dados Bayesiana em Python

Widely Applicable Information Criterion (WAIC)

comparison = pm.compare({"trace_1": trace_1, "trace_2": trace_2}, 
                        ic="waic", scale="deviance")
print(comparison)
        rank     waic   p_waic    d_waic    weight       se      dse warning  \
trace_2    0   -362.8   5.1576         0  0.513792  9.37269        0    True   
trace_1    1 -362.926  4.13318  0.126236  0.486208  9.48352  1.50682    True   

        waic_scale  
trace_2        log  
trace_1        log
Análise de Dados Bayesiana em Python

Compare plot

pm.compareplot(comparison)

Um gráfico visualizando os valores de WAIC para dois modelos.

Análise de Dados Bayesiana em Python

Vamos praticar comparar modelos!

Análise de Dados Bayesiana em Python

Preparing Video For Download...