Markov Chain Monte Carlo și ajustarea modelelor

Analiza bayesiană a datelor în Python

Michal Oleszak

Machine Learning Engineer

Analiza bayesiană a datelor în producție

  • Aproximare pe grilă: incomod cu mulți parametri
  • Eșantionare din posteriorul cunoscut: necesită prioruri conjugate
  • Markov Chain Monte Carlo (MCMC): eșantionare din posteriorul necunoscut!
Analiza bayesiană a datelor în Python

Monte Carlo

  • Aproximarea unei cantități prin generarea de numere aleatoare
  • Din formulă, $\pi r^2 \simeq 78.5$

Un cerc cu raza 5.

Analiza bayesiană a datelor în Python

Monte Carlo

  • Aproximarea unei cantități prin generarea de numere aleatoare
  • Din formulă, $\pi r^2 \simeq 78.5$
  • Se trasează un pătrat 10x10 în jurul cercului.

Un cerc cu raza 5 cu un pătrat definit în jurul său.

Analiza bayesiană a datelor în Python

Monte Carlo

  • Aproximarea unei cantități prin generarea de numere aleatoare
  • Din formulă, $\pi r^2 \simeq 78.5$
  • Se trasează un pătrat 10x10 în jurul cercului.
  • Se eșantionează 25 de puncte aleatoare în pătrat.
  • Câte sunt în interiorul cercului? $19/25=76\%$
  • Aproximarea ariei cercului: 76% * 100 = 76

Un cerc cu raza 5 cu un pătrat definit și 25 de puncte poziționate aleator în interior.

Analiza bayesiană a datelor în Python

Lanțuri Markov

  • Modelează o secvență de stări, între care se trece cu probabilități date.
Analiza bayesiană a datelor în Python

Lanțuri Markov

  • Modelează o secvență de stări, între care se trece cu probabilități date.

Ce va face ursul în continuare:

vânează mănâncă doarme
vânează 0.1 0.8 0.1
mănâncă 0.05 0.4 0.55
doarme 0.8 0.15 0.05
  • După multe perioade, probabilitățile de tranziție devin aceleași, indiferent de starea inițială.
Analiza bayesiană a datelor în Python

Lanțuri Markov

  • Modelează o secvență de stări, între care se trece cu probabilități date.

Ce va face ursul în continuare:

vânează mănâncă doarme
vânează 0.1 0.8 0.1
mănâncă 0.05 0.4 0.55
doarme 0.8 0.15 0.05
  • După multe perioade, probabilitățile de tranziție devin aceleași, indiferent de starea inițială.

Ce va face ursul în viitorul îndepărtat:

vânează mănâncă doarme
vânează 0.28 0.44 0.28
mănâncă 0.28 0.44 0.28
doarme 0.28 0.44 0.28
Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Un singur punct roșu pe o axă numerotată.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Două puncte pe o axă numerotată, unul roșu și unul negru.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Două puncte pe o axă numerotată, unul roșu și unul verde.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Trei puncte pe o axă numerotată, unul roșu, unul verde și unul negru.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Două puncte pe o axă numerotată, două roșii și unul verde.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Patru puncte pe o axă numerotată, două roșii și două verzi.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Șapte puncte pe o axă numerotată, două roșii și cinci verzi.

Analiza bayesiană a datelor în Python

Markov Chain Monte Carlo

Multe puncte pe o axă numerotată, unele roșii, majoritatea verzi.

Analiza bayesiană a datelor în Python

Date agregate despre reclame

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]
Analiza bayesiană a datelor în Python

Regresie liniară cu 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)

Rezultatul funcției print din pymc3, cu priorurile parametrilor modelului.

Analiza bayesiană a datelor în Python

Să exersăm MCMC!

Analiza bayesiană a datelor în Python

Preparing Video For Download...