Markov Chain Monte Carlo och modellanpassning

Bayesiansk dataanalys i Python

Michal Oleszak

Machine Learning Engineer

Bayesiansk dataanalys i praktiken

  • Rutnätsapproximation: opraktisk med många parametrar
  • Sampling från känd posterior: kräver konjugerade priors
  • Markov Chain Monte Carlo (MCMC): sampling från okänd posterior!
Bayesiansk dataanalys i Python

Monte Carlo

  • Approximera en storhet genom att generera slumptal
  • Från formeln, $\pi r^2 \simeq 78.5$

En cirkel med radien 5.

Bayesiansk dataanalys i Python

Monte Carlo

  • Approximera en storhet genom att generera slumptal
  • Från formeln, $\pi r^2 \simeq 78.5$
  • Rita en 10x10 kvadrat runt cirkeln.

En cirkel med radien 5 med en kvadrat definierad runt den.

Bayesiansk dataanalys i Python

Monte Carlo

  • Approximera en storhet genom att generera slumptal
  • Från formeln, $\pi r^2 \simeq 78.5$
  • Rita en 10x10 kvadrat runt cirkeln.
  • Sampla 25 slumpmässiga punkter i kvadraten.
  • Hur många hamnar inuti cirkeln? $19/25=76\%$
  • Approximation av cirkelns area: 76% * 100 = 76

En cirkel med radien 5 med en kvadrat definierad runt den och 25 slumpmässigt placerade punkter inuti kvadraten.

Bayesiansk dataanalys i Python

Markovkedjor

  • Modellerar en sekvens av tillstånd som man övergår mellan med givna sannolikheter.
Bayesiansk dataanalys i Python

Markovkedjor

  • Modellerar en sekvens av tillstånd som man övergår mellan med givna sannolikheter.

Vad gör björnen härnäst:

jagar äter sover
jagar 0.1 0.8 0.1
äter 0.05 0.4 0.55
sover 0.8 0.15 0.05
  • Efter många tidssteg blir övergångssannolikheterna desamma oavsett startpunkt.
Bayesiansk dataanalys i Python

Markovkedjor

  • Modellerar en sekvens av tillstånd som man övergår mellan med givna sannolikheter.

Vad gör björnen härnäst:

jagar äter sover
jagar 0.1 0.8 0.1
äter 0.05 0.4 0.55
sover 0.8 0.15 0.05
  • Efter många tidssteg blir övergångssannolikheterna desamma oavsett startpunkt.

Vad gör björnen i en avlägsen framtid:

jagar äter sover
jagar 0.28 0.44 0.28
äter 0.28 0.44 0.28
sover 0.28 0.44 0.28
Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

En ensam röd punkt längs en numrerad axel.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Två punkter längs en numrerad axel, en röd och en svart.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Två punkter längs en numrerad axel, en röd och en grön.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Tre punkter längs en numrerad axel, en röd, en grön och en svart.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Tre punkter längs en numrerad axel, två röda och en grön.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Fyra punkter längs en numrerad axel, två röda och två gröna.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Sju punkter längs en numrerad axel, två röda och fem gröna.

Bayesiansk dataanalys i Python

Markov Chain Monte Carlo

Många punkter längs en numrerad axel, några röda och flertalet gröna.

Bayesiansk dataanalys i Python

Aggregerad annonsdata

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]
Bayesiansk dataanalys i Python

Linjär regression med 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)

Utdata från pymc3:s print-funktion med priors för modellparametrarna.

Bayesiansk dataanalys i Python

Nu kör vi en övning!

Bayesiansk dataanalys i Python

Preparing Video For Download...