Aller au contenu

Maîtrisez le théorème central limite

Un logiciel de caisse arrondit chaque montant à l’euro le plus proche. Sur une journée de 300 ventes, l’erreur totale sur le chiffre d’affaires peut-elle dépasser 15 € ? Chaque erreur d’arrondi est comprise entre −0,50 € et +0,50 €, donc l’erreur totale est en théorie comprise entre −150 € et +150 €. Mais en pratique ? La loi des grands nombres du chapitre 7 dit que l’erreur moyenne tend vers 0 ; elle ne dit pas comment l’erreur totale se répartit autour de 0.

C’est le rôle du théorème central limite (TCL) : il donne la loi approximative d’une somme ou d’une moyenne, quelle que soit la loi de départ. C’est sans doute le résultat le plus utilisé de toute la statistique. Le fil rouge sera ce logiciel de caisse, puis un site de vente en ligne.

Reprenons le cadre du chapitre 7 : X1,…,XnX_1, \dots, X_n sont i.i.d., d’espérance μ\mu et de variance σ2\sigma^2 finie. Nous savons que Xˉn\bar{X}_n a pour espérance μ\mu et pour écart-type σ/n\sigma/\sqrt{n}. On la standardise comme au chapitre 5 :

Zn=Xˉn−μσ/n=Sn−nμσn,avec Sn=X1+⋯+XnZ_n = \frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} = \frac{S_n - n\mu}{\sigma \sqrt{n}}, \qquad \text{avec } S_n = X_1 + \dots + X_n

ZnZ_n a pour espérance 0 et pour variance 1, pour tout nn. Le théorème central limite affirme que sa loi se rapproche de la normale centrée réduite :

P(Zn≤z)→n→∞Φ(z)pour tout zP(Z_n \leq z) \xrightarrow[n \to \infty]{} \Phi(z) \quad \text{pour tout } z

On dit que ZnZ_n converge en loi vers N(0,1)\mathcal{N}(0, 1). En pratique, on l’utilise sous la forme d’une approximation, pour nn « assez grand » :

Xˉn≈N(μ,σ2n),Sn≈N(nμ,nσ2)\bar{X}_n \approx \mathcal{N}\left(\mu, \frac{\sigma^2}{n}\right), \qquad S_n \approx \mathcal{N}(n\mu, n\sigma^2)

Le point extraordinaire, c’est que la loi des XiX_i n’intervient que par μ\mu et σ2\sigma^2. Qu’il s’agisse de dés, d’arrondis, de temps d’attente ou de pannes, la somme finit toujours par prendre une forme de cloche. Le schéma montre la loi exacte de la somme de 1, 2 et 4 dés : la loi uniforme d’un dé devient un triangle, puis déjà presque une cloche.

162124241 désomme de 2 déssomme de 4 dés

Chaque erreur d’arrondi XiX_i suit la loi uniforme sur [−0,5 ; 0,5][-0{,}5\,;\,0{,}5] (en euros) : on suppose les centimes « au hasard » et les ventes indépendantes. D’après le chapitre 5, μ=0\mu = 0 et σ2=1/12\sigma^2 = 1/12. L’erreur totale S=X1+⋯+X300S = X_1 + \dots + X_{300} a donc pour espérance 0 et pour variance 300/12=25300/12 = 25, soit un écart-type de 5 €. Par le TCL, S≈N(0,52)S \approx \mathcal{N}(0, 5^2), et :

P(∣S∣>15)=P(∣Z∣>155)=P(∣Z∣>3)≈0,0027P(\lvert S \rvert \gt 15) = P\left(\lvert Z \rvert \gt \frac{15}{5}\right) = P(\lvert Z \rvert \gt 3) \approx 0{,}0027

L’erreur totale dépasse 15 € environ une journée sur 370, alors que la borne théorique est de 150 €. Les erreurs positives et négatives se compensent massivement. On vérifie par simulation :

set.seed(12)
# 100 000 journées de 300 ventes : une ligne par journée
erreurs <- matrix(runif(300 * 100000, -0.5, 0.5), ncol = 300)
S <- rowSums(erreurs)
sd(S) # proche de 5
mean(abs(S) > 15) # 0.0024, proche de 0.0027
hist(S, breaks = 60, freq = FALSE)
curve(dnorm(x, 0, 5), add = TRUE, lwd = 2)
−150−75075150erreur totale S (€)0,000,020,040,060,080,10densitébornes théoriques : ± 150 €Toute l’échelle possible−20−1001020erreur totale S (€)0,000,020,040,060,080,10|S| > 15 € :P ≈ 0,0027σ = 5 €Zoom sur ± 25 €100 000 journées simuléesTCL : N(0, 5²)
L'erreur totale pourrait en théorie atteindre 150 €, mais elle reste presque toujours à quelques euros de 0. L'histogramme des simulations colle à la normale N(0, 5²) prédite par le TCL.

Une variable binomiale X∼B(n,p)X \sim \mathcal{B}(n, p) est une somme de nn variables de Bernoulli indépendantes (chapitre 4). Le TCL s’applique donc directement : pour nn grand,

X≈N(np, np(1−p))X \approx \mathcal{N}\big(np, \, np(1-p)\big)

Une règle d’usage courante demande n≥30n \geq 30, np≥5np \geq 5 et n(1−p)≥5n(1 - p) \geq 5, pour que la cloche ne soit pas « écrasée » contre 0 ou nn. (Quand pp est très petit, on préfère l’approximation de Poisson du chapitre 4.)

3040506070nombre d’achats X sur 1 000 visiteurs0,000,010,020,030,040,050,06P(X = k)coupure à 59,5 :0,084 (correctionde continuité)coupure à 60 :0,073normale N(50 ; 6,89²)P(X ≥ 60) exacte : 0,087
Chaque barre k occupe l'intervalle de k − 0,5 à k + 0,5. Pour compter entièrement la barre 60 sous la courbe, il faut couper à 59,5 : c'est la correction de continuité.

Ce calcul a une conséquence très concrète : si un jour le site observe 60 achats, ce n’est pas forcément le signe d’une amélioration. Un tel écart arrive par hasard environ une fois sur onze. Toute la question des tests statistiques (chapitre 10) est de distinguer un vrai effet d’une fluctuation de ce genre.

Le théorème est asymptotique : il ne dit pas à partir de quel nn l’approximation est bonne. La règle souvent enseignée, « n>30n \gt 30 suffit », est un ordre de grandeur, pas une garantie. Tout dépend de la loi de départ.

  • Pour une loi symétrique et sans valeurs extrêmes (uniforme, dés), la convergence est très rapide : dès n=12n = 12, une somme d’uniformes est presque indiscernable d’une normale.
  • Pour une loi asymétrique (exponentielle, temps de réponse, revenus), elle est plus lente, surtout dans les queues.

Deux conditions ne sont en revanche pas négociables : l’indépendance (ou une dépendance faible) et une variance finie. Pour la loi de Cauchy du chapitre 7, le TCL échoue comme la loi des grands nombres. Le TCL se généralise aussi aux vecteurs : pour des vecteurs aléatoires i.i.d. de moyenne m\mathbf{m} et de matrice de covariance Γ\Gamma, n (Xˉn−m)\sqrt{n}\,(\bar{\mathbf{X}}_n - \mathbf{m}) converge en loi vers le vecteur gaussien N(0,Γ)\mathcal{N}(\mathbf{0}, \Gamma) du chapitre 6.

Pour voir le TCL à l’œuvre sur une loi asymétrique, rien ne vaut une simulation. La fonction replicate répète une expérience et renvoie le vecteur de ses résultats :

set.seed(3)
moyennes <- replicate(10000, mean(rexp(50, rate = 1/200))) # 10 000 moyennes de 50 temps
hist(moyennes, breaks = 60, freq = FALSE, main = "Temps moyen sur 50 requêtes")
curve(dnorm(x, mean = 200, sd = 200 / sqrt(50)), add = TRUE, lwd = 2)
mean(moyennes > 250) # proche de 0.046 (valeur exacte), pas de 0.039

L’histogramme a bien une forme de cloche, mais légèrement penchée à droite par rapport à la courbe normale.

0250500750msdensité1 temps de réponseloi exacteapproximation du TCL0200400600msmoyenne de 5 temps100200300msP(X̄ > 250) :exacte 0,046TCL 0,039moyenne de 50 temps
Une seule exponentielle ne ressemble pas du tout à une cloche. À 5 temps, la loi exacte penche encore à gauche ; à 50, l'accord est bon au centre, mais la queue droite exacte (0,046) reste plus épaisse que celle du TCL (0,039).

Le TCL travaille avec des variables standardisées, (x−μ)/σ(x - \mu)/\sigma, de moyenne 0 et d’écart-type 1. En analyse de données, on rencontre aussi la normalisation min-max, (x−min⁡)/(max⁡−min⁡)(x - \min)/(\max - \min), qui ramène les valeurs dans [0 ; 1][0\,;\,1]. Les deux servent à comparer des grandeurs d’échelles différentes (des âges et des revenus, par exemple), mais seule la standardisation a le sens probabiliste utilisé ici. Et aucune des deux ne rend une variable « normale » au sens de la loi de Gauss : elles changent l’échelle, pas la forme.

  • Pour XiX_i i.i.d. de variance finie, Zn=(Xˉn−μ)/(σ/n)Z_n = (\bar{X}_n - \mu)/(\sigma/\sqrt{n}) converge en loi vers N(0,1)\mathcal{N}(0, 1) : c’est le théorème central limite.
  • En pratique : Xˉn≈N(μ,σ2/n)\bar{X}_n \approx \mathcal{N}(\mu, \sigma^2/n) et Sn≈N(nμ,nσ2)S_n \approx \mathcal{N}(n\mu, n\sigma^2), quelle que soit la loi des XiX_i.
  • La LGN donne la limite de Xˉn\bar{X}_n ; le TCL donne la forme et l’ampleur de ses fluctuations.
  • La binomiale s’approche par N(np,np(1−p))\mathcal{N}(np, np(1-p)) si npnp et n(1−p)n(1-p) sont assez grands, avec la correction de continuité.
  • La règle « n>30n \gt 30 » est indicative : la convergence est rapide pour les lois symétriques, plus lente pour les lois asymétriques, et le TCL échoue sans variance finie.
  • Standardiser ((x−μ)/σ(x-\mu)/\sigma) et normaliser ((x−min⁡)/(max⁡−min⁡)(x - \min)/(\max - \min)) changent l’échelle, pas la forme de la loi.

Exercice · Combien de tirages, cette fois ?

facile

Au chapitre 7, l’inégalité de Tchebychev imposait 50 000 tirages pour estimer une probabilité pp à ±0,01\pm 0{,}01 près avec une probabilité d’erreur d’au plus 5 %. Refaites le calcul avec le TCL, en utilisant p(1−p)≤1/4p(1-p) \leq 1/4.

Voir la solution

La fréquence p^\hat{p} est une moyenne de nn variables de Bernoulli, donc par le TCL p^≈N(p,p(1−p)/n)\hat{p} \approx \mathcal{N}(p, p(1-p)/n). On veut P(∣p^−p∣>0,01)≤0,05P(\lvert \hat{p} - p \rvert \gt 0{,}01) \leq 0{,}05, ce qui revient à :

1,96p(1−p)n≤0,01  ⟺  n≥1,962 p(1−p)0,0121{,}96 \sqrt{\frac{p(1-p)}{n}} \leq 0{,}01 \iff n \geq \frac{1{,}96^2 \, p(1-p)}{0{,}01^2}

Avec p(1−p)≤1/4p(1-p) \leq 1/4 : n≥1,962/(4×0,0001)≈9 604n \geq 1{,}96^2 / (4 \times 0{,}0001) \approx 9\,604. Environ 9 600 tirages suffisent, cinq fois moins qu’avec Tchebychev. Le TCL exploite la forme de la loi, là où Tchebychev se prépare au pire. (C’est aussi la taille classique d’un sondage à ±1\pm 1 point.)

En code

import numpy as np
from scipy import stats
z = stats.norm.ppf(0.975) # 1.96
n_tcl = z**2 * 0.25 / 0.01**2 # p(1 - p) <= 1/4
n_tcheb = round(0.25 / (0.01**2 * 0.05))
print(round(z, 3), np.ceil(n_tcl), n_tcheb) # 1.96 9604.0 50000
# Vérification : avec n = 9604 et p = 0.5, part des estimations à plus de 0.01
rng = np.random.default_rng(0)
p_chapeau = rng.binomial(9604, 0.5, size=100_000) / 9604
print(np.mean(np.abs(p_chapeau - 0.5) > 0.01)) # 0.0494, proche de 5 %

Exercice · La somme de 100 dés

moyen

On lance 100 dés équilibrés. Estimez avec le TCL la probabilité que la somme soit au moins égale à 380. Écrivez une simulation R pour vérifier.

Voir la solution

Pour un dé, μ=3,5\mu = 3{,}5 et σ2=35/12\sigma^2 = 35/12. La somme SS a pour espérance 350350 et pour écart-type 100×35/12≈17,08\sqrt{100 \times 35/12} \approx 17{,}08. Avec la correction de continuité (la somme est entière) :

P(S≥380)≈P(Z≥379,5−35017,08)=P(Z≥1,73)≈0,042P(S \geq 380) \approx P\left(Z \geq \frac{379{,}5 - 350}{17{,}08}\right) = P(Z \geq 1{,}73) \approx 0{,}042

La valeur exacte (obtenue par convolution répétée) vaut aussi 0,042 : pour une loi symétrique comme celle d’un dé, l’approximation est excellente dès n=100n = 100.

En code

import numpy as np
from scipy import stats
# Approximation normale avec correction de continuité
mu, sigma = 100 * 3.5, np.sqrt(100 * 35 / 12)
print(stats.norm.sf(379.5, loc=mu, scale=sigma)) # 0.0421
# Loi exacte de la somme : 99 convolutions de la loi d'un dé
un_de = np.ones(6) / 6 # P(face = 1..6)
loi = un_de
for _ in range(99):
loi = np.convolve(loi, un_de) # loi[k] = P(S = k + 100)
print(loi[380 - 100:].sum()) # 0.0420
# Simulation
rng = np.random.default_rng(0)
S = rng.integers(1, 7, size=(100_000, 100)).sum(axis=1)
print(np.mean(S >= 380)) # 0.0417

Exercice · Remplir un ascenseur

difficile

Un ascenseur supporte au plus 1 000 kg. On suppose que le poids d’un usager a pour moyenne 75 kg et pour écart-type 12 kg, indépendamment des autres.

  1. Avec 12 usagers, quelle est la probabilité (approchée) de dépasser la charge maximale ?
  2. Combien d’usagers au plus peut-on autoriser pour que ce risque reste inférieur à 0,1 % ?
  3. Pourquoi l’hypothèse d’indépendance est-elle discutable ici ?
Voir la solution
  1. La somme SS de 12 poids a pour espérance 12×75=90012 \times 75 = 900 kg et pour écart-type 1212≈41,612\sqrt{12} \approx 41{,}6 kg. Par le TCL, P(S>1 000)≈P(Z>100/41,6)=P(Z>2,40)≈0,008P(S \gt 1\,000) \approx P(Z \gt 100/41{,}6) = P(Z \gt 2{,}40) \approx 0{,}008.
  2. On veut P(Sn>1 000)≤0,001P(S_n \gt 1\,000) \leq 0{,}001, soit 1 000−75n12n≥3,09\frac{1\,000 - 75n}{12\sqrt{n}} \geq 3{,}09 (quantile d’ordre 0,999 de N(0,1)\mathcal{N}(0,1)). Pour n=12n = 12, le rapport vaut 2,402{,}40 : trop faible. Pour n=11n = 11 : 1 000−8251211=17539,8≈4,40≥3,09\frac{1\,000 - 825}{12\sqrt{11}} = \frac{175}{39{,}8} \approx 4{,}40 \geq 3{,}09. On autorise donc 11 usagers au plus.
  3. Les usagers d’un même ascenseur ne sont pas tirés au hasard : une équipe de rugby, un groupe d’enfants ou des déménageurs chargés forment des groupes aux poids corrélés. La variance de la somme inclut alors des covariances positives (chapitre 6) et le risque réel est plus élevé. Avec n=12n = 12 seulement, l’approximation normale des queues est de plus fragile : c’est pourquoi les normes de sécurité prennent des marges bien plus larges.

En code

import numpy as np
from scipy import stats
def risque(n, moyenne=75, ecart_type=12, charge=1000):
"""P(somme des poids > charge) approchée par le TCL."""
return stats.norm.sf(charge, loc=n * moyenne, scale=ecart_type * np.sqrt(n))
print(risque(12)) # 0.0081
for n in (10, 11, 12, 13):
print(n, risque(n)) # 11 -> 5.4e-06, 12 -> 0.0081 : on autorise 11 usagers