Monte Carlo par chaînes de Markov et ajustement de modèle

Analyse de données bayésienne en Python

Michal Oleszak

Machine Learning Engineer

Analyse bayésienne en production

  • Approximation par grille : peu pratique avec de nombreux paramètres
  • Échantillonnage depuis une postérieure connue : exige des a priori conjugués
  • Markov Chain Monte Carlo (MCMC) : échantillonne depuis une postérieure inconnue !
Analyse de données bayésienne en Python

Monte Carlo

  • Approximations en générant des nombres aléatoires
  • D'après la formule, $\pi r^2 \simeq 78.5$

Un cercle de rayon 5.

Analyse de données bayésienne en Python

Monte Carlo

  • Approximations en générant des nombres aléatoires
  • D'après la formule, $\pi r^2 \simeq 78.5$
  • Tracer un carré 10×10 autour du cercle.

Un cercle de rayon 5 avec un carré tracé autour.

Analyse de données bayésienne en Python

Monte Carlo

  • Approximations en générant des nombres aléatoires
  • D'après la formule, $\pi r^2 \simeq 78.5$
  • Tracer un carré 10×10 autour du cercle.
  • Échantillonner 25 points aléatoires dans le carré.
  • Combien sont dans le cercle ? $19/25=76\%$
  • Aire du cercle approximée : 76 % × 100 = 76

Un cercle de rayon 5 avec un carré autour et 25 points aléatoires dans le carré.

Analyse de données bayésienne en Python

Chaînes de Markov

  • Modélise une suite d'états avec des transitions selon des probabilités données.
Analyse de données bayésienne en Python

Chaînes de Markov

  • Modélise une suite d'états avec des transitions selon des probabilités données.

Que fera l'ours ensuite :

chasser manger dormir
chasser 0.1 0.8 0.1
manger 0.05 0.4 0.55
dormir 0.8 0.15 0.05
  • Après de nombreuses périodes, les probabilités de transition deviennent identiques, quel que soit l'état de départ.
Analyse de données bayésienne en Python

Chaînes de Markov

  • Modélise une suite d'états avec des transitions selon des probabilités données.

Que fera l'ours ensuite :

chasser manger dormir
chasser 0.1 0.8 0.1
manger 0.05 0.4 0.55
dormir 0.8 0.15 0.05
  • Après de nombreuses périodes, les probabilités de transition deviennent identiques, quel que soit l'état de départ.

Que fera l'ours dans un futur lointain :

chasser manger dormir
chasser 0.28 0.44 0.28
manger 0.28 0.44 0.28
dormir 0.28 0.44 0.28
Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Un seul point rouge le long d'un axe gradué.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Deux points le long d'un axe gradué, un rouge et un noir.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Deux points le long d'un axe gradué, un rouge et un vert.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Trois points le long d'un axe gradué : un rouge, un vert et un noir.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Deux points le long d'un axe gradué : deux rouges et un vert.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Quatre points le long d'un axe gradué : deux rouges et deux verts.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Sept points le long d'un axe gradué : deux rouges et cinq verts.

Analyse de données bayésienne en Python

Markov Chain Monte Carlo

Beaucoup de points le long d'un axe gradué, certains rouges, la plupart verts.

Analyse de données bayésienne en Python

Données d'annonces agrégées

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]
Analyse de données bayésienne en Python

Régression linéaire avec 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)

Sortie de la fonction print de pymc3, listant les a priori des paramètres du modèle.

Analyse de données bayésienne en Python

Passons à la pratique !

Analyse de données bayésienne en Python

Preparing Video For Download...