Fiches › Carte › 0 · Socle probabiliste › leçon 1

Compter, la probabilité comme dénombrement

Quand toutes les issues ont la même chance, une probabilité est un rapport de deux comptes : les cas favorables sur les cas possibles. Tout l'art est de compter sans tout énumérer. La leçon suit Brunton 01 à 03 avec ses exemples : une pièce, deux dés, un jeu de 52 cartes, des plaques d'immatriculation. Elle ajoute le quatrième cas de dénombrement, que Brunton ne traite pas.

outilà savoir produire au tableau, donnera une cartecultureà comprendre, reste ici, pas de carte▸ blocs à déplier : exemples, preuve, code, où ça casse
Ce que cette leçon suppose acquis
  • Rien de probabiliste. C'est la première leçon du socle : Ω, les événements et les axiomes viennent en l02.
  • Fractions et pourcentages. Simplifier 6/36 = 1/6, et lire 11/36 ≈ 0,306, soit un peu moins d'une chance sur trois.
  • Puissances et produits. 2¹⁰ = 2 × 2 × … × 2, dix facteurs, vaut 1 024. Un produit de facteurs qui décroissent, comme 5 × 4 × 3, se lit de gauche à droite.
  • Le code est facultatif. Il utilise itertools, math.comb, math.perm et numpy, et chaque sortie a été produite en exécutant le bloc.

La leçon

Le cadre : une pièce déterministe, deux problèmes duaux culture

Brunton 01 · Probability and Statistics: Overview (et la fin de 02)

Brunton part d'une pièce. Elle obéit à F = ma : sa masse, son inertie, la résistance de l'air et la gravité fixent l'issue. Le lancer est déterministe, mais trop difficile à prédire avec l'information dont je dispose : « pour moi, c'est aléatoire ». Un système trop complexe pour être mesuré ou modélisé en entier est un bon candidat pour un modèle probabiliste.

Ce modèle a un paramètre, θ = P(pile). La probabilité va du modèle connu vers les données à venir : si θ = ½, sept piles en dix lancers ont la probabilité 120/1024 = 0,117. La statistique fait le chemin inverse : j'ai obtenu dix piles sur dix, que dire de θ ? La pièce est-elle honnête ? Brunton parle de deux problèmes duaux, les deux faces d'une même pièce.

Voir l'idée — le même nombre p(k ; θ), lu dans les deux sens

p(k ; θ) est la probabilité de k piles en 10 lancers d'une pièce de paramètre θ. Le premier panneau, la probabilité : θ est fixé, on lit les onze issues k = 0 … 10, et leurs barres somment à 1. Le second, la statistique : k est observé, on lit le même nombre comme une fonction de θ, la vraisemblance ; son aire vaut 1/11, pas 1 : ce n'est pas une loi de θ. Au départ θ = ½ et k = 7 : la barre rouge et le point rouge valent tous deux 0,117, et la courbe culmine en θ = 0,7. Passe k à 10 : p(10 ; ½) ≈ 0,001. Lance 10 pièces : la séquence, tirée avec le θ courant, fixe k, et la courbe du second panneau se recalcule. Pour θ ≠ ½, p(k ; θ) ne se lit plus en comptant : c'est la loi binomiale de l04.

Les deux écritures
fréquentiste : p(x ; θ), θ fixe      bayésien : p(x ∣ θ) et p(θ ∣ x), θ aléatoire
  • Fréquentiste : θ est un nombre fixe et inconnu. Le point-virgule se lit « calculé avec la valeur θ » : rien n'est conditionné, et « la probabilité de θ » n'a pas de sens. Lue comme une fonction de θ, la même quantité s'appelle la vraisemblance, L(θ ; x).
  • Bayésien : θ est une variable aléatoire, munie d'une loi a priori. p(x ∣ θ) est alors un vrai conditionnement, et p(θ ∣ x), la loi a posteriori, a un sens (Bayes en l03).
  • La barre ∣ est réservée au conditionnement sur un événement ou une variable aléatoire. Les deux se combinent : p(y ∣ x ; θ) conditionne sur l'entrée x, aléatoire, avec des poids θ fixes (p02-01).
Exemples simples sept piles, dix piles, les questions de Brunton, un réseau de neurones
  1. Probabilité, θ = ½ connu. Sur dix lancers, sept piles ont la probabilité 120/1024 = 0,117. Le 120 est le nombre de séquences de dix lancers qui contiennent sept piles : la notion 5 apprend à le compter.
  2. Statistique, données connues : dix piles sur dix. p(10 piles ; θ = ½) = 1/1024 ≈ 0,001. Ce nombre dit que ce résultat est rare pour une pièce honnête. Ce n'est pas « la probabilité que la pièce soit honnête » : θ n'a pas de probabilité en fréquentiste.
  3. Les questions d'appel de Brunton 01, toutes des comptes. Trois dés de somme 13 : 21 triplets sur 6³ = 216, soit 0,097. Le nombre de mains de poker : 2 598 960 (notion 5).
  4. Un réseau de neurones. Ses poids sont un θ. Les apprendre à partir de données est un problème de statistique (Brunton 01) ; générer avec un modèle entraîné, θ fixé, est un problème de probabilité.
Où ça casse
  • Écrire p(x ∣ θ) en fréquentiste. Si θ n'a pas de loi dans ton modèle, il n'y a rien sur quoi conditionner : écris p(x ; θ) et L(θ ; x). Garde la barre pour ce qui est aléatoire, une entrée x, un événement B, ou θ lui-même en bayésien.
  • Probabilité ou statistique ? La question à se poser : qu'est-ce qui est connu ? Le modèle, et on prédit les données ; ou les données, et on remonte au modèle.
  • Le hasard dépend de l'information. Brunton imagine un classifieur qui, en filmant la pièce jusqu'au sommet de sa course, annoncerait pile ou face mieux qu'une chance sur deux : pour lui la pièce serait moins aléatoire. Peu de phénomènes sont aléatoires en eux-mêmes ; Brunton cite la désintégration radioactive.
Brunton, rectifiéBrunton (01) dit que la statistique, c'est « la probabilité des paramètres sachant les données », P(θ ∣ données), et donne pour exemple un test d'hypothèse : « je suis confiant à 95 % que ce médicament marche, ou ne marche pas ». C'est le cadrage bayésien seulement. En statistique fréquentiste θ est fixe : on écrit p(x ; θ) et l'on maximise la vraisemblance L(θ ; x). Un test au seuil de 5 % ne dit pas que le médicament marche avec probabilité 95 % : si le médicament ne fait rien, la procédure conclut à tort à un effet dans 5 % des essais. Le 95 % porte sur la procédure, comme pour un intervalle de confiance (p01-02, pas 5). Il écrit aussi la probabilité des données « sachant des paramètres », P(X = v ∣ θ) ; en fréquentiste, c'est p(x ; θ).
Brunton, rectifiéBrunton (01) énonce le théorème central limite ainsi : la moyenne de variables de même loi « tend vers une loi normale », quelle que soit la loi de départ. Il faut aussi que les variables soient indépendantes et de variance finie. Une même variable recopiée n fois a pour moyenne cette variable, qui garde sa loi ; la moyenne de n variables de Cauchy indépendantes reste une Cauchy. Énoncé exact en l11.

Probabilité : θ connu, on prédit les données. Statistique : les données sont là, on remonte à θ. En fréquentiste θ est fixe et s'écrit après un point-virgule, p(x ; θ) ; la barre ∣ est réservée au conditionnement.

Une probabilité est un rapport de deux comptes outil

Brunton 02 · Gentle Introduction to Probability: Counting Coin Flips and Dice

Brunton commence par le dénominateur : la liste de tout ce qui peut arriver, qu'il appelle Ω. Deux lancers de pièce donnent Ω = {PP, PF, FP, FF}, quatre issues. L'événement A, « au moins un pile », en contient trois : P(A) = 3/4. L'événement B, « aucun pile », n'en contient qu'une, FF : P(B) = 1/4.

Avec deux dés, Ω compte 6 × 6 = 36 couples. Pour « au moins un 5 », Brunton les passe en revue : (1, 5), (2, 5), (3, 5), (4, 5), les six couples qui commencent par 5, puis (6, 5). Onze cas, donc P = 11/36 = 0,306, « un peu moins d'une chance sur trois ». Énumérer, c'est « compter sur ses doigts » : on ne veut pas le faire, mais on peut toujours y revenir comme expérience de pensée.

Voir l'idée — les cases de Ω, les cases de A

Chaque case est une issue de Ω, toutes de même chance. Choisis un événement : ses cases se colorent, et P(A) est leur nombre divisé par le nombre total de cases. Deux pièces, au moins un pile : 3/4 ; aucun pile : 1/4. Deux dés, au moins un 5 : la colonne du 5 et la ligne du 5, 6 + 6 − 1 = 11 cases, car (5, 5) n'est comptée qu'une fois ; 11/36 = 0,306. Somme 7 : 6/36. Lance 1 000 fois : chaque lancer est un point dans sa case, chaque case en reçoit à peu près autant, c'est ce que veut dire équiprobable, et la fréquence de A s'approche du rapport.

La formule
P(A) = #A / #Ω = nombre de cas favorables / nombre de cas possibles
  • Ω est fini, et #Ω désigne son nombre d'éléments. A est une partie de Ω.
  • Les issues de Ω sont équiprobables. C'est l'hypothèse qui fait tout : pièce honnête, dé équilibré, et lancers indépendants, « les deux dés ne s'influencent pas » (Brunton les énonce). Sans elle, compter les cases ne donne plus la probabilité (figure 1).
  • On compte A et Ω de la même façon : si Ω est fait de couples ordonnés, A aussi.
Figure 1 — l'hypothèse se voit : compter les cases, ou mesurer leur aire

Les mêmes 36 cases, mais chacune a pour largeur la probabilité de la face du premier dé et pour hauteur celle du second : son aire est sa probabilité. Augmente P(5), la même sur les deux dés : la colonne et la ligne du 5 s'élargissent. Compter les cases de A donne toujours 11/36 = 0,306 ; l'aire de A, elle, vaut 1 − (1 − q)² et monte jusqu'à 0,75 pour q = 0,5. #A/#Ω ne vaut que si toutes les cases ont la même aire.

Exemples simples deux pièces, deux dés de trois façons, somme 7, trois dés
  1. Deux pièces. Ω = {PP, PF, FP, FF}. Au moins un pile : {PP, PF, FP}, 3/4 = 75 %. Aucun pile : {FF}, 1/4 = 25 %.
  2. Deux dés, au moins un 5, en énumérant : 11 couples sur 36, 11/36 = 0,306.
  3. Le même, en raisonnant (la troisième méthode de Brunton) : soit le premier dé fait 5, soit il ne fait pas 5 et le second fait 5. P = 1/6 + 5/6 × 1/6 = 6/36 + 5/36 = 11/36. Ce calcul utilise déjà la règle de multiplication et l'indépendance, que l03 formalise.
  4. Le même, par le complément : aucun 5, c'est 5 × 5 = 25 couples, donc P(au moins un 5) = 1 − 25/36 = 11/36. « Au moins un » se calcule presque toujours ainsi (l02).
  5. Somme 7 : (1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1), donc 6/36 = 1/6.
  6. Trois dés de somme 13, une question d'appel de Brunton 01 : Ω compte 6³ = 216 triplets, dont 21 de somme 13 (énumérés par le code ci-dessous), soit 21/216 = 0,097.
Simuler en Python énumérer Ω, puis lancer 100 000 fois
import numpy as np
from itertools import product

# Enumerate Omega for two fair dice, then count the event "at least one 5"
omega = list(product(range(1, 7), repeat=2))
A = [w for w in omega if 5 in w]
print(f"#Omega = {len(omega)}, #A = {len(A)}, P(A) = {len(A) / len(omega):.4f}")

# Three dice summing to 13 (a teaser question of video 01)
triples = [t for t in product(range(1, 7), repeat=3) if sum(t) == 13]
print(f"three dice, sum 13: {len(triples)}/216 = {len(triples) / 216:.4f}")

# Simulate 100,000 throws of two dice: each of the 36 cells gets about 1/36 of them
rng = np.random.default_rng(0)
d = rng.integers(1, 7, size=(100_000, 2))
cells = np.bincount((d[:, 0] - 1) * 6 + (d[:, 1] - 1), minlength=36)
print(f"throws per cell: min {cells.min()}, max {cells.max()}, expected {100_000 / 36:.0f}")
print(f"frequency of A: {(d == 5).any(axis=1).mean():.4f}   (11/36 = {11 / 36:.4f})")
#Omega = 36, #A = 11, P(A) = 0.3056
three dice, sum 13: 21/216 = 0.0972
throws per cell: min 2655, max 2886, expected 2778
frequency of A: 0.3071   (11/36 = 0.3056)
Où ça casse
  • Des issues qui ne sont pas équiprobables. Avec un dé pipé, les 36 couples n'ont plus la même chance : il faut pondérer chaque case par sa probabilité (figure 1), ce que font les axiomes de l02.
  • Un Ω mal choisi. Si l'on liste les résultats de deux dés sans ordre, {1, 5}, {5, 5}…, on trouve 21 issues, dont 6 contiennent un 5 : 6/21 = 0,286, faux. {5, 5} ne sort que d'une façon, {1, 5} de deux. Même piège chez d'Alembert, en 1754 (article « Croix ou pile » de l'Encyclopédie) : pour au moins un pile en deux lancers, il retient trois issues, pile, face puis pile, face puis face, et trouve 2/3 au lieu de 3/4 ; la première vaut 1/2, les deux autres 1/4. Le remède : un Ω dont les issues sont vraiment équiprobables, ici les couples ordonnés (notion 6).
  • Un Ω infini. Compter ne marche plus. Sur un Ω infini dénombrable, aucune loi ne donne la même probabilité à toutes les issues : des masses égales et positives sommeraient à l'infini. Sur un intervalle, une densité uniforme existe, mais chaque issue a la probabilité 0 et l'on mesure des longueurs, pas des comptes. Le rang du premier pile demande une loi discrète (l05), le temps d'attente avant le prochain mail une densité (l05).
  • Compter ne passe pas à l'échelle. 300 piles sur 1 000 lancers ou au moins trois 5 sur 15 dés : impossible à lister. Les notions 3 à 7 comptent sans énumérer.

Si les issues de Ω sont équiprobables, P(A) = #A/#Ω, cas favorables sur cas possibles. Deux dés, au moins un 5 : 11/36.

Le principe multiplicatif et l'arbre des choix outil

Brunton 02 (l'arbre des deux dés) et 03 · Counting Probabilities with Combinatorics and the Factorial

Pour les deux dés, Brunton dessine un arbre : six branches pour le premier dé, et chacune se divise en six branches pour le second. Une feuille est un couple, un chemin de la racine à une feuille est une suite de choix. 6 × 6 = 36 feuilles, sans les lister.

La règle tient en une phrase : si un résultat se construit en étapes, avec k1 options à la première puis k2 à la deuxième quel que soit le premier choix, il y a k1 × k2 résultats. Dix lancers de pièce, deux options à chaque étape : 2 × 2 × … × 2 = 2¹⁰ = 1 024 séquences ; « on peut se convaincre que ça devient exponentiel ». Une plaque de quatre lettres puis deux chiffres : 26⁴ × 10² = 45 697 600.

Voir l'idée — chaque étape multiplie le nombre de feuilles

L'arbre de Brunton. Chaque niveau est une étape, chaque branche une option, chaque feuille une séquence complète. Avec 3 pièces, chaque nœud se divise en 2 : 2 × 2 × 2 = 8 feuilles, de PPP à FFF, et le chemin rouge est la séquence PFP. Ajoute une pièce : le nombre de feuilles double. Choisis deux dés : 6 branches, chacune se divise en 6, 36 feuilles. Tire une séquence : un chemin de la racine à une feuille, une option par étape.

La formule
nombre de résultats = k1 × k2 × … × kr
  • Le résultat se construit en r étapes, avec ki options à l'étape i.
  • Le nombre d'options d'une étape ne dépend pas des choix précédents. Les options elles-mêmes peuvent en dépendre : la deuxième carte est l'une des 51 qui restent, lesquelles dépend de la première, mais il en reste toujours 51. C'est ce qui permet de multiplier au lieu d'additionner branche par branche.
  • Deux chemins différents donnent deux résultats différents, et chaque résultat a son chemin. Sinon on compte certains résultats plusieurs fois.
Exemples simples pièces, dés, plaques, une grille d'hyperparamètres
  1. Deux, trois pièces : 2 × 2 = 4 séquences, 2 × 2 × 2 = 8.
  2. Deux dés : 6 × 6 = 36 couples, le Ω de la notion 2.
  3. Dix pièces : 2¹⁰ = 1 024. Mille pièces : 2¹⁰⁰⁰ ≈ 10³⁰¹, qu'aucun arbre ne dessinera.
  4. Une plaque de quatre lettres (26 options chacune) puis deux chiffres (10 options chacun), répétitions permises : 26 × 26 × 26 × 26 × 10 × 10 = 45 697 600.
  5. Une grille d'hyperparamètres. 4 taux d'apprentissage × 3 tailles de batch × 5 profondeurs = 60 entraînements. Un quatrième hyperparamètre à 5 valeurs les porte à 300 : chaque axe ajouté multiplie le coût, c'est pour cela qu'on passe à une recherche aléatoire.
Preuve par récurrence sur les étapes, en lisant l'arbre

Notons Nr le nombre de feuilles d'un arbre à r étapes.

N1 = k1
une étape : une feuille par option
Nr = k1 × (feuilles sous une branche)
les k1 branches de la racine portent chacune un sous-arbre ; ils ont tous le même nombre de feuilles, car le nombre d'options ne dépend pas du chemin
= k1 × (k2 × … × kr)
chaque sous-arbre a r − 1 étapes, hypothèse de récurrence

L'hypothèse sert à la deuxième ligne : si le nombre d'options variait d'une branche à l'autre, il faudrait additionner les sous-arbres un par un au lieu de multiplier.

Où ça casse
  • Le nombre d'options dépend du chemin. Deux dés, le second strictement plus grand que le premier : après un 1, 5 options ; après un 2, 4 ; … après un 6, aucune. Total 5 + 4 + 3 + 2 + 1 + 0 = 15, pas 6 × 5 = 30. On additionne alors les branches.
  • Deux chemins pour un même résultat. Choisir deux personnes parmi dix « une première, puis une seconde » donne 10 × 9 = 90 chemins, mais chaque paire est comptée deux fois : 45 paires. C'est la division par r! de la notion 5.
  • L'arbre explose. Il sert à comprendre, pas à compter : à partir de quelques étapes on ne le dessine plus, on multiplie.

Un résultat construit en r étapes, avec ki options à l'étape i quels que soient les choix précédents, et deux suites de choix distinctes donnant deux résultats distincts : k1 × k2 × … × kr résultats.

Tirer dans l'ordre, avec ou sans remise outil

Brunton 03

Une séquence est un tirage où l'ordre compte : PF n'est pas FP. Pour la pièce, chaque lancer est « une pièce neuve » : un pile au premier n'empêche pas un pile au second. C'est un tirage avec remise, 2 options à chacune des 10 étapes, 2¹⁰ séquences.

Distribue maintenant cinq cartes du dessus d'un paquet de 52, dans l'ordre. La première a 52 possibilités ; une fois sortie, il en reste 51 pour la deuxième, puis 50, 49, 48. Le réservoir rétrécit : c'est un tirage sans remise, 52 × 51 × 50 × 49 × 48 = 311 875 200 séquences. Brunton l'écrit 52!/47! : la factorielle 52! = 52 × 51 × … × 2 × 1, divisée par 47!, ne garde que les cinq premiers facteurs. « Ces deux cas ont des probabilités très différentes. »

Voir l'idée — le réservoir qui rétrécit, ou qu'on remplit à nouveau

Le paquet de 52 cartes et les cinq cases de Brunton. Distribue : chaque carte tirée sort du paquet, et la case suivante n'a plus que 51, puis 50, 49, 48 choix. Le produit 52 × 51 × 50 × 49 × 48 = 311 875 200 compte les séquences de cinq cartes. Avec remise, la carte revient dans le paquet avant le tirage suivant : 52 choix à chaque case, 52⁵ = 380 204 032 séquences, et une même carte peut sortir deux fois.

La formule
avec remise : nr      sans remise : n!/(n − r)! = n(n − 1) … (n − r + 1)
  • n objets distincts, r tirages, et deux séquences qui diffèrent par l'ordre comptent pour deux. Pour la pièce n = 2 et r = 10 ; pour les cartes n = 52 et r = 5.
  • Sans remise, il faut r ≤ n : il y a r facteurs, du plus grand, n, au plus petit, n − r + 1.
  • n! = n(n − 1) … 2 · 1, et 0! = 1 par convention, pour que r = n donne n!/0! = n!, le nombre d'ordres de n objets.
Figure 2 — le rapport des deux formules est une probabilité

Parmi les nr séquences avec remise, les n!/(n − r)! sont celles où aucun objet ne se répète. Leur rapport est donc la probabilité que r tirages avec remise soient tous différents. Pour n = 26 et r = 4, quatre lettres de plaque toutes différentes : 358 800/456 976 = 0,785, le devoir que donne Brunton. Choisis n = 365 et monte r : à r = 23 le rapport passe sous ½ (0,493) ; c'est le problème des anniversaires de l02.

Exemples simples pièces, cartes, plaques, podium, tokens
  1. Dix lancers : n = 2, r = 10, avec remise : 2¹⁰ = 1 024.
  2. Cinq cartes dans l'ordre : 52!/47! = 311 875 200. Si l'on remettait et rebattait à chaque fois : 52⁵ = 380 204 032.
  3. Plaques, le devoir de Brunton. Avec répétitions : 26⁴ × 10² = 45 697 600. Sans lettre ni chiffre répété : 26 × 25 × 24 × 23 × 10 × 9 = 32 292 000. Avec répétitions permises, la probabilité que les quatre lettres soient toutes différentes : 358 800/456 976 = 0,785.
  4. Un podium de 8 coureurs, or, argent, bronze : 8 × 7 × 6 = 336.
  5. Les ordres d'un paquet : 52! ≈ 8,07 × 10⁶⁷.
  6. Des séquences de tokens. Un vocabulaire de V = 50 257 tokens (celui de GPT-2) et des séquences de L tokens, qui peuvent se répéter : VL. Pour L = 3, environ 1,27 × 10¹⁴ ; pour un contexte de 1 024 tokens, environ 10⁴⁸¹⁴.
Preuve le principe multiplicatif, deux fois
n × n × … × n = nr
avec remise : n options à chacune des r étapes (notion 3)
n × (n − 1) × … × (n − r + 1)
sans remise : à l'étape i, i − 1 objets sont déjà sortis, il en reste n − i + 1, quels qu'ils soient
= [n(n − 1) … (n − r + 1) × (n − r)!] / (n − r)!
multiplier et diviser par (n − r)!
= n! / (n − r)!
le numérateur est le produit de n jusqu'à 1

C'est le devoir de Brunton : 52!/47! = (52 × 51 × 50 × 49 × 48 × 47!)/47!, et les 47 derniers facteurs se simplifient.

Simuler en Python énumérer, compter, simuler les plaques, et un piège de numpy
import math
import numpy as np
from itertools import product, permutations

n, r = 5, 3
print("ordered, with replacement   :", len(list(product(range(n), repeat=r))), "=", n**r)
print("ordered, without replacement:", len(list(permutations(range(n), r))), "=", math.perm(n, r))
print("5 cards in order            :", math.perm(52, 5), "=", 52 * 51 * 50 * 49 * 48)

# Plates: 4 letters drawn with replacement; how often are they all different?
rng = np.random.default_rng(1)
letters = np.sort(rng.integers(0, 26, size=(200_000, 4)), axis=1)
distinct = (np.diff(letters, axis=1) > 0).all(axis=1)
exact = math.perm(26, 4) / 26**4
print(f"P(4 distinct letters): simulated {distinct.mean():.4f}, exact {exact:.4f}")

# Trap: numpy integers are 64-bit and overflow silently
print("np.prod(1..21)     =", np.prod(np.arange(1, 22)))
print("math.factorial(21) =", math.factorial(21))
ordered, with replacement   : 125 = 125
ordered, without replacement: 60 = 60
5 cards in order            : 311875200 = 311875200
P(4 distinct letters): simulated 0.7849, exact 0.7852
np.prod(1..21)     = -4249290049419214848
math.factorial(21) = 51090942171709440000
Où ça casse
  • Plus de tirages que d'objets. Sans remise, r > n est impossible : 7 cartes distinctes parmi 6, c'est 0 façon.
  • Des objets identiques. Les formules supposent n objets distincts. Les anagrammes de PAPA ne sont pas 4! = 24 mais 4!/(2! × 2!) = 6 : c'est le coefficient multinomial de l02.
  • Les entiers débordent. numpy calcule sur 64 bits : np.prod jusqu'à 21 renvoie un nombre négatif sans prévenir (code ci-dessus). Utilise math.factorial, math.perm, ou des logarithmes.
Brunton, rectifiéBrunton (03) lit à voix haute « 52 fois 51 fois 50 fois 48 fois 49 fois 48 ». C'est un lapsus : il y a cinq facteurs, 52 × 51 × 50 × 49 × 48, un par carte distribuée.

r tirages ordonnés parmi n objets distincts : nr avec remise, n!/(n − r)! = n(n − 1)…(n − r + 1) sans remise.

Sans ordre ni remise : C(n, r), diviser par r! outil

Brunton 03

Une main de poker n'a pas d'ordre : {R, D, 2, 3, 7} et {R, 2, D, 7, 3} sont la même main, « je peux déplacer mes cartes ». Pour compter les mains, Brunton repart des séquences de la notion 4 et se demande combien de séquences donnent la même main.

Les cinq cartes d'une main peuvent se ranger de 5 × 4 × 3 × 2 × 1 = 5! = 120 façons, ses permutations. Chaque main correspond donc à exactement 120 séquences, et il y a 311 875 200/120 = 2 598 960 mains. « Je veux que tu ralentisses et que tu y réfléchisses : c'est un point vraiment important. » Ce nombre se note C(52, 5), « 5 parmi 52 ».

Voir l'idée — une main, ce sont r! séquences

Trois cartes parmi cinq piques, as, roi, dame, valet et 10 : il y a 5 × 4 × 3 = 60 séquences. Rangées par main, chaque ligne réunit les 3! = 6 ordres des mêmes trois cartes : 10 lignes, donc 60/6 = 10 mains. Passe à l'ordre de distribution : les six séquences de la main surlignée se dispersent parmi les 60, mais il y en a toujours exactement six, pour chaque main. Main suivante en surligne une autre. C'est l'argument de Brunton pour diviser par r!.

La formule
C(n, r) = n! / (r! (n − r)!) = n(n − 1) … (n − r + 1) / r!
  • n objets distincts, r ≤ n, sans remise, et l'ordre ne compte pas : on compte des sous-ensembles de taille r.
  • L'hypothèse « distincts » sert : elle garantit que les r objets d'une main donnent r! séquences toutes différentes.
  • On l'écrit aussi avec n au-dessus de r entre parenthèses, ou Cnr dans les vieux manuels ; en anglais, « n choose r ». Symétrie : C(n, r) = C(n, n − r), et C(n, 0) = C(n, n) = 1.
Figure 3 — les 1 024 séquences de dix lancers, rangées par nombre de piles

Les 2¹⁰ = 1 024 séquences de la notion 3, rangées selon leur nombre de piles. La barre k compte C(10, k) séquences : il suffit de choisir quels k lancers, parmi les dix, tombent sur pile. Les barres somment à 1 024. Au moins 5 piles, la question qui ouvre Brunton 03 : 252 + 210 + 120 + 45 + 10 + 1 = 638 séquences, soit 638/1024 = 0,623. Passe à exactement et à k = 7 : 120/1024 = 0,117, le nombre de la notion 1.

Exemples simples trois cartes parmi cinq, poker, pièces, loto, variables explicatives
  1. Trois cartes parmi cinq : 5 × 4 × 3 = 60 séquences, divisées par 3! = 6 : C(5, 3) = 10 mains (la vignette).
  2. Les mains de poker : C(52, 5) = 311 875 200/120 = 2 598 960.
  3. Un carré (quatre cartes de même hauteur) : on choisit la hauteur, 13 options ; les quatre cartes sont alors imposées ; la cinquième est l'une des 48 restantes. 13 × 48 = 624 mains, soit 624/2 598 960 ≈ 1 chance sur 4 165. La quinte flush que cite Brunton 02 : 10 par couleur, royale comprise, 40 mains, 1,5 × 10⁻⁵.
  4. Sept piles en dix lancers : C(10, 7) = 120 séquences sur 1 024, la probabilité 0,117 de la notion 1. Au moins cinq : 638/1024 = 0,623 (figure 3).
  5. Un loto 6 parmi 49 : C(49, 6) = 13 983 816 grilles.
  6. Des sous-ensembles de variables explicatives (features). Chercher le meilleur sous-ensemble de 5 features parmi 20 demanderait C(20, 5) = 15 504 entraînements, et 2²⁰ = 1 048 576 toutes tailles confondues : on ne fait donc jamais de recherche exhaustive. Une forêt aléatoire tire aussi m features parmi p à chaque nœud, mais pour décorréler ses arbres (p07-02).
Preuve compter les séquences de deux façons
#séquences = n! / (n − r)!
notion 4 : r tirages ordonnés sans remise
#séquences = #mains × r!
chaque séquence appartient à une seule main, celle de ses r objets, et chaque main en donne r! (principe multiplicatif : r places pour le premier objet, r − 1 pour le deuxième…)
#mains = n! / (r! (n − r)!) = C(n, r)
égaler les deux comptes et diviser par r!

Symétrie. Choisir les r objets qu'on garde, c'est choisir les n − r qu'on laisse : C(n, r) = C(n, n − r). La formule le montre aussi, r! et (n − r)! échangent leurs places. Ainsi C(52, 47) = C(52, 5) = 2 598 960.

Simuler en Python six séquences par main, et les 2 598 960 mains énumérées
from collections import Counter
from itertools import combinations, permutations
from math import comb

# Each 3-card hand out of 5 cards corresponds to exactly 3! = 6 sequences
seqs = list(permutations("ARDVT", 3))        # T stands for the 10
hands = Counter(frozenset(s) for s in seqs)
print(len(seqs), "sequences,", len(hands), "hands,", set(hands.values()), "sequences per hand")

# Enumerate all 5-card poker hands and count four of a kind
deck = [(rank, suit) for rank in range(13) for suit in range(4)]
n_hands = n_quads = 0
for hand in combinations(deck, 5):
    n_hands += 1
    n_quads += 4 in Counter(rank for rank, _ in hand).values()
print(n_hands, "hands =", comb(52, 5), "| four of a kind:", n_quads, "=", 13 * 48)
print(f"P(four of a kind) = {n_quads / n_hands:.6f}, about 1 in {n_hands / n_quads:.0f}")
60 sequences, 10 hands, {6} sequences per hand
2598960 hands = 2598960 | four of a kind: 624 = 624
P(four of a kind) = 0.000240, about 1 in 4165
Où ça casse
  • Diviser par r! demande des objets distincts. Avec remise, la séquence (5, 5) n'a qu'un ordre, pas deux : diviser 36 par 2! donne 18, alors que deux dés sans ordre ont 21 résultats (notion 6, figure 4).
  • Un numérateur ordonné sur un dénominateur non ordonné. Pour une probabilité, compter A et Ω dans le même modèle. Les carrés comptés dans l'ordre, 624 × 120 = 74 880 séquences, se divisent par 311 875 200 séquences : on retrouve 624/2 598 960. Mélanger les deux fausse le résultat d'un facteur 120.
  • r > n. C(n, r) = 0 : on ne choisit pas 6 cartes parmi 5.
Brunton, rectifiéBrunton (03) dit « pour chaque séquence, il y a r! mains équivalentes ». C'est l'inverse : chaque main correspond à r! séquences, d'où la division du nombre de séquences par r!.

Choisir r objets parmi n distincts, sans ordre ni remise : C(n, r) = n!/(r!(n − r)!), car chaque main correspond à r! séquences.

Sans ordre, avec remise : C(n + r − 1, r) culture

absent chez Brunton : la case qui manque à sa vidéo 03

Lance deux dés ensemble sans les distinguer, et note seulement les valeurs obtenues : {1, 1}, {1, 2}, …, {6, 6}. Combien de résultats ? Pas 36, l'ordre ne compte plus ; pas 36/2 = 18 non plus, car un double comme {5, 5} n'avait qu'un ordre. Il y en a 21.

L'astuce classique s'appelle étoiles et barres. Prends 3 boules de glace parmi 4 parfums, un parfum pouvant revenir. Écris chaque boule par une étoile et sépare les parfums par 3 barres : ★★|★|| veut dire deux vanille, un chocolat, ni fraise ni pistache. Chaque panier devient une suite de 6 symboles, et une telle suite est fixée par la place de ses 3 étoiles : C(6, 3) = 20 paniers.

Voir l'idée — un panier, c'est une place pour chaque étoile

Un panier de 3 boules parmi 4 parfums (vanille, chocolat, fraise, pistache) s'écrit avec 3 étoiles, les boules, et 3 barres, les séparations entre parfums : ★★|★|| se lit deux vanille, un chocolat. Chaque panier est une façon de placer 3 étoiles parmi 6 places : C(6, 3) = 20, tous listés en dessous. Panier suivant les parcourt. Deux dés sans ordre : 2 étoiles et 5 barres pour 6 faces, C(7, 2) = 21 résultats.

La formule
C(n + r − 1, r) = C(n + r − 1, n − 1)
  • n types distincts, r tirages avec remise, l'ordre ne compte pas : on compte des multi-ensembles, des ensembles où un élément peut revenir.
  • r peut dépasser n : 10 boules parmi 4 parfums, C(13, 10) = 286 paniers.
  • Ces résultats ne sont pas équiprobables quand ils viennent de tirages indépendants : la formule compte des résultats, elle ne donne pas de probabilité (où ça casse).
Exemples simples dés, glaces, dominos, bootstrap
  1. Deux dés sans ordre : n = 6, r = 2, C(7, 2) = 21 : les 15 paires de faces différentes et les 6 doubles.
  2. Trois boules, quatre parfums : C(6, 3) = 20.
  3. Trois dés sans ordre : C(8, 3) = 56.
  4. Un jeu de dominos double-six : chaque domino est un multi-ensemble de 2 valeurs parmi 7 (de 0 à 6), C(8, 2) = 28 dominos.
  5. Le bootstrap. Rééchantillonner 10 lignes avec remise parmi 10 (p01-05, pas 4) : si l'on ne regarde que combien de fois chaque ligne revient, il y a C(19, 10) = 92 378 rééchantillons distincts.
Preuve une bijection entre paniers et suites d'étoiles et de barres
panier ↦ ★…★ | ★…★ | … | ★…★
autant d'étoiles que de boules du type 1, une barre, puis le type 2, et ainsi de suite : n − 1 barres en tout
suite ↦ panier
lire les étoiles entre deux barres redonne les quantités : l'application se renverse, c'est une bijection
#suites = C(n + r − 1, r)
une suite de r + n − 1 symboles est fixée par les r places de ses étoiles (notion 5)

Choisir les n − 1 places des barres revient au même : d'où la seconde écriture, C(n + r − 1, n − 1).

Simuler en Python 21 résultats, mais pas de même probabilité
import numpy as np
from itertools import combinations_with_replacement
from math import comb, factorial

# Unordered results of two dice: multisets {i, j} with i <= j
multisets = list(combinations_with_replacement(range(1, 7), 2))
print(len(multisets), "unordered results = C(7, 2) =", comb(7, 2))

# They are not equally likely: throw 100,000 pairs and sort each one
rng = np.random.default_rng(2)
d = np.sort(rng.integers(1, 7, size=(100_000, 2)), axis=1)
freq = lambda a, b: np.mean((d[:, 0] == a) & (d[:, 1] == b))
print("{5, 5}:", f"{freq(5, 5):.4f}  (1/36 = {1 / 36:.4f})")
print("{1, 5}:", f"{freq(1, 5):.4f}  (2/36 = {2 / 36:.4f})")

# Counting "at least one 5" on the 21 multisets gives the wrong answer
naive = sum(5 in m for m in multisets) / len(multisets)
simulated = (d == 5).any(axis=1).mean()
print(f"at least one 5: 6/21 = {naive:.4f}, simulated {simulated:.4f}, 11/36 = {11 / 36:.4f}")

# Bootstrap of 10 rows: distinct resamples, and P(each row appears exactly once)
print("C(19, 10) =", comb(19, 10), "  P(all 10 rows once) =", round(factorial(10) / 10**10, 5))
21 unordered results = C(7, 2) = 21
{5, 5}: 0.0284  (1/36 = 0.0278)
{1, 5}: 0.0564  (2/36 = 0.0556)
at least one 5: 6/21 = 0.2857, simulated 0.3078, 11/36 = 0.3056
C(19, 10) = 92378   P(all 10 rows once) = 0.00036
Où ça casse
  • Ces résultats ne sont pas équiprobables. Deux dés lancés au hasard donnent {5, 5} d'une seule façon, (5, 5), et {1, 5} de deux, (1, 5) et (5, 1) : 1/36 contre 2/36. Compter « au moins un 5 » sur les 21 résultats donne 6/21 = 0,286, au lieu de 11/36 = 0,306 (code ci-dessus). Pour une probabilité, revenir aux séquences ordonnées, qui, elles, sont équiprobables. Il existe des modèles où les multi-ensembles le sont, la statistique de Bose-Einstein des photons, mais pas des dés ni des rééchantillonnages tirés indépendamment.
  • Le bootstrap, même piège. Les 92 378 rééchantillons n'ont pas la même chance : celui qui contient les 10 lignes une fois chacune a la probabilité 10!/10¹⁰ = 0,00036, celui qui répète 10 fois une ligne donnée 10⁻¹⁰.
  • Le même compte sous un autre nom. Ranger r boules indiscernables dans n boîtes, c'est choisir combien de boules vont dans chaque boîte : C(n + r − 1, r). Si les boules sont numérotées, chacune choisit sa boîte : nr (notion 4). Avant de compter, se demander si les objets se distinguent.
Brunton, rectifiéBrunton (03) présente trois cas : ordonné avec remise, ordonné sans remise, non ordonné sans remise. Il en manque un quatrième, non ordonné avec remise, qui se compte par C(n + r − 1, r). Le tableau complet est en notion 7.

Avec remise et sans ordre, on compte des multi-ensembles : C(n + r − 1, r), par étoiles et barres. Ils ne sont pas équiprobables : pour une probabilité, on compte les séquences.

Les quatre cas : deux questions choisissent la formule outil

Brunton 03 (le devoir des plaques), complété du quatrième cas

Pour la plaque d'immatriculation, Brunton pose deux questions avant tout calcul. « L'ordre compte-t-il ? Clairement oui. » « Avec ou sans remise ? Réalistement avec : AABB99 est une plaque tout à fait valable. » Il en déduit la case, ordre et remise ; le calcul, un nr par bloc, est laissé en devoir : 26⁴ × 10² = 45 697 600.

Ces deux questions suffisent toujours. Chacune a deux réponses, d'où quatre cas, et une formule par cas. Le signal se lit dans l'énoncé. L'ordre compte pour une séquence, un code, un classement, une plaque ; il ne compte pas pour une main, un comité, un sous-ensemble, un panier. On remet quand un même objet peut revenir, une face de dé, une lettre, un parfum ; on ne remet pas quand un objet sorti ne revient pas, une carte distribuée, un coureur sur le podium.

Voir l'idée — le tableau 2 × 2, et un scénario par case

Deux questions, quatre cases. Choisis un scénario : la case qui répond aux deux questions s'allume, avec le compte. La plaque : l'ordre compte, une lettre peut revenir, donc nr sur chaque bloc puis le principe multiplicatif, 26⁴ × 10² = 45 697 600. Le podium : l'ordre compte, un coureur ne monte pas deux fois, 8 × 7 × 6 = 336. La main de poker : ni ordre ni remise, C(52, 5). Les boules de glace : sans ordre et avec répétition, la case que Brunton ne traite pas. Chaque case porte aussi le nom de la fonction d'itertools qui l'énumère.

Le tableau
l'ordre compte : nr avec remise  ·  n!/(n − r)! sans remise
l'ordre ne compte pas : C(n + r − 1, r) avec remise  ·  C(n, r) sans remise
  • n objets distincts, r tirages. Si l'énoncé mêle plusieurs réservoirs (lettres puis chiffres), on compte chaque bloc puis on multiplie (notion 3).
  • « L'ordre compte » se décide par la question, pas par les objets : cinq cartes distribuées sont une séquence si l'on demande dans quel ordre elles sortent, une main sinon. « C'est toi l'arbitre du scénario que tu comptes », dit Brunton.
  • Pour une probabilité, A et Ω se comptent dans le même cas, et dans un cas où les issues sont équiprobables. Avec des tirages indépendants, ce n'est pas la case sans ordre avec remise.
Figure 4 — les quatre cas sur deux dés

Les quatre cas avec n = 6 faces et r = 2 dés, dans la grille de la notion 2. Ordonné avec remise : les 36 couples. Ordonné sans remise : on retire les 6 doubles, 6 × 5 = 30. Sans ordre ni remise : (2, 5) et (5, 2) ne font qu'un, on garde une case sur deux, 30/2! = 15 = C(6, 2). Sans ordre, avec remise : on rajoute les doubles, 21 = C(7, 2), et non 36/2! = 18, parce qu'un double n'a qu'un ordre. Chaque case affiche alors sa probabilité, 1/36 pour un double, 2/36 pour une paire : le piège de la notion 6.

Exemples simples un scénario par case, puis quelques autres
  1. Ordre et remise : la plaque. L'ordre compte, une lettre peut revenir. 26⁴ lettres × 10² chiffres = 45 697 600. Même case : dix lancers de pièce, 2¹⁰ = 1 024 ; un mot de passe de 8 caractères parmi 62 (lettres et chiffres) : 62⁸ ≈ 2,18 × 10¹⁴.
  2. Ordre sans remise : le podium. Or, argent, bronze parmi 8 coureurs, un coureur par marche : 8 × 7 × 6 = 336. Même case : cinq cartes distribuées dans l'ordre, 311 875 200.
  3. Ni ordre ni remise : la main. C(52, 5) = 2 598 960 mains de poker ; C(49, 6) = 13 983 816 grilles de loto ; C(20, 5) = 15 504 sous-ensembles de 5 features parmi 20.
  4. Sans ordre, avec remise : le panier. 3 boules parmi 4 parfums : C(6, 3) = 20 ; deux dés sans les distinguer : C(7, 2) = 21.
  5. Le même problème dans deux cases. La probabilité d'un carré au poker se calcule en mains, 624/2 598 960, ou en séquences, 74 880/311 875 200 : même résultat, parce que les deux cases sont sans remise et que chaque main compte r! = 120 séquences en haut comme en bas.
Simuler en Python les quatre fonctions d'itertools, une par case
from itertools import product, permutations, combinations, combinations_with_replacement
from math import comb, perm

n, r = 6, 2                                    # two dice
faces = range(1, n + 1)
cases = [
    ("ordered,   with replacement     n^r", product(faces, repeat=r), n**r),
    ("ordered,   without replacement  n!/(n-r)!", permutations(faces, r), perm(n, r)),
    ("unordered, without replacement  C(n, r)", combinations(faces, r), comb(n, r)),
    ("unordered, with replacement     C(n+r-1, r)",
     combinations_with_replacement(faces, r), comb(n + r - 1, r)),
]
for name, it, formula in cases:
    print(f"{name:<45} enumerated {len(list(it)):>2}   formula {formula:>2}")
ordered,   with replacement     n^r           enumerated 36   formula 36
ordered,   without replacement  n!/(n-r)!     enumerated 30   formula 30
unordered, without replacement  C(n, r)       enumerated 15   formula 15
unordered, with replacement     C(n+r-1, r)   enumerated 21   formula 21
Où ça casse
  • Deux réservoirs dans un même énoncé. La plaque n'est pas 36⁶ : quatre places prennent une lettre, deux un chiffre. On compte chaque bloc, puis on multiplie.
  • L'ordre caché dans la question. « Combien de façons de distribuer 5 cartes » est ambigu : à toi de dire si tu comptes des séquences ou des mains, et de compter A dans le même cas.
  • La case sans ordre avec remise ne donne pas de probabilité par #A/#Ω quand les tirages sont indépendants : ses issues ne sont pas équiprobables (figure 4, notion 6).
  • Des objets identiques, comme les lettres de PAPA, sortent du tableau : c'est le coefficient multinomial (l02). Un tirage sans remise où l'on compte les « bons » objets tirés, comme des pièces défectueuses, mène à la loi hypergéométrique (l02).

Deux questions choisissent la formule : l'ordre compte-t-il ? remet-on ? oui-oui nr, oui-non n!/(n − r)!, non-non C(n, r), non-oui C(n + r − 1, r).

Résumé

À retenir
  1. Probabilité : θ connu, on prédit les données. Statistique : les données sont là, on remonte à θ. En fréquentiste θ est fixe : p(x ; θ).
  2. Issues équiprobables : P(A) = #A/#Ω. Deux dés, au moins un 5 : 11/36.
  3. Principe multiplicatif : k1 × k2 × … × kr, les feuilles de l'arbre.
  4. Ordonné : nr avec remise, n!/(n − r)! sans remise.
  5. Sans ordre ni remise : C(n, r) = n!/(r!(n − r)!), on divise par les r! ordres d'une main.
  6. Sans ordre, avec remise : C(n + r − 1, r), des issues qui ne sont pas équiprobables quand elles viennent de tirages indépendants.
  7. Deux questions choisissent la formule : l'ordre compte-t-il ? remet-on ?
« Quand les issues sont équiprobables, une probabilité est un rapport de deux comptes. Pour compter r tirages parmi n, deux questions suffisent : l'ordre compte-t-il, remet-on ? On obtient nr, n!/(n − r)!, C(n, r) ou C(n + r − 1, r). Le piège : les résultats sans ordre avec remise ne sont pas équiprobables quand ils viennent de tirages indépendants, donc pour une probabilité on compte les séquences. »

Chaîne verbalisée — une prise, à voix haute

7 maillons · clique pour révéler après avoir dit
  1. Deux dés : quelle est la probabilité d'au moins un 5 ?
    11/36 : 36 couples équiprobables, dont 11 contiennent un 5. Ou 1 − 25/36 par le complément.
  2. Combien de séquences de dix lancers de pièce, et pourquoi ?
    2¹⁰ = 1 024 : deux options à chacune des dix étapes, quel que soit le passé (principe multiplicatif).
  3. Combien de façons de distribuer cinq cartes dans l'ordre ? Et combien de mains de poker ?
    52 × 51 × 50 × 49 × 48 = 311 875 200 séquences ; divisées par 5! = 120, 2 598 960 mains.
  4. Pourquoi divise-t-on par r! pour passer des séquences aux mains ?
    Chaque main de r objets distincts correspond à exactement r! séquences, ses permutations.
  5. Quelles deux questions choisissent la formule, et que donnent les quatre réponses ?
    L'ordre compte-t-il ? Remet-on ? Oui-oui nr, oui-non n!/(n − r)!, non-non C(n, r), non-oui C(n + r − 1, r).
  6. Pourquoi 6/21 est-il faux pour « au moins un 5 » sur deux dés ?
    Les 21 résultats sans ordre ne sont pas équiprobables : {5, 5} vaut 1/36, {1, 5} vaut 2/36. On compte les 36 couples : 11/36.
  7. En fréquentiste, écris-tu p(x ∣ θ) ou p(x ; θ) ? Pourquoi ?
    p(x ; θ) : θ est un nombre fixe, pas une variable aléatoire, il n'y a rien à conditionner. La barre est réservée au conditionnement.