Lois continues
La page Fondations a posé les outils pour décrire une v.a. continue, densité, fonction de répartition, espérance et variance, indépendance, et la synthèse qui les chapeaute : une loi est un modèle paramétré
Loi uniforme continue,
La loi uniforme continue modélise une valeur prise « au hasard » dans un intervalle
Modélisation
La loi uniforme continue est paramétrée par
Modèle (Loi uniforme continue)
- PDF :
- CDF :
Illustration
Figure 1.16a, PDF : rectangles de hauteur
Figure 1.16b, CDF : rampe linéaire sur
Propriétés
Moments
Le centre reste le même que pour la version discrète ; la dispersion croît avec la largeur de l'intervalle, au carré.
Exemple
Le code suivant montre comment tirer 100 000 erreurs de quantification au pas
import numpy as np
rng = np.random.default_rng(0)
u = rng.uniform(-0.5, 0.5, size=100_000)
u.mean(), u.var() # >>> (-0.0004, 0.0832) (≈ 0, q²/12 = 0.0833)import scipy.stats as sta
X = sta.uniform(loc=-0.5, scale=1.0) # loc = a, scale = b - a (et non b)
X.var() # >>> 0.0833
X.cdf(0.25) # >>> 0.75Loi exponentielle,
La loi exponentielle modélise la durée d'attente d'un événement sans mémoire : le temps entre deux pannes, entre deux requêtes. C'est la jumelle continue de la Poisson : si les événements se comptent en Poisson de taux
Modélisation
La loi exponentielle est paramétrée par
Modèle (Loi exponentielle)
- PDF :
- CDF :
Illustration
Figure 1.17a, PDF : part de
Figure 1.17b, CDF :
Propriétés
Moments
L'écart-type est égal à la moyenne : la loi est fortement asymétrique, elle servira de loi « pas du tout Gaussienne » pour mettre le TCL à l'épreuve en fin de fiche normale.
Preuve
Par intégration par parties,
L'absence de mémoire
Proposition, Absence de mémoire (exponentielle)
Si
Une machine qui fonctionne depuis
Démonstration
Exemple
Le code suivant montre comment tirer 100 000 durées entre pannes d'un serveur de taux
import numpy as np
rng = np.random.default_rng(0)
t = rng.exponential(scale=2.0, size=100_000) # scale = 1/λ
t.mean(), t.var() # >>> (1.994, 4.016) (≈ 2, 4)
np.mean(t > 3) # >>> 0.2226 (≈ e^{-1.5})import scipy.stats as sta
X = sta.expon(scale=2.0)
X.sf(3) # >>> 0.2231
X.sf(5) / X.sf(2) # >>> 0.2231 (= P(X > 3) : sans mémoire)Loi normale,
La loi normale modélise le bruit de mesure, et plus généralement toute grandeur résultant de l'accumulation de petits effets indépendants. Sa densité est la célèbre courbe en cloche, symétrique.
Modélisation
La loi normale est paramétrée par
Modèle (Loi normale)
- PDF :
- CDF :
où scipy) de
Illustration
Figure 1.18a, PDF :
Figure 1.18b, CDF : une rampe en S, centrée en
Propriétés
Moments
Remarquons que les paramètres de la loi sont exactement ses deux premiers moments.
La standardisation
Toutes les Gaussiennes se déduisent d'une seule,
Proposition, Standardisation (centrage-réduction)
Si
la loi normale centrée réduite, de fonction de répartition notée
La règle 68–95–99,7
La standardisation fige quelques probabilités de référence, valables pour n'importe quelle Gaussienne.
| Écart au centre | Intervalle | |
|---|---|---|
C'est la règle mnémotechnique 68–95–99,7. Le quantile
Figure 1.19, La règle 68–95–99,7 : quelle que soit la Gaussienne, environ 68 % de la probabilité vit à figures/ch1/03-normale-68-95-997.py).
Le théorème central limite
Reste la question soulevée en tête de fiche : pourquoi cette loi serait-elle si répandue, alors que le réel n'est pas toujours en cloche (le marathon) ? La réponse tient dans le théorème le plus célèbre des probabilités. Il porte sur la somme de v.a. i.i.d., abréviation d'indépendantes et identiquement distribuées : les
Deux façons pour une suite de variables aléatoires de « se rapprocher » d'une limite
Une suite de v.a.
Théorème central limite (TCL)
Soient
ce qui s'utilise en pratique sous la forme : pour
L'énoncé est admis. Son point remarquable est l'universalité : quelle que soit la loi de départ, dé, exponentielle, Bernoulli, sommer suffit à faire émerger la Gaussienne. D'où la justification de la phrase d'ouverture de cette fiche : toute grandeur qui accumule un grand nombre de petits effets indépendants (un bruit de capteur, une somme d'erreurs élémentaires) est presque une somme de v.a. i.i.d., donc approximativement Gaussienne par TCL. C'est cet argument qui motive, dans tout le cours, la modélisation Gaussienne des composantes de bruit.
Exemple de convergence : sommer des exponentielles
Le théorème se met à l'épreuve sur la loi la plus asymétrique du catalogue,
Figure 1.20, Gaussianisation de la somme figures/ch1/03-tcl-convergence.py).
Conséquence : la loi de la moyenne
L'analyse de données ne somme pas ses mesures, elle les moyenne. Le théorème s'y transpose sans calcul supplémentaire : la moyenne empirique
Corollaire, loi de la moyenne empirique
Sous les hypothèses du théorème central limite, pour
Les deux paramètres se lisent directement sur ceux de
C'est sous cette forme que le TCL servira dans tout le cours : la Gaussienne est la loi des moyennes. Le chapitre 2 en fait son point de départ, la moyenne empirique y devenant le premier estimateur rencontré.
Loi normale multidimensionnelle,
Une mesure isolée n'est pas toujours la situation la plus riche : deux capteurs relevés ensemble, deux coordonnées d'une position, ou plus généralement un vecteur de
Modélisation
La loi normale multidimensionnelle est paramétrée par
Modèle (Loi normale multidimensionnelle)
- PDF :
Illustration
Pour
Ce que
Figure 1.21a,
Figure 1.21b, figures/ch1/03-normale-2d.py).
Le nuage rond correspond à
Propriétés
Moments
Le cas non corrélé
Si
Pour une Gaussienne, absence de corrélation et indépendance coïncident, un résultat qui ne vaut pas pour une loi quelconque. Un bruit blanc (
Exemple
Le code suivant montre comment évaluer la densité de deux capteurs bruités corrélés à
import numpy as np
def densite_normale_2d(x, mu, C):
"""Densité de N(mu, C) en dimension 2."""
ecart = x - mu
inv_C = np.linalg.inv(C)
det_C = np.linalg.det(C)
exposant = -0.5 * ecart @ inv_C @ ecart
return np.exp(exposant) / (2 * np.pi * np.sqrt(det_C))
mu = np.array([0.0, 0.0])
C = np.array([[1.0, 0.8], [0.8, 1.0]])
densite_normale_2d(np.array([0.0, 0.0]), mu, C) # >>> 0.2653 (le pic)import scipy.stats as sta
X = sta.multivariate_normal(mean=[0.0, 0.0], cov=[[1.0, 0.8], [0.8, 1.0]])
X.pdf([0.0, 0.0]) # >>> 0.2653
ech = X.rvs(size=100_000, random_state=0)
np.cov(ech.T) # >>> [[1.00, 0.80], [0.80, 1.01]] (≈ C)Au chapitre 2 : ce modèle, plusieurs mesures bruitées et corrélées à la fois, sera au cœur de la dérivation des moindres carrés.
Récapitulatif : une loi = un modèle paramétré
Le catalogue est complet. Reprenons la lecture posée en fondations, §5, une loi est un modèle paramétré
| Loi | Situation-type | |||
|---|---|---|---|---|
| Bernoulli | conversion d'un test A/B | |||
| Binomiale | bits erronés sur une trame | |||
| Géométrique | attente du premier succès | |||
| Poisson | requêtes par seconde | |||
| Uniforme discrète | le dé | |||
| Uniforme | erreur de quantification | |||
| Exponentielle | temps entre deux pannes | |||
| Normale | bruit de mesure |
Huit situations, une seule idée : chaque ligne est un modèle scipy.stats (fondations, §5.3) : le même code fonctionne pour les huit lois en changeant la première ligne, sta.bernoulli(p), sta.binom(n,p), sta.geom(p), sta.poisson(lam), sta.randint(a, b+1), sta.uniform(loc=a, scale=b-a), sta.expon(scale=1/lam), sta.norm(loc=mu, scale=sigma).
