Croyance préalable

Analyse bayésienne des données en Python

Michal Oleszak

Machine Learning Engineer

Loi préalable

  • La loi préalable reflète ce que nous savons du paramètre avant toute donnée :
    • rien   →   loi uniforme (toutes les valeurs aussi probables)
    • ancien postérieur   →   peut être mis à jour avec de nouvelles données

 

  • On peut choisir n'importe quelle loi de probabilité comme préalable pour intégrer de l'info externe au modèle :
    • avis d'expert
    • connaissances courantes
    • recherches antérieures
    • croyance subjective
Analyse bayésienne des données en Python

Impact du préalable

Deux tracés de densité superposés : un pour la loi préalable, un pour la loi postérieure. La préalable est uniforme, la postérieure est en cloche, un peu plus haute.

Deux tracés de densité superposés : un pour la loi préalable, un pour la loi postérieure. La préalable est uniforme, la postérieure est en cloche, un peu plus haute et asymétrique vers la droite.

Deux tracés de densité superposés : un pour la loi préalable, un pour la loi postérieure. La préalable est uniforme, la postérieure est en cloche, beaucoup plus haute.

Deux tracés de densité superposés : un pour la loi préalable, un pour la loi postérieure. La préalable est uniforme, la postérieure est en cloche, bien plus haute.

Analyse bayésienne des données en Python

Loi préalable

  • Le préalable est choisi avant de voir les données.
  • Ce choix peut influencer le postérieur (surtout avec peu de données).
  • Pour éviter le « cherry-picking », les choix doivent être :
    • clairement énoncés,
    • justifiables : fondés sur des recherches antérieures, des hypothèses raisonnables, un avis d'expert, etc.
Analyse bayésienne des données en Python

Choisir le bon préalable

Notre croyance préalable : pile moins probable

Un tracé de densité en cloche, mais asymétrique vers la gauche, culminant autour de 0,25.

Certaines options sont meilleures que d'autres !

 

Un tracé de densité en cloche, mais asymétrique vers la gauche, culminant autour de 0,25, légèrement plus étroit que le précédent.

Analyse bayésienne des données en Python

Préalables conjugués

  • Certains préalables, multipliés par des vraisemblances précises, donnent des postérieurs connus.
  • On les appelle des préalables conjugués.
  • Pour le lancer de pièce :
    • si l'on choisit un préalable Beta(a, b),
    • alors le postérieur est Beta(#piles + a, #lancers - #piles + b)
  • On peut échantillonner le postérieur avec numpy.
  • get_heads_prob() du chapitre 1 :
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Analyse bayésienne des données en Python

Deux façons d'obtenir le postérieur

Simulation

  • Si le postérieur est connu, on peut en tirer des échantillons avec numpy :
    draws = np.random.beta(2, 4, 1000)
    
  • Résultat : un tableau de 1000 tirages postérieurs :
    array([0.05941031, ..., 0.70015975])
    
  • Peut être tracé avec
    sns.kdeplot(draws)
    

Calcul

  • Si le postérieur est inconnu, on peut le calculer par approximation sur grille.
  • Résultat : probabilité postérieure pour chaque élément de la grille :
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Peut être tracé avec
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Analyse bayésienne des données en Python

Passons à la pratique !

Analyse bayésienne des données en Python

Preparing Video For Download...