Markov Chain Monte Carlo та підбір моделей

Баєсівський аналіз даних у Python

Michal Oleszak

Machine Learning Engineer

Баєсівський аналіз даних у продакшені

  • Граткове наближення: незручне за багатьох параметрів
  • Вибірка з відомого апостеріорного: потребує спряжених апріорів
  • Markov Chain Monte Carlo (MCMC): вибірка з невідомого апостеріорного!
Баєсівський аналіз даних у Python

Монте-Карло

  • Наближення величини шляхом генерування випадкових чисел
  • За формулою, $\pi r^2 \simeq 78{,}5$

Коло радіуса 5.

Баєсівський аналіз даних у Python

Монте-Карло

  • Наближення величини шляхом генерування випадкових чисел
  • За формулою, $\pi r^2 \simeq 78{,}5$
  • Намалюйте квадрат 10x10 навколо кола.

Коло радіуса 5 із накресленим квадратом.

Баєсівський аналіз даних у Python

Монте-Карло

  • Наближення величини шляхом генерування випадкових чисел
  • За формулою, $\pi r^2 \simeq 78{,}5$
  • Намалюйте квадрат 10x10 навколо кола.
  • Виберіть 25 випадкових точок у квадраті.
  • Скільки з них усередині кола? $19/25=76\%$
  • Оцінка площі кола: 76% * 100 = 76

Коло радіуса 5 із квадратом і 25 випадковими точками в ньому.

Баєсівський аналіз даних у Python

Ланцюги Маркова

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

Ланцюги Маркова

  • Моделює послідовність станів із переходами за заданими ймовірностями.

Що ведмідь зробить далі:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Після багатьох кроків імовірності переходів стають однаковими, незалежно від старту.
Баєсівський аналіз даних у Python

Ланцюги Маркова

  • Моделює послідовність станів із переходами за заданими ймовірностями.

Що ведмідь зробить далі:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Після багатьох кроків імовірності переходів стають однаковими, незалежно від старту.

Що ведмідь робитиме у віддаленому майбутньому:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Одна червона точка на пронумерованій осі.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Дві точки на пронумерованій осі: одна червона, одна чорна.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Дві точки на пронумерованій осі: одна червона, одна зелена.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Три точки на пронумерованій осі: червона, зелена й чорна.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Дві червоні точки і одна зелена на пронумерованій осі.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Чотири точки на пронумерованій осі: дві червоні й дві зелені.

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

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

Баєсівський аналіз даних у Python

Markov Chain Monte Carlo

Багато точок на пронумерованій осі: частина червона, більшість зелена.

Баєсівський аналіз даних у 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

Давайте потренуємось у MCMC!

Баєсівський аналіз даних у Python

Preparing Video For Download...