Марковская цепь Монте-Карло и подгонка модели

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

Michal Oleszak

Machine Learning Engineer

Байесовский анализ данных на практике

  • Сеточное приближение: неудобно при большом числе параметров
  • Выборка из известного апостериорного распределения: требует сопряжённых приоров
  • Марковская цепь Монте-Карло (MCMC): выборка из неизвестного апостериорного распределения!
Байесовский анализ данных на Python

Монте-Карло

  • Приближение некоторой величины путём генерации случайных чисел
  • По формуле: $\pi r^2 \simeq 78.5$

Окружность с радиусом 5.

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

Монте-Карло

  • Приближение некоторой величины путём генерации случайных чисел
  • По формуле: $\pi r^2 \simeq 78.5$
  • Описываем квадрат 10×10 вокруг окружности.

Окружность с радиусом 5 и описанный вокруг неё квадрат.

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

Монте-Карло

  • Приближение некоторой величины путём генерации случайных чисел
  • По формуле: $\pi r^2 \simeq 78.5$
  • Описываем квадрат 10×10 вокруг окружности.
  • Выбираем 25 случайных точек внутри квадрата.
  • Сколько из них попало в круг? $19/25=76\%$
  • Приближение площади круга: 76% * 100 = 76

Окружность с радиусом 5, описанный вокруг неё квадрат и 25 случайных точек внутри квадрата.

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

Марковские цепи

  • Моделирует последовательность состояний, между которыми происходят переходы с заданными вероятностями.
Байесовский анализ данных на Python

Марковские цепи

  • Моделирует последовательность состояний, между которыми происходят переходы с заданными вероятностями.

Что медведь сделает дальше:

охота еда сон
охота 0.1 0.8 0.1
еда 0.05 0.4 0.55
сон 0.8 0.15 0.05
  • Через много шагов вероятности переходов становятся одинаковыми независимо от начального состояния.
Байесовский анализ данных на Python

Марковские цепи

  • Моделирует последовательность состояний, между которыми происходят переходы с заданными вероятностями.

Что медведь сделает дальше:

охота еда сон
охота 0.1 0.8 0.1
еда 0.05 0.4 0.55
сон 0.8 0.15 0.05
  • Через много шагов вероятности переходов становятся одинаковыми независимо от начального состояния.

Что медведь будет делать в отдалённом будущем:

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

Марковская цепь Монте-Карло

Одна красная точка на числовой оси.

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

Марковская цепь Монте-Карло

Две точки на числовой оси: красная и чёрная.

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

Марковская цепь Монте-Карло

Две точки на числовой оси: красная и зелёная.

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

Марковская цепь Монте-Карло

Три точки на числовой оси: красная, зелёная и чёрная.

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

Марковская цепь Монте-Карло

Три точки на числовой оси: две красные и одна зелёная.

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

Марковская цепь Монте-Карло

Четыре точки на числовой оси: две красные и две зелёные.

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

Марковская цепь Монте-Карло

Семь точек на числовой оси: две красные и пять зелёных.

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

Марковская цепь Монте-Карло

Много точек на числовой оси: часть красных, большинство зелёных.

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

Агрегированные данные о рекламе

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

Линейная регрессия с 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)

Вывод функции print из pymc3 со списком приоров параметров модели.

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

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

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

Preparing Video For Download...