Markov Chain Monte Carlo e stima del modello

Analisi dei dati bayesiana in Python

Michal Oleszak

Machine Learning Engineer

Analisi bayesiana in produzione

  • Approssimazione a griglia: scomoda con molti parametri
  • Campionare da una posteriore nota: richiede priori coniugate
  • Markov Chain Monte Carlo (MCMC): campiona da posteriori ignote!
Analisi dei dati bayesiana in Python

Monte Carlo

  • Approssimare una quantità generando numeri casuali
  • Dalla formula, $\pi r^2 \simeq 78.5$

Un cerchio con raggio 5.

Analisi dei dati bayesiana in Python

Monte Carlo

  • Approssimare una quantità generando numeri casuali
  • Dalla formula, $\pi r^2 \simeq 78.5$
  • Disegna un quadrato 10x10 attorno al cerchio.

Un cerchio con raggio 5 con un quadrato tracciato attorno.

Analisi dei dati bayesiana in Python

Monte Carlo

  • Approssimare una quantità generando numeri casuali
  • Dalla formula, $\pi r^2 \simeq 78.5$
  • Disegna un quadrato 10x10 attorno al cerchio.
  • Campiona 25 punti casuali nel quadrato.
  • Quanti cadono nel cerchio? $19/25=76\%$
  • Area del cerchio stimata: 76% * 100 = 76

Un cerchio con raggio 5 con un quadrato attorno e 25 punti posizionati casualmente nel quadrato.

Analisi dei dati bayesiana in Python

Catene di Markov

  • Modella una sequenza di stati, tra cui si transita con probabilità date.
Analisi dei dati bayesiana in Python

Catene di Markov

  • Modella una sequenza di stati, tra cui si transita con probabilità date.

Cosa farà l'orso dopo:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Dopo molti intervalli di tempo, le probabilità di transizione diventano uguali indipendentemente da dove si parte.
Analisi dei dati bayesiana in Python

Catene di Markov

  • Modella una sequenza di stati, tra cui si transita con probabilità date.

Cosa farà l'orso dopo:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • Dopo molti intervalli di tempo, le probabilità di transizione diventano uguali indipendentemente da dove si parte.

Cosa farà l'orso in un futuro lontano:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Un singolo punto rosso lungo un asse numerato.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Due punti lungo un asse numerato, uno rosso e uno nero.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Due punti lungo un asse numerato, uno rosso e uno verde.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Tre punti lungo un asse numerato: uno rosso, uno verde e uno nero.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Due punti lungo un asse numerato, due rossi e uno verde.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Quattro punti lungo un asse numerato, due rossi e due verdi.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Sette punti lungo un asse numerato, due rossi e cinque verdi.

Analisi dei dati bayesiana in Python

Markov Chain Monte Carlo

Molti punti lungo un asse numerato, alcuni rossi e la maggior parte verdi.

Analisi dei dati bayesiana in Python

Dati aggregati degli annunci

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]
Analisi dei dati bayesiana in Python

Regressione lineare con 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)

Output della funzione print di pymc3, che elenca le prior per i parametri del modello.

Analisi dei dati bayesiana in Python

Esercitiamoci con MCMC!

Analisi dei dati bayesiana in Python

Preparing Video For Download...