Méthode de Monte Carlo par chaîne de Markov et ajustement de modèle

Analyse bayésienne des données en Python

Michal Oleszak

Machine Learning Engineer

Analyse bayésienne en production

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

Monte Carlo

  • Approcher une quantité 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 bayésienne des données en Python

Monte Carlo

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

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

Analyse bayésienne des données en Python

Monte Carlo

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

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

Analyse bayésienne des données en Python

Chaînes de Markov

  • Modélise une suite d'états, entre lesquels on passe avec des probabilités données.
Analyse bayésienne des données en Python

Chaînes de Markov

  • Modélise une suite d'états, entre lesquels on passe avec 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 les mêmes, peu importe le point de départ.
Analyse bayésienne des données en Python

Chaînes de Markov

  • Modélise une suite d'états, entre lesquels on passe avec 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 les mêmes, peu importe le point 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 bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

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

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

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

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

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

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

Trois points le long d'un axe numéroté, un rouge, un vert et un noir.

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

Deux points le long d'un axe numéroté, deux rouges et un vert.

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

Quatre points le long d'un axe numéroté, deux rouges et deux verts.

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

Sept points le long d'un axe numéroté, deux rouges et cinq verts.

Analyse bayésienne des données en Python

Méthode de Monte Carlo par chaîne de Markov

De nombreux points le long d'un axe numéroté, certains rouges, la plupart verts.

Analyse bayésienne des données en Python

Données publicitaires 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 bayésienne des données 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 préalables des paramètres du modèle.

Analyse bayésienne des données en Python

Passons à la pratique avec MCMC !

Analyse bayésienne des données en Python

Preparing Video For Download...