Aller au contenu

Modélisez une expérience aléatoire

Autour d’une table de Yams, une question revient souvent : avec trois dés, vaut-il mieux parier sur une somme de 9 ou sur une somme de 10 ? Les deux s’obtiennent de six façons en apparence (9 = 1+2+6 = 1+3+5 = …), et pourtant l’une sort plus souvent que l’autre. Pour trancher sans lancer les dés mille fois, il faut un modèle : une description précise de ce qui peut arriver et de la chance de chaque issue.

Ce chapitre pose ce modèle, qui servira dans tout le cours. Notre fil rouge sera un jeu de dés, parce qu’on peut y vérifier chaque résultat à la main, puis en simulation avec R.

Une expérience aléatoire est une expérience dont on connaît toutes les issues possibles, mais dont on ne peut pas prévoir le résultat : lancer un dé, tirer une carte, mesurer le temps de réponse d’un serveur. Le « hasard » n’est pas une propriété mystérieuse du monde, c’est une abstraction commode pour tout ce qu’on ne contrôle pas ou qu’on ne veut pas détailler.

On décrit l’expérience avec trois objets.

  • L’univers Ω\Omega (on dit aussi ensemble fondamental) est l’ensemble de toutes les issues possibles. Pour un dé, Ω={1,2,3,4,5,6}\Omega = \lbrace 1, 2, 3, 4, 5, 6 \rbrace. Pour deux dés discernables (un rouge, un bleu), Ω\Omega contient les 36 couples (i,j)(i, j).
  • Une issue (ou événement élémentaire) est un élément ω\omega de Ω\Omega : le couple (3,5)(3, 5), par exemple.
  • Un événement est une partie de Ω\Omega, c’est-à-dire un ensemble d’issues. « La somme vaut 7 » est l’événement {(1,6),(2,5),(3,4),(4,3),(5,2),(6,1)}\lbrace (1,6), (2,5), (3,4), (4,3), (5,2), (6,1) \rbrace. On dit qu’il est réalisé si l’issue obtenue lui appartient.

Comme les événements sont des ensembles, on les combine avec les opérations ensemblistes, qui ont toutes une traduction en français courant :

NotationSe litRéalisé quand…
A∪BA \cup BA ou Bau moins l’un des deux est réalisé
A∩BA \cap BA et Bles deux sont réalisés
Aˉ\bar{A}contraire de AA n’est pas réalisé
A⊂BA \subset BA implique Bchaque fois que A est réalisé, B l’est aussi
A∩B=∅A \cap B = \varnothingA et B incompatiblesils ne peuvent pas se produire ensemble
BAΩA ∪ B : A ou BBAΩA ∩ B : A et BAΩĀ : contraire de ABAΩA ∩ B = ∅ : incompatibles
Les événements sont des parties de Ω : « ou » colorie les deux disques, « et » seulement leur partie commune, le contraire tout ce qui est hors de A. Deux événements incompatibles ne se touchent pas.

L’événement Ω\Omega est l’événement certain, et l’ensemble vide ∅\varnothing l’événement impossible.

Une probabilité PP associe à chaque événement AA un nombre P(A)P(A) qui mesure sa chance de se réaliser. Pour que ce nombre se comporte raisonnablement, on lui impose trois règles, les axiomes de Kolmogorov :

  1. 0≤P(A)≤10 \leq P(A) \leq 1 pour tout événement AA ;
  2. P(Ω)=1P(\Omega) = 1 : il se passe forcément quelque chose ;
  3. si A1,A2,…A_1, A_2, \dots sont deux à deux incompatibles, P(A1∪A2∪… )=P(A1)+P(A2)+…P(A_1 \cup A_2 \cup \dots) = P(A_1) + P(A_2) + \dots (additivité).

Le triplet (Ω,A,P)(\Omega, \mathcal{A}, P) s’appelle un espace probabilisé. Le symbole A\mathcal{A} désigne la tribu : la collection des événements auxquels on accepte de donner une probabilité. Elle doit contenir Ω\Omega, être stable par passage au contraire et par union dénombrable. Pour un dé, on prend toutes les parties de Ω\Omega et on n’y pense plus. La tribu ne devient une vraie question que pour les univers continus (un temps, une position), où l’on ne peut pas mesurer raisonnablement toutes les parties de R\mathbb{R}.

De ces trois axiomes découlent toutes les règles de calcul que vous utiliserez :

  • P(Aˉ)=1−P(A)P(\bar{A}) = 1 - P(A) et P(∅)=0P(\varnothing) = 0 ;
  • si A⊂BA \subset B, alors P(A)≤P(B)P(A) \leq P(B) ;
  • pour deux événements quelconques, P(A∪B)=P(A)+P(B)−P(A∩B)P(A \cup B) = P(A) + P(B) - P(A \cap B).

La dernière formule (dite du crible, ou d’inclusion-exclusion) corrige le double comptage : les issues de A∩BA \cap B ont été comptées une fois dans P(A)P(A) et une fois dans P(B)P(B).

123456dé rouge123456dé bleu(6, 6)A : le rouge fait 6B : le bleu fait 6A ∩ B :comptédeux fois6 + 6 − 1= 11 couplessur 36
A ∪ B couvre une colonne et une ligne de la grille, soit 6 + 6 cases ; la case (6, 6) appartient aux deux et ne doit être comptée qu'une fois : 11 couples sur 36.

Dans beaucoup de situations (dés équilibrés, cartes bien mélangées, tirage au sort), toutes les issues ont la même chance. Si Ω\Omega est fini, chacune a alors la probabilité 1/∣Ω∣1/\lvert \Omega \rvert, où ∣Ω∣\lvert \Omega \rvert est le nombre d’issues, et :

P(A)=∣A∣∣Ω∣=nombre de cas favorablesnombre de cas possiblesP(A) = \frac{\lvert A \rvert}{\lvert \Omega \rvert} = \frac{\text{nombre de cas favorables}}{\text{nombre de cas possibles}}

Calculer une probabilité revient alors à compter. C’est le rôle du dénombrement.

Le point de départ est le principe multiplicatif : si un choix se fait en deux étapes, avec aa possibilités pour la première et bb pour la seconde, il y a a×ba \times b possibilités en tout. Deux dés donnent 6×6=366 \times 6 = 36 couples, un code PIN à quatre chiffres 104=10 00010^4 = 10\,000 codes.

Trois situations reviennent sans cesse, selon que l’ordre compte et que les répétitions sont permises :

SituationFormuleExemple
kk choix ordonnés, répétitions permisesnkn^kun code PIN : 10410^4
kk choix ordonnés, sans répétition (arrangements)Ank=n!(n−k)!A_n^k = \dfrac{n!}{(n-k)!}podium de 3 parmi 10 joueurs : 720720
ranger nn objets (permutations)n!n!ordre de passage de 5 joueurs : 120120
kk choix sans ordre ni répétition (combinaisons)(nk)=n!k! (n−k)!\binom{n}{k} = \dfrac{n!}{k!\,(n-k)!}main de 5 cartes parmi 32 : 201 376201\,376

Ici n!n! (factorielle de nn) vaut n×(n−1)×⋯×1n \times (n-1) \times \dots \times 1, avec 0!=10! = 1, et (nk)\binom{n}{k} se lit « kk parmi nn » (on trouve aussi la notation CnkC_n^k).

Revenons à la question du début. Le piège consiste à compter les combinaisons de valeurs : 99 s’écrit 1+2+61+2+6, 1+3+51+3+5, 1+4+41+4+4, 2+2+52+2+5, 2+3+42+3+4, 3+3+33+3+3, et 1010 s’écrit aussi de six façons. Mais ces écritures ne sont pas équiprobables ! Pour 1+2+61+2+6, les trois dés peuvent se répartir les valeurs de 3!=63! = 6 façons ; pour 1+4+41+4+4, seulement de 3 façons ; pour 3+3+33+3+3, d’une seule.

Travaillons dans le bon univers, celui des 63=2166^3 = 216 triplets ordonnés, tous équiprobables :

  • pour 9 : 6+6+3+3+6+1=256 + 6 + 3 + 3 + 6 + 1 = 25 triplets ;
  • pour 10 (1+3+61+3+6, 1+4+51+4+5, 2+2+62+2+6, 2+3+52+3+5, 2+4+42+4+4, 3+3+43+3+4) : 6+6+3+6+3+3=276 + 6 + 3 + 6 + 3 + 3 = 27 triplets.

Donc P(somme=9)=25/216≈0,116P(\text{somme} = 9) = 25/216 \approx 0{,}116 et P(somme=10)=27/216=0,125P(\text{somme} = 10) = 27/216 = 0{,}125. Pariez sur 10.

3456789101112131415161718somme des trois dés051015202530nombre de triplets (sur 216)2527somme 9somme 101+2+6 : 61+3+5 : 61+4+4 : 32+2+5 : 32+3+4 : 63+3+3 : 125/2161+3+6 : 61+4+5 : 62+2+6 : 32+3+5 : 62+4+4 : 33+3+4 : 327/216six écritures chacune,mais pas le même poids
Les deux sommes ont six écritures chacune, mais une écriture à trois valeurs distinctes pèse 6 triplets, une avec un doublon 3, et 3+3+3 un seul : 25 contre 27.

De la fréquence à la probabilité : simuler en R

Section intitulée « De la fréquence à la probabilité : simuler en R »

Il existe une autre lecture de la probabilité, plus intuitive : si vous répétez l’expérience NN fois dans les mêmes conditions, la fréquence de l’événement AA (le nombre de fois où il se réalise, divisé par NN) se rapproche de P(A)P(A) quand NN grandit. C’est la vision fréquentiste. Elle n’est pas une définition, mais un théorème : la loi des grands nombres, que vous démontrerez au chapitre 7.

Cette vision a une conséquence très pratique : quand un calcul est difficile, on peut simuler l’expérience un grand nombre de fois et mesurer la fréquence. Voici la question des trois dés en R :

set.seed(42) # pour obtenir les mêmes tirages à chaque exécution
N <- 100000
# N lancers de trois dés : une matrice de N lignes et 3 colonnes
des <- matrix(sample(1:6, 3 * N, replace = TRUE), ncol = 3)
sommes <- rowSums(des)
mean(sommes == 9) # fréquence de la somme 9, proche de 25/216 = 0.116
mean(sommes == 10) # fréquence de la somme 10, proche de 27/216 = 0.125

L’astuce mean(sommes == 9) est à connaître : la comparaison produit un vecteur de TRUE/FALSE, que R traite comme des 1 et des 0 ; sa moyenne est donc la proportion de TRUE.

101001 00010 000100 000nombre N de lancers simulés (échelle logarithmique)0,000,050,100,150,200,250,30fréquence observée25/216 ≈ 0,11627/216 = 0,125fréquence de la somme 9fréquence de la somme 10
Sur quelques dizaines de lancers, la fréquence ne permet même pas de départager 9 et 10 ; il faut des milliers de lancers pour qu'elle se colle à la probabilité.

R fournit aussi les outils de dénombrement : factorial(5) donne 120120 et choose(32, 5) donne 201 376201\,376. Le célèbre problème des anniversaires (dans un groupe de kk personnes, quelle est la probabilité que deux d’entre elles soient nées le même jour ?) se calcule par le contraire, en supposant les 365 jours équiprobables :

anniversaire <- function(k) 1 - prod((365 - 0:(k - 1)) / 365)
anniversaire(23) # 0.507 : plus d'une chance sur deux dès 23 personnes
anniversaire(30) # 0.706

Le contraire « toutes les dates sont différentes » compte 365×364×⋯×(365−k+1)365 \times 364 \times \dots \times (365 - k + 1) cas favorables (un arrangement) parmi 365k365^k cas possibles.

010203040506070nombre k de personnes dans le groupe0,00,20,40,60,81,0P(au moins deuxanniversaires communs)23 personnes : 0,50730 personnes : 0,706une chance sur deux
La probabilité monte bien plus vite que l'intuition : une chance sur deux dès 23 personnes, car ce sont les paires de personnes qu'il faut compter, et elles sont 253.
  • Une expérience aléatoire se modélise par un espace probabilisé (Ω,A,P)(\Omega, \mathcal{A}, P) : univers des issues, tribu des événements, probabilité.
  • Les événements se combinent comme des ensembles : union (ou), intersection (et), contraire.
  • Les axiomes de Kolmogorov donnent toutes les règles de calcul, dont P(Aˉ)=1−P(A)P(\bar{A}) = 1 - P(A) et P(A∪B)=P(A)+P(B)−P(A∩B)P(A \cup B) = P(A) + P(B) - P(A \cap B).
  • En cas d’équiprobabilité, P(A)P(A) = cas favorables / cas possibles, et l’on compte avec nkn^k, les arrangements, les permutations et les combinaisons (nk)\binom{n}{k}.
  • Vérifiez toujours que les cas comptés sont équiprobables (le piège des trois dés).
  • La fréquence observée sur de nombreuses répétitions approche la probabilité : c’est ce qui justifie la simulation, par exemple avec sample et mean en R.

Exercice · Deux dés

facile

On lance deux dés équilibrés. Calculez la probabilité :

  1. que la somme vaille 7 ;
  2. que la somme vaille au moins 10 ;
  3. que les deux dés affichent des valeurs différentes.
Voir la solution

On travaille dans l’univers des 36 couples ordonnés, tous équiprobables.

  1. Les couples de somme 7 sont (1,6),(2,5),(3,4),(4,3),(5,2),(6,1)(1,6), (2,5), (3,4), (4,3), (5,2), (6,1) : P=6/36=1/6≈0,167P = 6/36 = 1/6 \approx 0{,}167. C’est la somme la plus probable.
  2. Somme 10 : 3 couples ; somme 11 : 2 couples ; somme 12 : 1 couple. Donc P=6/36=1/6P = 6/36 = 1/6.
  3. Par le contraire : les doubles sont les 6 couples (i,i)(i, i), donc P=1−6/36=5/6≈0,833P = 1 - 6/36 = 5/6 \approx 0{,}833.

En code

import numpy as np
# Les 36 couples (rouge, bleu), tous équiprobables
rouge, bleu = np.meshgrid(np.arange(1, 7), np.arange(1, 7))
somme = rouge + bleu
print(np.mean(somme == 7)) # 0.1667 (6/36)
print(np.mean(somme >= 10)) # 0.1667 (6/36)
print(np.mean(rouge != bleu)) # 0.8333 (30/36)

Exercice · Une main de cartes

moyen

On distribue 5 cartes d’un jeu de 32 cartes (qui contient 4 as). Calculez la probabilité d’avoir exactement deux as, puis celle d’avoir au moins un as.

Voir la solution

L’ordre des cartes dans la main ne compte pas : il y a (325)=201 376\binom{32}{5} = 201\,376 mains, toutes équiprobables.

Exactement deux as : on choisit 2 as parmi 4, soit (42)=6\binom{4}{2} = 6 façons, puis 3 cartes parmi les 28 qui ne sont pas des as, soit (283)=3 276\binom{28}{3} = 3\,276 façons. Donc :

P=6×3 276201 376=19 656201 376≈0,098P = \frac{6 \times 3\,276}{201\,376} = \frac{19\,656}{201\,376} \approx 0{,}098

Au moins un as : par le contraire, une main sans as choisit ses 5 cartes parmi 28, soit (285)=98 280\binom{28}{5} = 98\,280 mains. Donc P=1−98 280/201 376≈1−0,488=0,512P = 1 - 98\,280 / 201\,376 \approx 1 - 0{,}488 = 0{,}512. Un peu plus d’une chance sur deux.

En code

from scipy.special import comb
mains = comb(32, 5, exact=True) # 201376 mains équiprobables
deux_as = comb(4, 2, exact=True) * comb(28, 3, exact=True)
sans_as = comb(28, 5, exact=True)
print(mains, deux_as, sans_as) # 201376 19656 98280
print(deux_as / mains) # 0.0976
print(1 - sans_as / mains) # 0.5120

Exercice · Le pari du chevalier

difficile

Un joueur du XVIIe siècle pariait qu’il obtiendrait au moins un six en lançant 4 fois un dé. Il pensait qu’il était tout aussi avantageux de parier sur au moins un double six en lançant 24 fois deux dés (« 6 fois plus de cas, 6 fois plus de lancers »). Calculez les deux probabilités et commentez. Écrivez ensuite une simulation R qui vérifie la seconde.

Voir la solution

Premier pari. Les lancers sont indépendants (nous préciserons ce mot au chapitre 3) et chacun donne « pas de six » avec probabilité 5/65/6. La probabilité de n’avoir aucun six en 4 lancers est (5/6)4(5/6)^4, donc :

P1=1−(56)4≈1−0,482=0,518P_1 = 1 - \left(\tfrac{5}{6}\right)^4 \approx 1 - 0{,}482 = 0{,}518

Second pari. Un lancer de deux dés donne un double six avec probabilité 1/361/36. Donc :

P2=1−(3536)24≈1−0,509=0,491P_2 = 1 - \left(\tfrac{35}{36}\right)^{24} \approx 1 - 0{,}509 = 0{,}491

Le premier pari est favorable (plus d’une chance sur deux), le second légèrement défavorable. Le raisonnement « proportionnel » est faux, car les probabilités de « au moins un » ne s’additionnent pas lancer après lancer : les événements ne sont pas incompatibles.

En code

import numpy as np
# Calcul exact par le contraire
print(1 - (5/6)**4) # 0.5177
print(1 - (35/36)**24) # 0.4914
# Simulation du second pari : 100 000 parties de 24 lancers de deux dés
rng = np.random.default_rng(0)
d1 = rng.integers(1, 7, size=(100_000, 24))
d2 = rng.integers(1, 7, size=(100_000, 24))
gagne = np.any((d1 == 6) & (d2 == 6), axis=1) # au moins un double six ?
print(gagne.mean()) # 0.4937, proche de 0.491