Raisonnez sous condition avec la formule de Bayes
Un test de dépistage détecte 95 % des malades. Votre résultat est positif. Quelle est la probabilité que vous soyez malade ? Si vous avez répondu « 95 % », vous êtes en bonne compagnie : c’est la réponse que donnent aussi beaucoup de médecins interrogés… et elle est fausse, souvent de très loin.
Dans ce chapitre, vous allez apprendre à raisonner quand une information nouvelle arrive : c’est la probabilité conditionnelle, et son outil phare, la formule de Bayes. Le fil rouge sera ce test de dépistage, que nous suivrons jusqu’au bout.
Le fil rouge : un test de dépistage
Section intitulée « Le fil rouge : un test de dépistage »Une maladie touche 2 % d’une population. Un laboratoire propose un test dont on connaît deux caractéristiques :
- sa sensibilité : parmi les malades, 95 % ont un test positif ;
- sa spécificité : parmi les personnes saines, 90 % ont un test négatif (donc 10 % de faux positifs).
Avant tout formalisme, faisons le calcul « en effectifs » sur 10 000 personnes :
| Test positif | Test négatif | Total | |
|---|---|---|---|
| Malades | 190 | 10 | 200 |
| Saines | 980 | 8 820 | 9 800 |
| Total | 1 170 | 8 830 | 10 000 |
Sur les 1 170 tests positifs, seuls 190 concernent des malades : . Les faux positifs, qui ne touchent pourtant que 10 % des personnes saines, sont bien plus nombreux que les vrais positifs, simplement parce que les personnes saines sont 49 fois plus nombreuses. Retenez cette image, elle résume tout le chapitre.
La probabilité conditionnelle
Section intitulée « La probabilité conditionnelle »Savoir que le test est positif revient à restreindre l’univers : on ne regarde plus les 10 000 personnes, mais seulement les 1 170 positives. La probabilité conditionnelle formalise cette restriction.
Soit un événement de probabilité non nulle. La probabilité de sachant est :
- est l’événement « et » ;
- sert de normalisation : on divise par la « taille » du nouvel univers , pour que .
Pour fixé, l’application est une probabilité à part entière : elle vérifie les axiomes de Kolmogorov. Toutes les règles du chapitre 1 restent donc valables « sachant », par exemple .
En retournant la définition, on obtient la formule des probabilités composées, qui sert à calculer la probabilité d’un « et » :
Elle se généralise en chaîne : . C’est exactement ce que vous faites en multipliant les probabilités le long d’une branche d’arbre.
Les probabilités totales
Section intitulée « Les probabilités totales »Pour calculer , on découpe la population en deux groupes, malades et saines, et on additionne les contributions de chaque groupe. C’est un cas particulier d’un résultat général.
Une famille d’événements forme une partition (ou système complet) de s’ils sont deux à deux incompatibles et si leur union est : chaque issue tombe dans exactement un . Alors, pour tout événement :
Autrement dit, est une moyenne pondérée des probabilités conditionnelles , les poids étant les probabilités de chaque groupe.
Le schéma ci-dessous montre l’arbre du test. Chaque chemin multiplie les probabilités de ses branches (probabilités composées), et additionne les deux chemins qui finissent par « positif » (probabilités totales).
La formule de Bayes
Section intitulée « La formule de Bayes »Nous connaissons (la sensibilité), mais c’est qui intéresse le patient. La formule de Bayes permet justement de retourner le conditionnement. Il suffit d’écrire de deux façons avec les probabilités composées :
Et comme le dénominateur se calcule par les probabilités totales, on obtient la forme générale : pour une partition et un événement de probabilité non nulle,
Le vocabulaire associé est important, car vous le retrouverez partout en apprentissage automatique :
- est la probabilité a priori (prior) : ce qu’on croit avant l’observation ;
- est la vraisemblance (likelihood) : la probabilité de l’observation si est vrai ;
- est la probabilité a posteriori (posterior) : ce qu’on croit après l’observation.
Enchaîner les observations
Section intitulée « Enchaîner les observations »Que faire après un test positif ? On en refait un. Si les deux tests se trompent indépendamment l’un de l’autre (une hypothèse à discuter avec le laboratoire), l’a posteriori du premier test devient l’a priori du second :
Deux tests positifs portent la probabilité à 65 % environ. C’est le cœur du raisonnement bayésien : chaque observation met à jour la croyance précédente. Le cours d’Apprentissage automatique en tire un classifieur complet, le Bayes naïf.
On vérifie ces calculs en quelques lignes de R, et même par simulation :
prevalence <- 0.02; sensibilite <- 0.95; specificite <- 0.90
bayes <- function(prior) { vrais_pos <- sensibilite * prior faux_pos <- (1 - specificite) * (1 - prior) vrais_pos / (vrais_pos + faux_pos) # P(M | +)}bayes(prevalence) # 0.162bayes(bayes(prevalence)) # 0.648 après deux tests positifs
# Vérification par simulation sur un million de personnesset.seed(3)n <- 1e6malade <- runif(n) < prevalencepositif <- ifelse(malade, runif(n) < sensibilite, runif(n) < 1 - specificite)mean(malade[positif]) # proportion de malades parmi les positifs, proche de 0.162La dernière ligne traduit exactement la définition : parmi les personnes positives (malade[positif]), quelle proportion est malade ?
En résumé
Section intitulée « En résumé »- La probabilité conditionnelle restreint l’univers aux issues où est réalisé ; c’est une information, pas un ordre dans le temps.
- Les probabilités composées multiplient les probabilités le long d’une branche d’arbre.
- Les probabilités totales additionnent les branches d’une partition.
- La formule de Bayes donne l’a posteriori à partir de l’a priori et de la vraisemblance .
- Ignorer l’a priori (l’oubli du taux de base) conduit à surestimer énormément pour une maladie rare.
- Raisonner en effectifs (sur 10 000 personnes) est le moyen le plus sûr de vérifier un calcul.
Exercices
Section intitulée « Exercices »Exercice · Conditionner sur un dé
facileOn lance deux dés équilibrés. Sachant que la somme vaut 8, quelle est la probabilité que l’un des dés affiche un 6 ? Comparez avec la probabilité, sans condition, qu’au moins un dé affiche un 6.
Voir la solution
Les couples de somme 8 sont : 5 couples équiprobables. Deux d’entre eux contiennent un 6. Donc :
Sans condition, (chapitre 1). L’information « la somme vaut 8 » augmente donc la probabilité d’avoir un 6.
En code
import numpy as np
# Les 36 couples équiprobablesd1, d2 = np.meshgrid(np.arange(1, 7), np.arange(1, 7))somme_8 = (d1 + d2 == 8)un_six = (d1 == 6) | (d2 == 6)
# P(un 6 | somme = 8) = P(un 6 et somme = 8) / P(somme = 8)print(np.sum(un_six & somme_8) / np.sum(somme_8)) # 0.4print(np.mean(un_six)) # 0.3056 (11/36, sans condition)# Les 36 couples équiprobablescouples <- expand.grid(d1 = 1:6, d2 = 1:6)somme_8 <- couples$d1 + couples$d2 == 8un_six <- couples$d1 == 6 | couples$d2 == 6
# Conditionner = ne garder que les issues où la somme vaut 8mean(un_six[somme_8]) # 0.4mean(un_six) # 0.3056 (11/36, sans condition)Exercice · Un filtre anti-spam
moyenDans une boîte de réception, 40 % des courriels sont des spams. Le mot « gratuit » apparaît dans 25 % des spams et dans 2 % des courriels légitimes. Un courriel contient « gratuit » : quelle est la probabilité que ce soit un spam ? Et s’il ne le contient pas ?
Voir la solution
Notons = « spam » et = « contient gratuit ». Par les probabilités totales :
Par Bayes : .
Sans le mot : et , donc .
Le mot fait passer la probabilité de spam de 40 % à 89 % ; son absence ne la fait descendre qu’à 34 %, car la plupart des spams ne contiennent pas ce mot. Un vrai filtre combine des centaines de mots : c’est le principe du Bayes naïf.
En code
p_spam = 0.40p_g_spam, p_g_legit = 0.25, 0.02 # P(G | S) et P(G | non S)
# Probabilités totales, puis Bayesp_g = p_spam * p_g_spam + (1 - p_spam) * p_g_legitprint(p_g) # 0.112print(p_spam * p_g_spam / p_g) # 0.8929 P(S | G)print(p_spam * (1 - p_g_spam) / (1 - p_g)) # 0.3378 P(S | non G)p_spam <- 0.40p_g_spam <- 0.25; p_g_legit <- 0.02 # P(G | S) et P(G | non S)
# Probabilités totales, puis Bayesp_g <- p_spam * p_g_spam + (1 - p_spam) * p_g_legitp_g # 0.112p_spam * p_g_spam / p_g # 0.8929 P(S | G)p_spam * (1 - p_g_spam) / (1 - p_g) # 0.3378 P(S | non G)Exercice · Trois portes
difficileDans un jeu télévisé, une voiture est cachée derrière l’une de trois portes, au hasard. Vous choisissez la porte 1. L’animateur, qui sait où est la voiture, ouvre toujours une porte non choisie qui cache une chèvre ; s’il a le choix, il tire au sort. Il ouvre la porte 3. Avez-vous intérêt à changer pour la porte 2 ? Justifiez avec la formule de Bayes, puis écrivez une simulation R.
Voir la solution
Notons = « la voiture est derrière la porte », avec , et = « l’animateur ouvre la porte 3 ». Les vraisemblances sont :
- si : il peut ouvrir 2 ou 3, il tire au sort, donc ;
- si : il est obligé d’ouvrir la 3, donc ;
- si : il n’ouvre jamais la porte de la voiture, donc .
Par les probabilités totales, . Par Bayes :
Il faut changer : on gagne alors deux fois sur trois. L’intuition « une chance sur deux » oublie que le choix de l’animateur dépend de la position de la voiture, donc apporte de l’information.
En code
import numpy as np
rng = np.random.default_rng(0)n = 100_000gagne_en_changeant = 0for _ in range(n): voiture = rng.integers(1, 4) choix = 1 # portes que l'animateur peut ouvrir : ni la nôtre, ni celle de la voiture possibles = [p for p in (1, 2, 3) if p not in (choix, voiture)] ouverte = rng.choice(possibles) # tirage au sort s'il y en a deux nouveau = ({1, 2, 3} - {choix, ouverte}).pop() # on change de porte gagne_en_changeant += (nouveau == voiture)
print(gagne_en_changeant / n) # 0.6670, proche de 2/3set.seed(7)un_jeu <- function() { voiture <- sample(1:3, 1) choix <- 1 possibles <- setdiff(1:3, c(choix, voiture)) # portes que l'animateur peut ouvrir ouverte <- possibles[sample(length(possibles), 1)] # tirage au sort s'il y en a deux nouveau <- setdiff(1:3, c(choix, ouverte)) # on change de porte nouveau == voiture}mean(replicate(100000, un_jeu())) # 0.6658, proche de 2/3(On passe par possibles[sample(length(possibles), 1)] car sample(x, 1) se comporte différemment quand x est un seul nombre : il tirerait alors dans 1:x.)