Интерпретация результатов и сравнение моделей

Байесовский анализ данных на Python

Michal Oleszak

Machine Learning Engineer

Запуск модели: повторение

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)
Байесовский анализ данных на Python

Запуск модели: повторение

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)
  • Количество параметров: 4
  • Количество выборок для каждого параметра: 1000 $\times$ 4 = 4000
Байесовский анализ данных на Python

График трассировки

pm.traceplot(trace_1)

Сетка из восьми графиков в два столбца и четыре строки. В левом столбце — четыре графика плотности, в правом — четыре линейных графика, по одному для каждого параметра модели.

Байесовский анализ данных на Python

График трассировки: увеличение одного параметра

 

Два графика рядом: слева — график плотности, справа — линейный график выборок параметра.

Байесовский анализ данных на Python

Лесной график

pm.forestplot(trace_1)

График, показывающий распределение выборок для каждого параметра модели в виде горизонтального отрезка.

Байесовский анализ данных на Python

Сводка трассировки

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
Байесовский анализ данных на Python

Обучение второй модели

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)
Байесовский анализ данных на Python

Широко применимый информационный критерий (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
Байесовский анализ данных на Python

График сравнения

pm.compareplot(comparison)

График, визуализирующий значения WAIC для двух моделей.

Байесовский анализ данных на Python

Давайте потренируемся!

Байесовский анализ данных на Python

Preparing Video For Download...