Comprenez la loi des grands nombres
Vous avez écrit un programme non déterministe : un algorithme randomisé dont le temps d’exécution change à chaque lancement. Une première exécution prend 2,0 secondes. Que pouvez-vous en conclure sur son temps « typique » ? Pas grand-chose. Vous le relancez trois fois (1,4 s, 1,9 s, 1,7 s) et vous gardez la moyenne des quatre mesures, 1,75 s. Instinctivement, vous faites plus confiance à cette moyenne. Mais pourquoi, exactement ? Et combien d’exécutions faut-il pour une précision donnée ?
La réponse tient en un théorème, la loi des grands nombres, qui justifie à la fois la vision fréquentiste du chapitre 1 et toutes les simulations de ce cours. Le fil rouge sera la méthode de Monte-Carlo, qui estime une probabilité ou une intégrale par simulation.
La moyenne d’un échantillon
Section intitulée « La moyenne d’un échantillon »Répéter une expérience fois dans les mêmes conditions, c’est observer variables indépendantes et identiquement distribuées (on écrit i.i.d.) : même loi que , et aucune influence de l’une sur l’autre. On note et , et l’on forme la moyenne empirique :
est elle-même une variable aléatoire : relancez vos exécutions, vous obtiendrez une autre moyenne. Les chapitres 4 et 6 donnent immédiatement ses deux premiers moments.
- Par linéarité de l’espérance : . En moyenne, la moyenne empirique tombe juste.
- Par indépendance, les variances s’additionnent : .
La seconde formule est la clé de tout ce qui suit : la moyenne varie moins qu’une mesure seule, et sa variance tend vers 0 quand grandit. Son écart-type, , ne décroît cependant qu’en : pour diviser l’incertitude par 10, il faut 100 fois plus de mesures.
Borner les écarts : l’inégalité de Bienaymé-Tchebychev
Section intitulée « Borner les écarts : l’inégalité de Bienaymé-Tchebychev »Une variance faible signifie que la variable s’écarte rarement de son espérance. L’inégalité de Bienaymé-Tchebychev quantifie ce « rarement », pour n’importe quelle loi de variance finie :
- est l’écart (en valeur absolue) entre et son espérance ;
- est le seuil d’écart qui vous inquiète.
En posant , elle devient : la probabilité de s’écarter de plus de écarts-types est au plus . Par exemple, au plus 25 % de chances de s’écarter de plus de , quelle que soit la loi.
L’inégalité se démontre en deux lignes à partir d’une inégalité encore plus simple, celle de Markov : pour et , . (En effet, , dont on prend l’espérance.) On l’applique à et .
La loi des grands nombres
Section intitulée « La loi des grands nombres »Appliquons Tchebychev à la moyenne empirique, de variance :
C’est la loi faible des grands nombres : quel que soit le seuil , la probabilité que la moyenne empirique s’écarte de de plus de tend vers 0. On dit que converge en probabilité vers . (Une version plus forte, la loi forte des grands nombres, affirme même que la suite des moyennes converge vers avec probabilité 1 ; elle ne demande que l’existence de l’espérance.)
La loi des grands nombres justifie enfin la vision fréquentiste du chapitre 1. Pour un événement de probabilité , posons lors de la -ème répétition (l’indicatrice : 1 si se réalise, 0 sinon). Les suivent la loi de Bernoulli de paramètre , et leur moyenne est exactement la fréquence de . Elle converge donc vers . Probabilité et fréquence à long terme coïncident : c’est un théorème, pas une définition.
Quand la loi des grands nombres échoue : la loi de Cauchy
Section intitulée « Quand la loi des grands nombres échoue : la loi de Cauchy »L’hypothèse « espérance finie » n’est pas une formalité. La loi de Cauchy, de densité , a une allure de cloche symétrique autour de 0, un peu comme une normale. Mais ses queues décroissent si lentement que diverge : elle n’a pas d’espérance (ni de variance). Conséquence spectaculaire : la moyenne de variables de Cauchy indépendantes suit encore une loi de Cauchy, exactement aussi dispersée qu’une seule observation. Moyenner ne sert à rien.
set.seed(8)n <- 10000x_exp <- rexp(n, rate = 1) # espérance 1x_cauchy <- rcauchy(n) # pas d'espérance
par(mfrow = c(1, 2))plot(cumsum(x_exp) / (1:n), type = "l", ylab = "moyenne cumulée", main = "Exponentielle")abline(h = 1, lty = 2) # la moyenne se stabilise autour de 1plot(cumsum(x_cauchy) / (1:n), type = "l", ylab = "moyenne cumulée", main = "Cauchy")# la moyenne fait des sauts brutaux à chaque valeur extrême, et ne se stabilise jamaisLa loi de Cauchy n’est pas une curiosité : on l’obtient comme rapport de deux normales centrées indépendantes, ou comme la position où frappe un rayon lumineux émis dans une direction aléatoire. Plus généralement, les données à queues lourdes (revenus, tailles de fichiers, temps de réponse extrêmes) rendent la moyenne très instable : pensez alors à la médiane.
Le fil rouge : la méthode de Monte-Carlo
Section intitulée « Le fil rouge : la méthode de Monte-Carlo »La loi des grands nombres a une application immédiate : pour calculer une espérance (et donc une probabilité, qui est l’espérance d’une indicatrice), il suffit de simuler beaucoup de tirages et d’en faire la moyenne. C’est la méthode de Monte-Carlo, du nom du casino. Elle sert quand le calcul exact est impossible ou pénible : intégrales en grande dimension, systèmes complexes, lois de sommes.
Estimer π avec des fléchettes
Section intitulée « Estimer π avec des fléchettes »Tirez un point uniformément dans le carré . La probabilité qu’il tombe dans le disque unité est le rapport des aires, . Donc , que l’on estime par une fréquence :
set.seed(1)n <- 1e6x <- runif(n, -1, 1); y <- runif(n, -1, 1)dedans <- (x^2 + y^2 <= 1) # indicatrice « dans le disque »4 * mean(dedans) # estimation de pi4 * sd(dedans) / sqrt(n) # ordre de grandeur de l'erreur : environ 0.0016L’erreur typique est l’écart-type de l’estimateur, avec : environ pour tirages, et pour . Cent fois plus de tirages pour un chiffre de plus : c’est la loi en , le prix à payer de Monte-Carlo.
Estimer une probabilité sans la calculer
Section intitulée « Estimer une probabilité sans la calculer »Au chapitre 6, la durée totale pour aller au campus était , avec et indépendantes, et nous avions dû calculer une convolution. Avec Monte-Carlo, deux lignes suffisent :
set.seed(6)n <- 1e6duree <- runif(n, 0, 10) + rnorm(n, 30, 4)mean(duree > 45) # P(être en retard avec 45 min de marge), environ 0.020quantile(duree, 0.95) # environ 43.1 minutesCombien de tirages ?
Section intitulée « Combien de tirages ? »Tchebychev répond à la question « combien de simulations pour une précision donnée ? ». Pour estimer une probabilité à près avec une probabilité d’erreur d’au plus 5 %, on veut . Comme pour tout , il suffit que :
Ce nombre est une garantie, valable pour toute valeur de . Le théorème central limite, au chapitre suivant, montrera qu’environ 10 000 tirages suffisent en réalité : Tchebychev est prudent.
En résumé
Section intitulée « En résumé »- Pour variables i.i.d., la moyenne empirique a pour espérance et pour variance .
- L’inégalité de Bienaymé-Tchebychev vaut pour toute loi de variance finie, au prix d’une borne pessimiste.
- La loi des grands nombres : converge vers ; appliquée aux indicatrices, elle montre que la fréquence converge vers la probabilité.
- Elle exige une espérance finie : la loi de Cauchy en est le contre-exemple, sa moyenne empirique ne se stabilise jamais.
- La méthode de Monte-Carlo estime une espérance, une probabilité ou une intégrale par une moyenne de simulations, avec une erreur en .
Exercices
Section intitulée « Exercices »Exercice · Borner la moyenne de 100 dés
facileOn lance 100 dés équilibrés et on calcule la moyenne des faces. Majorez la probabilité que cette moyenne s’écarte de 3,5 d’au moins 0,5 avec l’inégalité de Bienaymé-Tchebychev.
Voir la solution
Pour un dé, (chapitre 4). Donc , et :
Au plus 12 % environ. La vraie probabilité est bien plus faible (de l’ordre de , comme le montrera le théorème central limite), ce qui illustre le caractère prudent de la borne.
En code
import numpy as np
var_de = 35 / 12var_moyenne = var_de / 100print(var_moyenne / 0.5**2) # 0.1167 borne de Tchebychev
# Vraie probabilité, estimée sur 200 000 séries de 100 désrng = np.random.default_rng(0)moyennes = rng.integers(1, 7, size=(200_000, 100)).mean(axis=1)print(np.mean(np.abs(moyennes - 3.5) >= 0.5)) # 0.0036, bien sous la bornevar_de <- 35 / 12var_moyenne <- var_de / 100var_moyenne / 0.5^2 # 0.1167 borne de Tchebychev
# Vraie probabilité, estimée sur 200 000 séries de 100 désset.seed(0)des <- matrix(sample(1:6, 100 * 2e5, replace = TRUE), ncol = 100)moyennes <- rowMeans(des)mean(abs(moyennes - 3.5) >= 0.5) # 0.0037, bien sous la borneExercice · Une intégrale par Monte-Carlo
moyenOn veut calculer , qui n’a pas de primitive simple.
- Montrez que pour une fonction et une variable que vous préciserez.
- Écrivez le code R qui estime avec tirages.
- On admet que . Combien de tirages garantissent, par Tchebychev, une erreur inférieure à avec probabilité au moins 95 % ?
Voir la solution
- Si , sa densité vaut 1 sur , donc par le théorème de transfert . On prend .
- Le code est donné plus bas, dans « En code » : avec tirages, on obtient environ , pour une valeur exacte de .
- On veut , soit tirages. C’est beaucoup pour une intégrale en dimension 1 (une méthode des trapèzes ferait mieux), mais le nombre de tirages de Monte-Carlo ne dépend pas de la dimension, ce qui la rend imbattable pour les intégrales en dimension 10 ou 100.
En code
import numpy as npfrom scipy.integrate import quad
rng = np.random.default_rng(9)u = rng.random(100_000) # U uniforme sur [0, 1]g_u = np.exp(-u**2)print(g_u.mean()) # 0.7478print(quad(lambda x: np.exp(-x**2), 0, 1)[0]) # 0.7468 (valeur de référence)
# 3. Tirages garantis par Tchebychev : Var / (n eps^2) <= 0.05print(g_u.var()) # 0.0404print(0.040 / (0.05 * 0.001**2)) # 800000set.seed(9)u <- runif(1e5) # U uniforme sur [0, 1]mean(exp(-u^2)) # 0.7471integrate(function(x) exp(-x^2), 0, 1) # 0.7468 (valeur de référence)
# 3. Tirages garantis par Tchebychev : Var / (n eps^2) <= 0.05var(exp(-u^2)) # 0.04030.040 / (0.05 * 0.001^2) # 8e+05Exercice · Démontrer Markov et Tchebychev
difficileSoit une variable aléatoire positive, d’espérance finie, et .
- Montrez que , puis que (inégalité de Markov).
- Déduisez-en l’inégalité de Bienaymé-Tchebychev.
- Un serveur a un temps de réponse moyen de 200 ms. Que peut-on dire, sans autre information, de la proportion de requêtes qui prennent plus d’une seconde ? Et si l’on sait en plus que l’écart-type vaut 100 ms ?
Voir la solution
- Si , l’indicatrice vaut 1 et l’inégalité devient , vraie. Sinon, elle vaut 0 et l’inégalité devient , vraie car est positive. En prenant l’espérance (qui préserve les inégalités) : , d’où le résultat.
- On applique Markov à et : . Or équivaut à .
- Par Markov (le temps est positif) : . Au plus 20 % des requêtes. Avec l’écart-type, Tchebychev donne mieux : implique , donc , soit au plus 1,6 %. Plus on connaît d’information sur la loi, plus la borne est fine.
En code
from scipy import stats
# Bornes sans connaître la loiprint(200 / 1000) # 0.2 Markov : P(T >= 1000) <= E[T] / 1000print(100**2 / 800**2) # 0.015625 Tchebychev : écart d'au moins 800 ms
# Exemple de loi compatible : gamma de moyenne 200 et d'écart-type 100t = stats.gamma(a=4, scale=50)print(t.mean(), t.std()) # 200.0 100.0print(t.sf(1000)) # 3.2e-06 : les bornes sont très larges# Bornes sans connaître la loi200 / 1000 # 0.2 Markov : P(T >= 1000) <= E[T] / 1000100^2 / 800^2 # 0.015625 Tchebychev : écart d'au moins 800 ms
# Exemple de loi compatible : gamma de moyenne 200 et d'écart-type 100c(4 * 50, sqrt(4 * 50^2)) # 200 1001 - pgamma(1000, shape = 4, scale = 50) # 3.2e-06 : les bornes sont très larges