- Variable, réalisation, paramètre. X est le nombre que le tirage va produire, k la valeur observée cette fois-ci, λ ou p un paramètre fixe de la loi. Un paramètre fixe s'écrit après un point-virgule, P(X = k ; λ) ; la barre est réservée au conditionnement (l04).
- Loi discrète et densité. Un compte a une loi P(X = k). Un temps a une densité f : la probabilité d'un intervalle est l'aire sous f, et f(t) seule n'est pas une probabilité (l04).
- Binomiale. Le nombre de succès en n essais indépendants de probabilité p : P(X = k) = C(n, k) pk(1 − p)n−k, E = np, Var = np(1 − p) (l04). Pour n grand et p modéré, elle ressemble à une normale (l04).
- Conditionner, et l'indépendance. P(A ∣ B) = P(A ∩ B)/P(B) ; des événements indépendants ont une probabilité conjointe égale au produit (l03, l03).
La leçon
Poisson, la limite des événements rares outil
Brunton 17 · The Poisson Distribution: the Rare-Event Limit of a Binomial Distribution
Brunton part d'un échec. Mille essais, chacun avec une chance sur mille : la binomiale a pour moyenne np = 1 et pour variance npq = 0,999. La normale de même moyenne et de même variance met 16 % de sa masse sous zéro, sur des nombres de succès négatifs, qui n'existent pas.
Le remède est de garder le nombre moyen de succès λ = np fixé, de faire grandir n et donc de rapetisser p = λ/n. Beaucoup d'occasions, chacune improbable, λ succès en moyenne. À la limite, la binomiale devient la loi de Poisson, qui ne dépend plus que de λ.
L'exemple de Brunton : une usine compte 10 000 néons, et chacun grille dans la journée avec une probabilité de 0,002. Le nombre de néons grillés aujourd'hui suit une loi de Poisson de paramètre λ = 10 000 × 0,002 = 20.
Les barres sont la binomiale exacte, les points rouges la Poisson de même moyenne, la courbe la normale de même moyenne et de même variance, avec en rouge sa masse sous zéro. 1 000 essais à 1/1 000 : la normale met 15,9 % de sa masse sur des comptes négatifs et se trompe de 0,13 au pire ; la Poisson se trompe de 0,0002. Néons : λ = 20, la masse négative tombe à 0,0004 % ; la Poisson colle encore, et la normale aussi, parce qu'à λ = 20 les trois lois se ressemblent.
- C'est la limite de Binomiale(n, p) quand n → ∞ et p → 0 avec np = λ fixé. Ce qui compte est que p soit petit, pas que λ le soit : λ = 20 convient.
- Les occasions sont indépendantes et ont la même probabilité p : c'est la binomiale de l04, et sans indépendance la limite tombe.
- λ est un paramètre fixe, d'où le point-virgule ; k est le compte qu'on observe, une réalisation de X.
- E = Var est un test nécessaire : un seul paramètre fixe à la fois le niveau et la dispersion, donc une variance nettement différente de la moyenne exclut la Poisson ; l'égalité, elle, ne la prouve pas.
Les barres sont la Binomiale(n, λ/n), la ligne rouge à points la Poisson(λ). Les deux ont la même moyenne λ par construction. Monte n à λ fixé : l'écart maximal entre les deux tombe, et la valeur affichée passe au vert sous 0,01 (à λ = 4 et n = 1 000, il vaut 0,0004). Monte λ : la loi s'élargit comme √λ, sa variance reste égale à sa moyenne. Pousse λ à 15 et ramène n à 20 : p = 0,75 n'est plus petit, et la binomiale, de variance np(1 − p) = 3,75, est bien plus étroite que la Poisson, de variance 15.
Exemples simples λ = 1, les néons, les spams, un bootstrap
- λ = 1, l'expérience de pensée de Brunton : P(0) = P(1) = e−1 = 0,368 ; P(2) = 0,184 ; P(3) = 0,061. La Binomiale(1 000 ; 0,001) donne 0,368 ; 0,368 ; 0,184 ; 0,061.
- Les néons, λ = 20 : P(20) = 0,0888 (binomiale 0,0889) ; P(10) = 0,0058 ; P(5) = 5,5 × 10−5. Une journée à exactement cinq néons grillés arrive une fois tous les 18 200 jours en moyenne, soit 50 ans.
- Le fil rouge : des spams à 4 par heure, Poisson(4). P(0) = e−4 = 0,018 ; P(4) = e−4 44/4! = 0,195 ; P(X ≥ 7) = 0,111. La Binomiale(1 000 ; 0,004), mille mails à 0,4 % de spam, donne P(4) = 0,196.
- ML, le bootstrap. On tire n lignes avec remise parmi n. Une ligne donnée est tirée Binomiale(n, 1/n) fois, presque une Poisson(1) : elle est absente avec probabilité (1 − 1/n)n → e−1 = 0,368 (0,3677 pour n = 1 000), tirée deux fois ou plus avec probabilité 0,264. Ce sont les 36,8 % de lignes hors-sac des forêts aléatoires (p07-02).
Preuve la limite au tableau, puis E = Var = λ par la série
La limite. On pose p = λ/n dans la binomiale, k fixé, et on réécrit sans rien approcher, comme Brunton :
Le passage à la limite, n → ∞ avec λ = np fixé, donc p → 0, sert aux trois dernières limites : il fait tendre vers 1 les deux facteurs parasites et fait apparaître e−λ. Le total vaut bien 1 : Σk λk/k! = eλ (série de l'exponentielle), donc Σk λke−λ/k! = 1.
E = Var = λ, par la série :
La même chose se lit sur la binomiale : E = np = λ, et Var = np(1 − p) = λ(1 − λ/n) → λ.
Simuler en Python 100 000 journées de néons
import numpy as np
from scipy import stats
rng = np.random.default_rng(0)
n, p = 10_000, 0.002 # Brunton's factory: 10,000 lights, p = 0.002 per day
lam = n * p # 20 lights per day on average
days = rng.binomial(n, p, size=100_000) # exact model: one binomial per day
print(f"mean {days.mean():.3f} var {days.var():.3f} (Poisson: both = {lam:.0f})")
for k in [10, 15, 20, 25, 30]:
b, q = stats.binom.pmf(k, n, p), stats.poisson.pmf(k, lam)
print(f"P(X={k}) binomial {b:.5f} Poisson {q:.5f} simulated {np.mean(days == k):.5f}")
# what matters is a small p with np fixed: lambda = 4, n grows
k = np.arange(60)
for n in [10, 100, 1_000, 100_000]:
gap = np.abs(stats.binom.pmf(k, n, 4 / n) - stats.poisson.pmf(k, 4)).max()
print(f"n = {n:>7,} p = {4 / n:.5f} max gap to Poisson(4) = {gap:.6f}")
mean 19.993 var 19.937 (Poisson: both = 20) P(X=10) binomial 0.00579 Poisson 0.00582 simulated 0.00576 P(X=15) binomial 0.05162 Poisson 0.05165 simulated 0.05190 P(X=20) binomial 0.08892 Poisson 0.08884 simulated 0.08935 P(X=25) binomial 0.04459 Poisson 0.04459 simulated 0.04399 P(X=30) binomial 0.00831 Poisson 0.00834 simulated 0.00833 n = 10 p = 0.40000 max gap to Poisson(4) = 0.055456 n = 100 p = 0.04000 max gap to Poisson(4) = 0.004022 n = 1,000 p = 0.00400 max gap to Poisson(4) = 0.000392 n = 100,000 p = 0.00004 max gap to Poisson(4) = 0.000004
Où ça casse
- Les occasions ne sont pas indépendantes. Des spams envoyés par rafales : les comptes deviennent surdispersés, Var > E. Une moyenne de 4 et une variance de 9 sur des comptes horaires, rapport 2,25, disent « pas Poisson » avant tout autre calcul. La loi qui absorbe cet excès s'appelle la binomiale négative ; on la nomme seulement.
- p n'est pas petit. Dix mails à 40 % de spam : Binomiale(10 ; 0,4), moyenne 4 mais variance 2,4. La Poisson(4) aurait une variance de 4, et donnerait P(X > 10) = 0,003 à un compte qui ne peut pas dépasser 10.
- La normale échoue à λ petit, pas la Poisson à λ grand. À λ = 20, la normale N(20 ; 19,96) donne en 20 une densité de 0,0893, contre 0,0888 pour la Poisson : les deux marchent.
Occasions nombreuses, indépendantes et rares : Poisson(λ), limite de Binomiale(n, λ/n), P(X = k ; λ) = λke−λ/k!, E = Var = λ. Une variance nettement différente de la moyenne exclut la Poisson ; l'égalité ne la prouve pas.
La géométrique : le rang du premier succès outil
Brunton 18 · The Geometric Distribution: the First Success of a Bernoulli Sequence
On lance un dé jusqu'à obtenir un 5 (« I need 5's »). X est le rang du premier 5. Brunton insiste : premier succès exactement au n-ième lancer, pas « au moins ».
La seule façon d'avoir le premier 5 au lancer n est d'avoir raté les n − 1 premiers, puis réussi. Les lancers sont indépendants, donc la probabilité est un produit : (5/6)n−1 × 1/6. Au dixième lancer exactement : 0,032.
La question utile est plutôt « faut-il au moins 10 lancers ? ». Cela arrive si et seulement si les 9 premiers lancers ratent : (5/6)9 = 0,194. Un joueur sur cinq attend au moins dix lancers, alors qu'il en faut 6 en moyenne.
Une ligne par joueur, une case par lancer : vide pour un raté, pleine pour le premier 5. La bande ocre couvre les 9 premiers lancers : un joueur a besoin d'au moins 10 lancers si et seulement si sa ligne traverse la bande sans case pleine (marque rouge à droite). Clique sur vingt autres joueurs : le cumul de la part « au moins 10 » s'approche de (5/6)9 = 19,4 %, le rang moyen de 6.
- q = 1 − p. Les essais sont des Bernoulli indépendantes : c'est ce qui fait du « k − 1 échecs puis un succès » un produit.
- La même probabilité p à chaque essai : c'est ce qui donne la puissance qk−1.
- X compte les essais, succès compris, donc commence à 1. La variance vaut q/p², donnée pour la culture.
Chaque barre est P(X = k) ; les barres bleues, à partir du seuil k, forment la queue P(X ≥ k). Pour le dé (p = 1/6) et k = 10 : la barre du seuil vaut 0,032, la queue entière 0,194 = (5/6)9. Les barres décroissent d'un facteur q à chaque pas : c'est une suite géométrique, d'où le nom. Passe à la pièce : la queue fond, P(X ≥ 10) = 1/512.
Exemples simples une pièce, le dé de Brunton, pass@k
- Une pièce, p = ½. P(X = 3) = ½ × ½ × ½ = 1/8 (raté, raté, réussi). P(X ≥ 3) = ¼ : les deux premiers lancers ratent.
- Le dé, premier 5, p = 1/6. P(X = 1) = 0,167 ; P(X = 2) = 5/36 = 0,139 ; P(X = 10) = 0,032 ; P(X ≥ 10) = 0,194. Moyenne 1/p = 6 lancers. La médiane est 4 : P(X ≤ 3) = 0,421 et P(X ≤ 4) = 0,518. La moitié des joueurs ont leur 5 en 4 lancers au plus, et la queue tire la moyenne à 6.
- ML, pass@k. Un modèle de code résout un problème avec probabilité p = 0,2 par génération. Avec k générations indépendantes, « au moins un succès » est « le premier succès arrive au rang k au plus » : P(X ≤ k) = 1 − qk. pass@5 = 1 − 0,85 = 0,672 ; pass@10 = 0,893.
Preuve la loi, la queue de deux façons, la moyenne
On note Fi « l'essai i rate » et Sk « l'essai k réussit », comme Brunton.
Deuxième méthode, que Brunton donne aussi. {X ≥ k} est exactement l'événement « les k − 1 premiers essais ratent », donc P(X ≥ k) = qk−1 sans aucune somme. Avec k = 1 on retrouve P(X ≥ 1) = 1 : la loi est complète.
La moyenne, par la somme des queues de l08 : E[X] = Σk≥1 P(X ≥ k) = Σk≥1 qk−1 = 1/(1 − q) = 1/p. Ou, sans elle : on s'arrête au premier essai avec probabilité p, sinon un essai est perdu et tout recommence ; donc E = 1 + qE, et E = 1/p.
Simuler en Python 200 000 joueurs de dé
import numpy as np
rng = np.random.default_rng(0)
p = 1 / 6 # rolling a die until the first 5
x = rng.geometric(p, size=200_000) # numpy counts trials: support 1, 2, 3, ...
print(f"P(X = 10) sim {np.mean(x == 10):.4f} exact {(5/6)**9 * p:.4f}")
print(f"P(X >= 10) sim {np.mean(x >= 10):.4f} exact {(5/6)**9:.4f}")
print(f"mean {x.mean():.3f} (1/p = 6) median {np.median(x):.0f}")
late = x[x > 20] - 20 # players with no 5 in their first 20 rolls
print(f"after 20 misses: P(10+ more rolls) {np.mean(late >= 10):.4f} (no memory: 0.1938)")
for k in [1, 5, 10]: # pass@k with p = 0.2 per sample
print(f"pass@{k:<2d} = 1 - 0.8**{k:<2d} = {1 - 0.8**k:.3f}")
P(X = 10) sim 0.0321 exact 0.0323 P(X >= 10) sim 0.1936 exact 0.1938 mean 5.993 (1/p = 6) median 4 after 20 misses: P(10+ more rolls) 0.1971 (no memory: 0.1938) pass@1 = 1 - 0.8**1 = 0.200 pass@5 = 1 - 0.8**5 = 0.672 pass@10 = 1 - 0.8**10 = 0.893
Où ça casse
- « Exactement » contre « au moins ». P(X = 10) = 0,032 et P(X ≥ 10) = 0,194 : six fois plus. C'est la confusion contre laquelle Brunton met en garde.
- Deux conventions. Certains comptent les échecs avant le premier succès : support 0, 1, 2, …, moyenne q/p = 5 pour le dé. numpy (
rng.geometric) et scipy (stats.geom) comptent les essais, support 1, 2, … - Le 5 n'est pas « dû ». Après 20 lancers sans 5, la probabilité d'attendre encore au moins 10 lancers reste (5/6)9 = 0,194 : la géométrique est sans mémoire, version discrète de la notion 4. Croire le contraire est l'erreur du joueur.
- pass@k quand p varie. Si la moitié des problèmes se résout avec p = 0,4 et l'autre jamais, p vaut 0,2 en moyenne, mais pass@5 = ½(1 − 0,65) = 0,461, et non 0,672. La formule 1 − qk demande le même p pour chaque essai.
Géométrique(p) : le rang du premier succès dans des essais indépendants de même probabilité p. P(X = k) = qk−1 p, P(X ≥ k) = qk−1 (les k − 1 premiers ratent), E[X] = 1/p.
L'exponentielle : attendre un événement rare outil
Brunton 19 · The Exponential Distribution: Time Between Poisson Events
La loi exponentielle modélise l'instant d'un événement rare : la panne d'une ampoule, la désintégration d'un atome, le moment où l'on est enfin reçu au DMV, le guichet américain des permis de conduire. T est un temps, une variable continue. Sa densité λe−λt part de la hauteur λ en t = 0 et décroît.
L'ampoule de Brunton dure 100 heures en moyenne, donc λ = 1/100 par heure. Elle tient au moins 50 heures avec probabilité e−50/100 = e−1/2 = 0,607 : six ampoules sur dix.
Le polonium 210 a une demi-vie de 138 jours : la moitié des atomes a disparu à 138 jours, les trois quarts à 276. La demi-vie est la médiane de T, pas sa moyenne : la vie moyenne d'un atome est de 199 jours.
Le premier panneau montre 400 ampoules ou 400 atomes : un disque plein tant qu'il vit, un cercle vide une fois éteint. Le second donne la courbe de survie e−λt et, en rouge, la part encore en vie. Déplace le temps. Ampoules de 100 h en moyenne : à 50 h, il en reste 60,7 % en théorie. Polonium 210 : 50 % à 138 jours, 16 % à 365 jours, 1 % à 917 jours. Laisse passer le temps : chaque demi-vie emporte la moitié de ce qui reste.
P(a < T < b) = e−λa − e−λb E[T] = 1/λ médiane = demi-vie = ln 2/λ ≈ 0,693/λ
- λ > 0 est un taux, fixe : des événements par unité de temps. Son unité fixe celle de t, et λt n'a pas d'unité.
- T ≥ 0 : l'horloge démarre maintenant, rien n'est arrivé avant. La densité vaut 0 pour t < 0.
- f(t) est une densité, pas une probabilité : une probabilité est une aire sous f (l04).
- L'écart-type vaut aussi 1/λ ; le calcul de E[T] et de Var(T) par intégration est en l08.
La densité de l'attente entre deux spams ; l'aire violette est P(a < T < b). Le trait rouge marque la moyenne 1/λ, le pointillé la médiane, toujours à gauche de la moyenne : c'est la signature d'une queue à droite. À 4 spams par heure, entre a = 15 et b = 30 min : e−1 − e−2 = 0,233. Pousse b au bout : l'aire devient la survie P(T > a). Monte λ : la courbe part plus haut et l'attente raccourcit.
Exemples simples les spams, l'ampoule, le polonium
- Les spams du fil rouge, 4 par heure : attente moyenne 1/4 h = 15 min. P(T > 15 min) = e−1 = 0,368 ; P(T > 30 min) = e−2 = 0,135 ; P(15 < T < 30) = 0,233. Médiane ln 2/4 h = 10,4 min. 63 % des attentes sont plus courtes que la moyenne.
- L'ampoule de 100 h en moyenne : P(T ≥ 50) = e−0,5 = 0,607 ; P(50 < T < 100) = e−0,5 − e−1 = 0,239 ; médiane 100 ln 2 = 69,3 h.
- Le polonium 210, demi-vie 138 jours : λ = ln 2/138 = 0,00502 par jour. Un atome passe l'année avec probabilité e−365λ = 2−365/138 = 0,160. 99 % d'un échantillon a disparu au bout de ln 100/λ = 917 jours, 2,5 ans. Vie moyenne 1/λ = 199 jours.
Preuve répartition, survie, intervalle, médiane, moyenne
La moyenne, par l'intuition. À λ événements par heure, une longue durée H en contient à peu près λH, séparés en moyenne de H/(λH) = 1/λ heure. À 4 spams par heure, un spam toutes les 15 minutes.
La moyenne, en une ligne. Pour une variable positive, E[T] = ∫0∞ P(T > t) dt, la version continue de la somme des queues de l08, admise ici. Donc E[T] = ∫0∞ e−λt dt = 1/λ. Le calcul direct par parties, et la variance 1/λ², sont en l08.
Simuler en Python un million d'atomes de polonium
import numpy as np
rng = np.random.default_rng(0)
half_life = 138 # polonium-210, in days
lam = np.log(2) / half_life # decay rate per day
t = rng.exponential(scale=1 / lam, size=1_000_000) # numpy wants the mean 1/lam
print(f"lam = {lam:.5f} per day mean life {t.mean():.1f} days (1/lam = {1/lam:.1f})")
print(f"median {np.median(t):.1f} days (half-life {half_life})")
for d in [138, 365, 917]:
print(f"P(T > {d} d) sim {np.mean(t > d):.4f} exact {np.exp(-lam * d):.4f}")
bulb = rng.exponential(scale=100, size=1_000_000) # light bulbs, mean 100 h
print(f"bulb P(T >= 50 h) sim {np.mean(bulb >= 50):.4f} exact {np.exp(-0.5):.4f}")
print(f"bulb P(50 < T < 100) sim {np.mean((bulb > 50) & (bulb < 100)):.4f}"
f" exact {np.exp(-0.5) - np.exp(-1):.4f}")
lam = 0.00502 per day mean life 199.0 days (1/lam = 199.1) median 137.8 days (half-life 138) P(T > 138 d) sim 0.4995 exact 0.5000 P(T > 365 d) sim 0.1595 exact 0.1599 P(T > 917 d) sim 0.0101 exact 0.0100 bulb P(T >= 50 h) sim 0.6068 exact 0.6065 bulb P(50 < T < 100) sim 0.2393 exact 0.2387
Où ça casse
- La densité n'est pas une probabilité. Pour des spams à 4 par heure, f(0) = λ = 4 (par heure) : plus que 1. La probabilité d'une attente d'exactement 10 minutes est nulle ; seule une aire, comme P(9 < T < 11 min), est une probabilité.
- La demi-vie n'est pas la vie moyenne. 138 jours contre 199 pour le polonium : le rapport est ln 2 = 0,693, la queue droite tirant la moyenne.
- Les unités. λ en « par heure » et t en minutes faussent l'exposant d'un facteur 60. Et numpy attend la moyenne 1/λ, pas λ :
rng.exponential(scale=1/lam)(l08). - Un taux constant est une hypothèse. Les ampoules de cuisine de Brunton « lâchent le jour où on les pose » : elles ne suivent pas une exponentielle (notion 5).
Exponentielle(λ) : P(T > t) = e−λt, E[T] = 1/λ, médiane = demi-vie = ln 2/λ ≈ 0,69/λ. Une probabilité est une aire sous λe−λt, jamais une hauteur.
L'absence de mémoire outil
Brunton 19, 20 · The Hazard Rate and Memoryless Property of the Exponential Distribution
L'image de Brunton : une ampoule dure 1 000 heures en moyenne, et elle a déjà brillé 1 000 heures. Combien lui reste-t-il ? En moyenne, encore 1 000 heures. Tant que la panne n'est pas arrivée, l'avenir est le même qu'au premier jour : l'horloge se remet à zéro à chaque instant.
L'intuition dit le contraire : après 1 000 heures sur 1 000 prévues, « on compte les secondes ». C'est vrai d'un objet qui s'use, pas d'une durée exponentielle.
Les chiffres du fil rouge : on attend le prochain spam depuis 15 minutes. La probabilité d'attendre encore au moins 30 minutes vaut e−3/e−1 = e−2 = 0,135, exactement P(T > 30 min) pour une attente qui commence. Les 15 minutes déjà passées ne comptent pour rien.
2 000 ampoules de 1 000 h en moyenne. Les barres sont la vie qui reste aux ampoules encore allumées après s heures ; le pointillé est la loi d'une ampoule neuve, la courbe pleine la théorie pour les survivantes. Exponentielle : quel que soit s, les deux courbes coïncident ; à s = 1 000 h, 36,8 % survivent et il leur reste 1 000 h en moyenne. Usure (durée normale, 1 000 ± 200 h) : à s = 1 000 h, la moitié survit et il ne lui reste que 160 h. Fais glisser s.
- La barre est un vrai conditionnement, sur l'événement {T > s} « déjà survécu jusqu'à s » (l03).
- Parmi les lois continues sur [0, ∞[, l'exponentielle est la seule à vérifier cette égalité ; en discret, c'est la géométrique (notion 2).
- Sachant T > s, ce qui reste, T − s, suit la même Exponentielle(λ) : la vie restante moyenne vaut 1/λ à tout âge.
La densité de l'attente du prochain spam ; l'aire violette est P(T > t). Clique sur « déjà attendu 15 min » : la densité sachant T > 15 se superpose, identique, simplement décalée de 15 minutes. L'aire rouge sous cette densité, au-delà de 15 + t, est P(T > 15 + t ∣ T > 15) : elle égale l'aire violette P(T > t) pour tout t, et la valeur affichée le confirme. À t = 30 min : 0,135 des deux côtés.
Exemples simples l'ampoule, les spams, le dé, et une loi qui s'use
- L'ampoule de 1 000 h en moyenne : 36,8 % passent 1 000 h, et leur vie restante moyenne est de 1 000 h. 13,5 % passent 2 000 h : encore 1 000 h devant elles.
- Les spams : P(T > 45 min ∣ T > 15 min) = e−3/e−1 = e−2 = 0,135 = P(T > 30 min).
- Le dé : après 20 lancers sans 5, attendre encore au moins 10 lancers a la probabilité (5/6)9 = 0,194, comme au départ.
- Le contre-exemple, l'usure. Une durée normale de moyenne 1 000 h et d'écart-type 200 h. À 500 h, presque toutes vivent encore et il leur reste 504 h ; à 1 000 h, la moitié vit et il lui reste 160 h ; à 1 500 h, 0,6 % vit et il lui reste 65 h. La vie restante fond : cette loi a de la mémoire.
Preuve trois lignes, puis pourquoi l'exponentielle est la seule
Tout tient dans la dernière ligne : la survie e−λt transforme une somme de durées en produit de probabilités, donc le rapport ne garde que t.
La seule loi continue sans mémoire (culture). L'égalité s'écrit S(s + t) = S(s) S(t) pour la survie S. Alors S(2) = S(1)², S(n) = S(1)n, S(1/m)m = S(1), donc S(r) = S(1)r pour tout rationnel r ; avec 0 < S(1) < 1 (sinon T = 0 ou T = ∞), et S étant décroissante, S(t) = S(1)t = e−λt pour tout t, avec λ = −ln S(1). C'est l'exponentielle.
Simuler en Python ampoules sans mémoire contre ampoules qui s'usent
import numpy as np
rng = np.random.default_rng(1)
expo = rng.exponential(scale=1000, size=400_000) # memoryless bulbs, mean 1000 h
wear = rng.normal(1000, 200, size=400_000) # bulbs that wear out, mean 1000 h
print("already on exponential: alive, h left | wear: alive, h left")
for s in [0, 500, 1000, 1500]:
e = expo[expo > s] - s # remaining life of the survivors
w = wear[wear > s] - s
print(f" {s:5d} h {np.mean(expo > s):.3f} {e.mean():5.0f}"
f" | {np.mean(wear > s):.3f} {w.mean():5.0f}")
already on exponential: alive, h left | wear: alive, h left
0 h 1.000 997 | 1.000 1000
500 h 0.606 996 | 0.994 504
1000 h 0.367 994 | 0.501 159
1500 h 0.222 991 | 0.006 62
Où ça casse
- Ce n'est pas vrai de toute durée. Seule une durée exponentielle, à taux de risque constant, est sans mémoire. Une ampoule qui s'use a de la mémoire (exemple 4) ; une pièce fragile au début aussi (notion 5).
- La condition compte. P(T > s + t ∣ T > s) n'est pas P(T > s + t). Pour les spams, attendre plus de 45 minutes depuis le début vaut e−3 = 0,050 ; sachant les 15 premières déjà passées, 0,135.
- Le paradoxe de l'arrêt de bus. Des bus passent selon un processus de Poisson, un toutes les 10 minutes en moyenne. Un passager qui arrive au hasard attend en moyenne 10 minutes, pas 5 : l'absence de mémoire remet son attente à zéro. L'intervalle entre deux bus dans lequel il tombe dure, lui, 20 minutes en moyenne : un long intervalle a plus de chances d'attraper un passager.
- σ = moyenne n'explique pas l'absence de mémoire : c'en est une conséquence, et une log-normale peut avoir σ = moyenne avec de la mémoire (l08).
Une durée exponentielle est sans mémoire : P(T > s + t ∣ T > s) = P(T > t), donc après s sans événement il reste encore 1/λ en moyenne. C'est la seule loi continue qui le fait.
Le taux de risque : jeunesse, hasard, usure culture
Brunton 20
Brunton propose une lecture plus intuitive de l'absence de mémoire. Une ampoule a tenu jusqu'à l'instant t. Quelle est la probabilité qu'elle lâche dans le petit instant dt qui suit ? Pour l'exponentielle, c'est λ dt, quel que soit t. λ est le taux de risque (hazard rate) : un risque par unité de temps, constant.
Avec λ = 1/1 000 par heure, une ampoule allumée a une chance sur mille de griller dans l'heure qui vient, qu'elle soit neuve ou qu'elle ait 3 000 heures.
Les vraies durées de vie ont rarement un taux constant. Les ampoules de la cuisine de Brunton « lâchent le jour où on les pose » : un taux élevé au début, ce sont les pannes de jeunesse. Une machine qui vieillit a un taux qui monte, c'est l'usure. Additionnés (l'ampoule meurt de la première cause qui frappe), un risque de jeunesse, un risque constant (le hasard) et un risque d'usure dessinent la courbe en baignoire.
Le taux de risque h(t), en pannes pour 1 000 heures, selon l'âge t de l'ampoule. Taux constant : un trait plat à 1, et une ampoule vivante a 9,5 % de chances de griller dans les 100 h qui suivent, à tout âge. Baignoire : la somme de trois risques en pointillé, jeunesse, hasard et usure. Une ampoule neuve a 31 % de chances de griller dans ses 100 premières heures ; vers 1 200 h, au fond de la baignoire, 9,5 % comme le taux constant ; à 3 000 h, 23 %. Fais glisser l'âge.
exponentielle : h(t) = λ en général : S(t) = exp(−∫0t h(u) du)
- dt est petit : l'approximation est au premier ordre en dt.
- h est un taux, en « par heure » ; h dt est une probabilité, sans unité. h peut dépasser 1, h dt non, tant que dt est petit.
- La formule générale et la baignoire vont au-delà de Brunton, qui ne traite que le cas constant.
Exemples simples l'ampoule à taux constant, la Weibull, l'usure
- Taux constant, λ = 1/1 000 par heure. Dans l'heure qui suit : 1 − e−0,001 = 0,0009995 ≈ λ × 1 h = 0,001, à tout âge. Dans la minute qui suit : λ dt = 0,001/60 = 1,7 × 10−5. La probabilité dépend de dt ; le taux, lui, reste 0,001 par heure.
- La loi de Weibull, la loi standard des durées de vie : h(t) = (k/η)(t/η)k−1. Pour k < 1 le taux décroît (jeunesse), pour k = 1 il est constant et l'on retrouve l'exponentielle, pour k > 1 il croît (usure). La baignoire de la vignette additionne une Weibull de forme 0,5, un taux constant et une Weibull de forme 5.
- L'usure de la notion 4, durée normale 1 000 ± 200 h : à 1 000 h, h = f/S = 0,0040 par heure, quatre fois le taux d'une ampoule exponentielle de même moyenne, et il continue de monter.
Preuve le taux, la route de Brunton, et son devoir
La route de Brunton passe par l'absence de mémoire : P(T ≤ t + dt ∣ T > t) = 1 − P(T > dt) = 1 − e−λdt = λ dt − (λ dt)²/2 + ⋯ ≈ λ dt, par le développement de Taylor de l'exponentielle.
Son devoir, la réciproque. Si h(t) = λ pour tout t, alors f = λS ; or f = −S′, donc S′ = −λS, une équation différentielle dont la solution avec S(0) = 1 est S(t) = e−λt. Un taux constant force l'exponentielle. En général, h = −S′/S = −(ln S)′, d'où S(t) = exp(−∫0t h).
Pourquoi la baignoire est une somme. Si l'ampoule meurt de la première de trois causes indépendantes, T = min(T1, T2, T3) et S = S1S2S3 (indépendance) ; donc −ln S = Σ −ln Si et, en dérivant, h = h1 + h2 + h3.
Où ça casse
- h n'est pas une probabilité. C'est un taux : il dépasse 1 sans problème, et pour la jeunesse (Weibull de forme < 1) il est infini en t = 0. La probabilité de panne dans [t, t + dt] est h dt, et seulement pour dt petit.
- « Taux constant » se vérifie. On découpe les âges en tranches et on calcule, parmi les objets encore vivants au début de chaque tranche, la part qui meurt dans la tranche. Si cette part bouge avec l'âge, l'exponentielle est fausse, et avec elle l'absence de mémoire.
Le taux de risque h(t) = f(t)/S(t) est un risque par unité de temps sachant la survie ; h dt est une probabilité. Taux constant ⇔ exponentielle ⇔ sans mémoire ; les vraies durées suivent plutôt une baignoire : jeunesse, hasard, usure.
Le processus de Poisson : compter et attendre outil
Brunton 21 · The Connection Between the Exponential Distribution and the Poisson Process
Brunton relie les deux lois par une frise. Des mails arrivent au hasard, 5 par minute en moyenne. On marque chaque arrivée d'une croix sur l'axe du temps ; les écarts W1, W2, W3… entre deux croix sont les attentes.
Deux questions sur la même frise. Combien de temps jusqu'au prochain mail ? Une attente exponentielle de taux λ = 5 par minute, 12 secondes en moyenne. Combien de mails dans une fenêtre de t minutes ? Un compte de Poisson de paramètre λt : en une minute, 5 en moyenne. Poisson compte, l'exponentielle chronomètre.
Le lien tient en une phrase : « aucun mail pendant t » et « la première attente dépasse t » sont le même événement. D'où P(N(t) = 0) = e−5t = P(T > t). Un mail n'a rien de rare, mais dans chaque tranche infime de temps il l'est : c'est la binomiale à n grand de la notion 1.
En haut, les 4 premières minutes d'une heure de mails à 5 par minute : une croix par mail, les attentes W1, W2, W3, et des fenêtres de durée t avec leur compte. En bas, toute l'heure : le premier panneau donne les attentes, contre la densité exponentielle (12 s en moyenne) ; le second, les comptes par fenêtre, contre les probabilités de Poisson(5t) en points rouges. Change la fenêtre : la moyenne et la variance des comptes suivent ensemble 5t, les attentes ne bougent pas.
P(N(t) = k) = (λt)k e−λt / k!
P(T1 > t) = P(N(t) = 0) = e−λt E[N(t)] = Var(N(t)) = λt
- N(t) compte les arrivées dans une fenêtre de durée t ; T1 = W1 est l'instant de la première arrivée.
- Indépendantes : les attentes ne se parlent pas, et les comptes de fenêtres disjointes sont indépendants.
- De même loi : un seul taux λ, constant dans le temps. Brunton le dit faux pour ses mails (beaucoup le lundi à 9 h, peu le dimanche soir) et vrai à peu près pendant la journée de travail.
- λ a une unité (mails par minute), λt n'en a pas. Le λ de la notion 1 était un nombre moyen ; ici c'est un taux, et le paramètre de Poisson est λt.
À 5 mails par minute, la probabilité d'avoir 0, 1 ou 2 mails dans une fenêtre de t minutes. La courbe de « 0 mail » est aussi la survie de l'attente, e−5t. Le pointillé ocre est la formule de Brunton pour « 1 mail », 5e−5t : elle part de 5 et dépasse 1 tant que t < 0,32 min, ce qu'aucune probabilité ne fait. Déplace t : le rapport P(1)/P(0) vaut 5t, 0,5 à t = 0,1 min et 5 seulement à t = 1 min.
Exemples simples les mails, les spams, une API de LLM, la table du processus
- Les mails de Brunton, 5 par minute. En une minute : P(0) = e−5 = 0,0067 ; P(1) = 5e−5 = 0,034, cinq fois plus. En six secondes (t = 0,1 min) : P(0) = e−0,5 = 0,607 ; P(1) = 0,5 e−0,5 = 0,303, deux fois moins. Vingt minutes sans mail : e−100 = 3,7 × 10−44.
- Les spams du fil rouge, 4 par heure : en une heure, Poisson(4) (notion 1) ; entre deux spams, une exponentielle de moyenne 15 min (notion 3). En 30 min, Poisson(2) : P(0) = e−2 = 0,135 = P(T > 30 min).
- ML, une API de LLM qui reçoit λ = 20 requêtes par seconde. L'écart entre deux requêtes est exponentiel, 50 ms en moyenne, et 18 % des écarts font moins de 10 ms. Dans une fenêtre de 100 ms, le compte suit Poisson(2) : vide 13,5 % du temps, 5 requêtes ou plus 5,3 % du temps. Par seconde, Poisson(20) : un service qui traite 31 requêtes par seconde suffit 99,2 % des secondes ; dimensionné sur la moyenne, 20 par seconde, il serait débordé 44 % des secondes.
- Une frise, quatre questions.
question loi moyenne combien d'événements pendant t ? Poisson(λt) λt combien de temps jusqu'au prochain ? Exponentielle(λ) 1/λ combien de temps jusqu'au r-ième ? Gamma(r, λ) (notion 7) r/λ en temps discret, à quel essai le premier succès ? Géométrique(p) (notion 2) 1/p
Preuve l'attente à partir du compte, le compte à partir de la notion 1
Pourquoi le compte est Poisson(λt). On découpe [0, t] en n tranches de durée t/n. Dans chacune, un mail arrive avec probabilité ≈ λt/n, deux mails avec une probabilité d'ordre (λt/n)², négligeable, et les tranches sont indépendantes. Le compte est donc une Binomiale(n, λt/n), dont la limite quand n → ∞ est Poisson(λt) par la notion 1. C'est le « rare dans une tranche infime » de Brunton.
Pourquoi toutes les attentes ont la même loi, en esquisse. Après la première arrivée, ce qui suit ne dépend pas de ce qui précède (comptes indépendants sur des fenêtres disjointes) : le processus repart à zéro, W2 a la loi de W1 et en est indépendante ; de même pour W3, W4, …
Simuler en Python des attentes exponentielles fabriquent des comptes de Poisson
import numpy as np
rng = np.random.default_rng(0)
lam = 5.0 # emails per minute
gaps = rng.exponential(scale=1 / lam, size=500_000) # waiting times W1, W2, ...
arrivals = np.cumsum(gaps) # arrival times T1, T2, ...
H = np.floor(arrivals[-1]) # whole minutes covered
print(f"mean gap {60 * gaps.mean():.2f} s (1/lam = 12 s)")
for t in [0.1, 1.0]:
edges = np.arange(0, H + 1e-9, t) # windows of t minutes
counts = np.histogram(arrivals, bins=edges)[0] # N(t) in each window
p0, p1 = np.exp(-lam * t), lam * t * np.exp(-lam * t)
print(f"t = {t} min: mean {counts.mean():.3f} var {counts.var():.3f} (lam t = {lam * t})")
print(f" P(N = 0) {np.mean(counts == 0):.4f} vs {p0:.4f}"
f" P(N = 1) {np.mean(counts == 1):.4f} vs {p1:.4f} ratio 5t = {lam * t}")
mean gap 11.99 s (1/lam = 12 s) t = 0.1 min: mean 0.500 var 0.500 (lam t = 0.5) P(N = 0) 0.6065 vs 0.6065 P(N = 1) 0.3030 vs 0.3033 ratio 5t = 0.5 t = 1.0 min: mean 5.003 var 5.030 (lam t = 5.0) P(N = 0) 0.0068 vs 0.0067 P(N = 1) 0.0343 vs 0.0337 ratio 5t = 5.0
Où ça casse
- Le taux varie. Lundi 9 h contre dimanche soir, heures de pointe d'une API. Même si chaque heure est Poisson, le mélange d'heures calmes et chargées donne des comptes surdispersés, Var > E. Le test : comparer la variance et la moyenne des comptes par fenêtre.
- Les arrivées se suivent. Des clients qui relancent leurs requêtes en rafale après une erreur, un cron qui envoie tout à l'heure pile : les attentes ne sont plus indépendantes, et dimensionner sur Poisson sous-estime les pics.
- λ ou λt. P(N(t) = k) a (λt)k au numérateur, pas λk. Écrire λke−λt/k! mélange un taux et un nombre moyen.
- Compter n'est pas faire la queue. L'exemple de l'API compte des arrivées par seconde ; si chaque requête prend du temps, la latence relève de la théorie des files d'attente, hors de cette leçon.
Processus de Poisson de taux λ : attentes i.i.d. Exponentielle(λ), compte Poisson(λt) dans une fenêtre de durée t, car « aucun événement pendant t » = « attente > t », de probabilité e−λt.
La loi Gamma : attendre le r-ième ; série contre parallèle culture
Brunton 22 · The Gamma Distribution
Combien de temps faut-il attendre le 10e mail ? Brunton prévient : « ce n'est pas juste 10 fois l'exponentielle ». C'est la somme de 10 attentes indépendantes, T10 = W1 + ⋯ + W10. La loi de la somme de r attentes exponentielles de taux λ s'appelle la loi Gamma(r, λ), de moyenne r/λ.
À 5 mails par minute, le 10e arrive en 2 minutes en moyenne. Dix fois une seule attente a la même moyenne, mais un écart-type de 2 minutes, contre 0,63 pour la somme : dans une somme, les attentes longues et courtes se compensent.
Au DMV, chaque guichet prend 15 minutes en moyenne. S'il faut passer par trois guichets l'un après l'autre, A puis B puis C, on attend une Gamma(3, 1/15) : 45 minutes en moyenne. Si trois guichets sont ouverts en parallèle et qu'on prend le premier libre, on attend le minimum des trois : 5 minutes en moyenne.
En haut, un client : chaque barre est un guichet, d'une durée exponentielle de moyenne 15 min. En série, les barres s'enchaînent en escalier et l'attente est leur somme. En parallèle, les trois guichets sont occupés au même moment et l'attente s'arrête à la première barre qui finit (en rouge). En bas, l'histogramme des clients servis, contre la densité théorique : Gamma(3, 1/15), 45 min en moyenne, ou Exponentielle(3/15), 5 min. Fais passer 200 clients.
survie : P(Tr > t) = Σk=0r−1 e−λt (λt)k / k! parallèle : min(W1, …, Wr) ~ Exponentielle(rλ)
- Les Wi sont i.i.d. Exponentielle(λ). L'indépendance fait additionner les variances et multiplier les survies du minimum ; la même loi fait que chaque terme apporte 1/λ à la moyenne et 1/λ² à la variance.
- r est un entier : on parle aussi de loi d'Erlang. Pour r réel positif, (r − 1)! est remplacé par la fonction Γ(r), d'où le nom. r = 1 redonne l'exponentielle.
- scipy écrit
stats.gamma(a=r, scale=1/λ): encore la moyenne, pas le taux.
À 5 mails par minute, la densité de Tr, l'attente du r-ième mail (bleu), contre celle de r × W, r fois une seule attente (rouge, pointillé). Même moyenne r/5 (trait vertical), mais la somme se resserre : écart-type √r/5 contre r/5. À r = 10, attendre plus de 3 minutes a la probabilité 0,070 pour la somme et 0,223 pour 10 × W. À r = 1, les deux courbes sont la même exponentielle.
Exemples simples r = 1, le 10e mail, le DMV, un batch d'inférence, une guirlande
- r = 1 : Gamma(1, λ) a la densité λe−λt, c'est l'exponentielle.
- Le 10e mail à 5 par minute : moyenne 2 min, écart-type √10/5 = 0,63 min. P(T10 > 3 min) = 0,070, contre 0,223 si l'on prenait 10 × W.
- Le DMV en série : moyenne 3 × 15 = 45 min, variance 3 × 15² = 675, écart-type 26 min. Plus de 45 minutes ? C'est avoir au plus 2 passages en 45 minutes, N(45) ~ Poisson(3) : e−3(1 + 3 + 4,5) = 0,423. En parallèle : 5 min en moyenne, et P(min > 15) = e−3 = 0,050.
- ML, un batch d'inférence. Un serveur attend r = 8 requêtes avant de lancer un batch, à 20 requêtes par seconde : le remplissage suit Gamma(8, 20), 0,4 s en moyenne. Le batch est plein en moins de 0,5 s si au moins 8 requêtes arrivent en 0,5 s : P(Poisson(10) ≥ 8) = 0,780.
- La guirlande de Brunton, trois ampoules de 1 000 h en moyenne : la première panne est un minimum, Exponentielle de moyenne 1 000/3 = 333 h.
Preuve la survie par Poisson, la densité par une somme qui télescope, le minimum
Moyenne et variance. E[Tr] = r/λ par linéarité (l08), sans hypothèse. Var(Tr) = r/λ², parce que les variances de termes indépendants s'additionnent (l09). Pour 10 × W, Var = 10² Var(W) = 100/λ² (l08).
Le minimum. P(min > t) = P(W1 > t, …, Wr > t) = (e−λt)r = e−rλt, par indépendance : c'est la survie d'une Exponentielle(rλ). Trois guichets de taux 1/15 font un guichet de taux 3/15.
Simuler en Python 400 000 clients du DMV
import numpy as np
from scipy import stats
rng = np.random.default_rng(0)
w = rng.exponential(scale=15, size=(400_000, 3)) # three desks, 15 min each on average
series = w.sum(axis=1) # desk A, then B, then C
parallel = w.min(axis=1) # three open lanes: wait for the first one to free up
print(f"series mean {series.mean():5.2f} sd {series.std():5.2f} Gamma(3, 1/15): 45, {np.sqrt(3) * 15:.2f}")
print(f"parallel mean {parallel.mean():5.2f} sd {parallel.std():5.2f} Exp(3/15): 5, 5")
print(f"P(series > 45) sim {np.mean(series > 45):.4f} Poisson(3) <= 2: {stats.poisson.cdf(2, 3):.4f}"
f" gamma.sf: {stats.gamma.sf(45, a=3, scale=15):.4f}")
gaps = rng.exponential(scale=1 / 5, size=(400_000, 10)) # 10 email gaps, 5 per minute
t10, ten_w = gaps.sum(axis=1), 10 * gaps[:, 0]
print(f"10th email: mean {t10.mean():.3f} sd {t10.std():.3f} 10 x one gap: mean {ten_w.mean():.3f} sd {ten_w.std():.3f}")
print(f"P(> 3 min): sum {np.mean(t10 > 3):.3f} 10 x one gap {np.mean(ten_w > 3):.3f}")
series mean 45.01 sd 26.02 Gamma(3, 1/15): 45, 25.98 parallel mean 5.00 sd 5.00 Exp(3/15): 5, 5 P(series > 45) sim 0.4236 Poisson(3) <= 2: 0.4232 gamma.sf: 0.4232 10th email: mean 1.998 sd 0.632 10 x one gap: mean 1.999 sd 2.001 P(> 3 min): sum 0.070 10 x one gap 0.222
Où ça casse
- « Série » change de sens. Des guichets en série s'additionnent : Gamma. Une guirlande en série s'éteint à la première ampoule grillée : c'est un minimum, Exponentielle(3λ). Une guirlande en parallèle s'éteint à la dernière : un maximum, ni Gamma ni exponentielle, de moyenne 1 000(1 + ½ + ⅓) = 1 833 h. La première panne est un minimum quel que soit le montage ; c'est l'extinction de la guirlande qui en dépend. Avant toute formule : somme, minimum ou maximum ? (La fiabilité de systèmes en série et en parallèle est en l03.)
- r × W n'est pas la somme de r attentes. Même moyenne, mais une variance r fois trop grande (figure 6).
- Le parallèle compte l'attente d'un guichet libre. Une fois au guichet, son propre passage dure encore 15 minutes en moyenne : 5 + 15 = 20 minutes avant de ressortir.
Attendre le r-ième événement d'un flux de taux λ : Gamma(r, λ), somme de r exponentielles indépendantes, moyenne r/λ, variance r/λ². Attendre le premier de r flux en parallèle : le minimum, Exponentielle(rλ).
Résumé
- Poisson(λ) : limite de Binomiale(n, λ/n), beaucoup d'occasions indépendantes et rares ; P(X = k ; λ) = λke−λ/k!, E = Var = λ.
- Ce qui justifie Poisson est p petit à np fixé, pas λ petit.
- Géométrique(p) : le rang du premier succès ; P(X ≥ k) = qk−1, E = 1/p.
- Exponentielle(λ) : P(T > t) = e−λt, E = 1/λ, médiane = demi-vie = ln 2/λ ; une probabilité est une aire.
- Sans mémoire : P(T > s + t ∣ T > s) = P(T > t) ; c'est un taux de risque constant λ, et λ dt est une probabilité.
- Processus de Poisson : attentes i.i.d. Exponentielle(λ), comptes Poisson(λt) ; aucun événement pendant t = attente > t.
- Somme de r attentes : Gamma(r, λ), moyenne r/λ ; premier de r flux en parallèle : Exponentielle(rλ).
Chaîne verbalisée — une prise, à voix haute
- Mille essais à une chance sur mille : pourquoi pas la normale, et quelle loi ?La normale de même moyenne et variance mettrait 16 % de sa masse sous 0. Poisson(1), limite de Binomiale(n, λ/n), avec E = Var = 1.
- 10 000 néons qui grillent chacun avec probabilité 0,002 : λ = 20 est-il petit, et qu'est-ce qui justifie Poisson ?λ = 20 n'est pas petit. Ce qui justifie Poisson est p petit à np fixé.
- Quelle est la probabilité qu'il faille au moins 10 lancers de dé pour obtenir un 5 ?C'est que les 9 premiers ratent : (5/6)9 = 0,194. Exactement 10 : 0,032.
- Une ampoule dure 100 h en moyenne : probabilité de tenir 50 h, et médiane ?e−1/2 = 0,607, pas 70 % ; médiane 100 ln 2 = 69,3 h.
- Une ampoule exponentielle de 1 000 h en moyenne a déjà tenu 1 000 h : combien lui reste-t-il ?1 000 h en moyenne : P(T > s + t ∣ T > s) = e−λt, l'horloge repart de zéro.
- Mails à 5 par minute : probabilité de 0 mail en t minutes, puis de 1 mail ?e−5t, qui est aussi P(attente > t) ; puis 5t e−5t, un rapport de 5t, et non 5.
- Trois guichets de 15 min en moyenne : attente en série, puis en parallèle ?En série, une somme : Gamma(3, 1/15), 45 min. En parallèle, un minimum : Exponentielle(3/15), 5 min.
Où ça sert ensuite
stats::poisson (notions 1, 6) · stats::geometrique (notion 2) · stats::exponentielle (notions 3, 4, 6). Les notions 5 et 7 sont de la culture, sans carte.
Une carte se fait depuis le « ce qu'on garde » d'une notion OUTIL, après ta lecture, dans tes mots.