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

Lois jointes, marginales, conditionnelles

Deux variables observées ensemble ont une loi sur le plan, la loi jointe. On en tire trois gestes : intégrer l'autre variable pour la marginale, couper une tranche et la renormaliser pour la conditionnelle, factoriser pour reconnaître l'indépendance. La leçon suit Brunton 26 et 27, avec ses exemples : un joueur de basket filmé une saison, une gaussienne ronde, des fléchettes. Deux dés servent aux calculs à la main.

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
  • Conditionner, c'est zoomer. P(A ∣ B) = P(A ∩ B)/P(B) : on ne garde que B et on renormalise par sa probabilité (l03, notion 1). Les probabilités totales, P(A) = Σ P(A ∩ Bk) pour une partition (notion 3), et Bayes (notion 4).
  • Indépendance d'événements. P(A ∩ B) = P(A) P(B), autrement dit P(A ∣ B) = P(A) (l03, notion 7).
  • Densité. f ≥ 0, ∫ f = 1, P(a ≤ X ≤ b) = ∫ab f ; f(x) dx est la probabilité d'un petit intervalle, et f peut dépasser 1 (l04, notion 2). La normale centrée réduite a la densité φ(x) = (1/√(2π)) e−x²/2 (l04, notion 6).
  • Changer de variable par la CDF. On écrit P(Y ≤ y) en fonction de X, puis on dérive ; la densité se multiplie par |dx/dy| (l06, notion 1). Sert en notion 6.

La leçon

La loi jointe : une loi sur le plan outil

Brunton 26 · Joint Probability Distributions

Deux variables observées ensemble, X et Y, ont une loi sur le plan : la loi jointe P(X = x, Y = y), la probabilité que les deux valeurs sortent à la fois. Brunton pense aux trois composantes de la vitesse dans un fluide turbulent.

Pour deux dés, la loi jointe est un tableau de 36 cases de 1/36. Un événement est une région du tableau, et sa probabilité est la somme de ses cases : « X + Y = 7 » occupe une diagonale de 6 cases, soit 6/36.

Brunton passe au continu avec un joueur de basket filmé toute une saison : une densité jointe f(x, y) de sa position, haute là où il traîne souvent. f(x, y) dx dy est la probabilité de le trouver dans une minuscule case dx × dy ; la probabilité d'une zone, la raquette par exemple, est la somme de ces cases, l'intégrale double de f sur la zone.

Voir l'idée — un événement est une région du tableau

Les 36 cases des deux dés, chacune de probabilité 1/36. Choisis un événement : ses cases se colorent et sa probabilité est leur somme. X + Y = 7 : la diagonale, 6/36. X > Y : les 15 cases sous la diagonale, 15/36 = 0,417. X ≤ 2 et Y ≥ 5 : un rectangle de 4 cases, 4/36. Puis lance 360 paires : chaque paire tombe dans sa case, et la part des paires dans la région approche la somme des cases.

La formule
discret : P((X, Y) ∈ A) = Σ(x, y) ∈ A P(X = x, Y = y)     continu : P((X, Y) ∈ A) = ∬A f(x, y) dx dy
  • Discret : chaque case vaut P(X = x, Y = y) ≥ 0, et toutes les cases somment à 1. Continu : f(x, y) ≥ 0 et ∬ f = 1 sur tout le plan.
  • f(x, y) dx dy ≈ P(X ∈ [x, x + dx], Y ∈ [y, y + dy]). f est une probabilité par unité d'aire, pas une probabilité : elle peut dépasser 1.
  • X et Y n'ont pas à suivre la même loi, ni à être toutes deux discrètes ou toutes deux continues (la notion 5 couple une classe et un score).
Figure 1 — l'intégrale double est une somme de petites cases

Un demi-terrain de 15 m × 14 m, et une densité de présence inventée pour l'exemple : beaucoup près du panier, un peu en haut de la raquette, un peu dans le corner droit. Plus la case est foncée, plus f y est haute. Chaque case pèse f × aire de la case ; celles de la région choisie sont en rouge. Avec des cases de 1 m, le terrain est un tableau de 210 cases, comme celui des dés, et la raquette pèse 0,610. Affine à 0,5 m puis 0,25 m : la somme tend vers l'intégrale, 0,608. Le corner droit pèse 0,143, et tout le terrain 1.

Exemples simples deux pièces, deux dés, le carré, une densité qui vaut 4, le terrain
  1. Deux pièces. Quatre cases, (P, P), (P, F), (F, P), (F, F), de ¼ chacune.
  2. Deux dés. P(X + Y = 7) = 6/36 = 1/6. P(X > Y) = 15/36 = 0,417, les cases sous la diagonale. P(X = Y) = 6/36, la diagonale.
  3. Uniforme sur le carré [0 ; 1]². f = 1 sur le carré : la probabilité d'une région est son aire. P(X + Y ≤ 1) = ½, l'aire du triangle sous la diagonale.
  4. Une densité qui vaut 4. Uniforme sur [0 ; ½]² : l'aire vaut ¼, donc f = 4 pour que la masse fasse 1. La valeur 4 n'est pas une probabilité.
  5. Le terrain (figure 1). Avec la densité de la figure, P(raquette) = 0,608 et P(corner droit) = 0,143. Brunton ne donne pas de chiffres : ces valeurs viennent de la densité inventée.
  6. En ML. Un jeu de données étiqueté (xi, yi) est un échantillon de la loi jointe p(x, y) des variables explicatives (features) et de l'étiquette. Les caméras de Brunton font la même chose : leurs positions approchent la densité du joueur.
Où ça casse
  • f(x, y) n'est pas une probabilité. En continu, P(X = x, Y = y) = 0 pour chaque point ; seule une région d'aire non nulle a une probabilité.
  • La valeur de f dépend de l'unité. La densité du joueur culmine à 0,081 par m² ; par cm², elle vaudrait 10 000 fois moins. La probabilité de la raquette, elle, ne change pas.
  • Les deux lois séparées ne suffisent pas. Deux dés indépendants et « le même dé lu deux fois » (Y = X) donnent chacun six faces de 1/6 en X comme en Y. Leurs jointes diffèrent : 36 cases de 1/36 d'un côté, 6 cases de 1/6 sur la diagonale de l'autre (notions 2 et 4).
Brunton, rectifiéBrunton (26) dit que la PCA suppose une loi jointe gaussienne. La PCA calcule les directions de plus grande variance de n'importe quel nuage, sans hypothèse de loi. La gaussienne ne sert qu'à aller plus loin : pour une gaussienne jointe, des composantes décorrélées sont indépendantes, ce qui est faux en général (l09).

La loi jointe d'un couple (X, Y) donne la probabilité de chaque case, P(X = x, Y = y), ou une densité f(x, y) ; une région A pèse la somme de ses cases, ou ∬A f dx dy.

La marginale : intégrer l'autre variable outil

Brunton 26, et 27 · Marginal and Conditional Densities

La marginale de X est la loi de X seule, quelle que soit Y. Dans le tableau des deux dés, P(X = 3) est la somme de la colonne x = 3 : six cases de 1/36, donc 1/6. On écrivait ces sommes dans la marge, d'où le nom. En continu, on intègre l'autre variable : fX(x) = ∫ f(x, y) dy.

Brunton dit que la gaussienne 2D est « une gaussienne en x et une gaussienne en y ». Le nuage de points paraît pourtant presque uniforme. D'abord, au cœur du nuage la densité baisse lentement : à distance 1 du centre, elle n'a perdu que 39 %, une pente que l'œil ne voit pas. Ensuite, « gaussienne en x » ne décrit pas l'aspect du nuage mais sa marginale, le compte des points de chaque bande verticale. La bande du centre traverse tout le nuage, celle du bord n'en touche qu'un bout clairsemé : ces comptes dessinent une cloche. Sur un carré uniforme, chaque bande compte autant de points : la marginale est plate.

Voir l'idée — la marginale compte les points bande par bande

Chaque point est un couple (x, y). En haut, le nombre de points de chaque bande verticale de largeur 0,5 : c'est la marginale de X. À droite, celui de chaque bande horizontale : la marginale de Y. Les tirets donnent la loi théorique. Déplace la bande : dans le nuage gaussien, la bande [0 ; 0,5] contient 19,1 % des points, la bande [1,5 ; 2] seulement 4,4 %. Uniforme sur un carré : 12,5 % dans chaque bande, la marginale est plate. Uniforme sur un disque : la densité est la même partout, mais les bandes du centre sont plus longues, et la marginale fait un dôme (15,7 % contre 7,2 %). Compare au disque : les deux cœurs paraissent aussi remplis, mais le gaussien s'effiloche au bord, et sa marginale a des queues. Ajoute des points : les histogrammes se remplissent vers les tirets.

La formule
discret : P(X = x) = Σy P(X = x, Y = y)     continu : fX(x) = ∫−∞+∞ f(x, y) dy
  • On somme sur toutes les valeurs de y. Les événements {Y = y} forment une partition : c'est la formule des probabilités totales (l03). « Il faut bien que y prenne une valeur », dit Brunton.
  • C'est une somme, pas une moyenne : on ne divise par rien.
  • Même geste pour Y : fY(y) = ∫ f(x, y) dx.
  • La marginale est une vraie loi : positive, de masse 1 (preuve plus bas).
Figure 2 — les marges du tableau

La loi jointe en trente-sixièmes, x en colonne et l'autre variable en ligne. En haut, la somme de chaque colonne : la loi de X. À droite, la somme de chaque ligne. Deux dés : toutes les marges valent 6/36. Premier dé et maximum : M = max(X, Y) n'est jamais sous X, donc le triangle sous la diagonale est vide. La marge de X reste uniforme ; celle de M monte : P(M = m) = (2m − 1)/36. Les deux tableaux ont la même marge en X, et pourtant ils ne décrivent pas la même chose : la marge seule ne dit pas comment X est liée à l'autre variable.

Exemples simples deux dés, le maximum, la gaussienne, le carré, le disque, un mélange
  1. Deux dés. Chaque colonne somme à 6/36 = 1/6, chaque ligne aussi : les deux marginales sont uniformes.
  2. Le premier dé X et le maximum M. P(M = 1) = 1/36 (les deux dés à 1), P(M = 6) = 11/36 ; en général (2m − 1)/36, soit 1, 3, 5, 7, 9, 11 trente-sixièmes. Le maximum penche vers 6 : E[M] = 161/36 = 4,47 (l08).
  3. La gaussienne 2D standard f(x, y) = (1/(2π)) e−(x² + y²)/2 : sa marginale est la normale centrée réduite φ(x) (preuve).
  4. Uniforme sur le carré [−2 ; 2]². f = 1/16 ; à x fixé, y parcourt un segment de longueur 4 : fX(x) = 4 × 1/16 = 1/4. Plate.
  5. Uniforme sur le disque de rayon 2. f = 1/(4π) ; à x fixé, y parcourt une corde de longueur 2√(4 − x²) : fX(x) = √(4 − x²)/(2π). Un dôme : 1/π = 0,318 en 0, nul en ±2.
  6. En ML, un mélange gaussien. Une variable cachée Z donne le groupe de chaque point. La densité des données est la marginale p(x) = Σk P(Z = k) f(x ∣ Z = k) : on somme sur la variable qu'on ne voit pas. C'est elle, la « vraisemblance marginale », qu'on maximise.
Preuve la marginale est une loi ; la marginale de la gaussienne 2D
∫ fX(x) dx = ∫ ( ∫ f(x, y) dy ) dx
définition de la marginale
= ∬ f(x, y) dx dy = 1
la jointe est une densité ; fX ≥ 0 puisque f ≥ 0

En discret, c'est la formule des probabilités totales : {X = x} est la réunion disjointe des {X = x} ∩ {Y = y}, donc P(X = x) = Σy P(X = x, Y = y).

fX(x) = ∫ (1/(2π)) e−(x² + y²)/2 dy
définition, gaussienne 2D standard
= (1/√(2π)) e−x²/2 · ∫ (1/√(2π)) e−y²/2 dy
ea + b = ea eb, et 1/(2π) = (1/√(2π))² ; le facteur en x sort de l'intégrale en y
= (1/√(2π)) e−x²/2 = φ(x)
la densité normale intègre à 1
Simuler en Python trois nuages, leurs marginales bande par bande
import numpy as np
from math import erf, sqrt

rng = np.random.default_rng(0)
n = 100_000
clouds = {
    "gaussian": rng.standard_normal((n, 2)),
    "uniform square": rng.uniform(-2, 2, (n, 2)),
}
disk = rng.uniform(-2, 2, (2 * n, 2))
clouds["uniform disk"] = disk[(disk ** 2).sum(axis=1) < 4][:n]   # keep points inside radius 2

bands = [(0, 0.5), (0.5, 1), (1, 1.5), (1.5, 2)]
row = lambda shares: "".join(f"{100 * s:9.1f} %" for s in shares)
print(f"{'band of x':15s}" + "".join(f"{str([a, b]):>11s}" for a, b in bands))
for name, pts in clouds.items():
    x = pts[:, 0]                  # marginal of X: forget y, count points band by band
    print(f"{name:15s}" + row([np.mean((x >= a) & (x < b)) for a, b in bands]))

Phi = lambda t: 0.5 * (1 + erf(t / sqrt(2)))
print(f"{'gaussian, exact':15s}" + row([Phi(b) - Phi(a) for a, b in bands]))
band of x         [0, 0.5]   [0.5, 1]   [1, 1.5]   [1.5, 2]
gaussian            19.0 %     15.1 %      9.1 %      4.5 %
uniform square      12.3 %     12.5 %     12.5 %     12.6 %
uniform disk        15.6 %     14.8 %     12.3 %      7.2 %
gaussian, exact     19.1 %     15.0 %      9.2 %      4.4 %
Où ça casse
  • Les marginales ne déterminent pas la jointe. Deux dés indépendants et le même dé lu deux fois (Y = X) ont les mêmes marginales, uniformes sur 1 à 6, et des jointes différentes (notion 1) ; la figure 4 donnera des gaussiennes de marginales N(0, 1) en x et en y, pour n'importe quelle corrélation.
  • « Uniforme » ne veut pas dire « marginale plate ». Le disque uniforme a une marginale en dôme (exemple 5). La marginale mélange deux choses : la densité dans la bande et la longueur de la bande.
  • Même mot, autre chose. Le coût marginal en économie, ou l'effet marginal de la régression logistique, sont des dérivées. La loi marginale vient de la marge du tableau.
Brunton, rectifiéBrunton (27) décrit la marginale comme « la probabilité de x conditionnée sur quelque chose en y ». C'est l'inverse : la marginale est la loi de X quelle que soit Y, sans aucune condition ; conditionner, c'est fixer Y (notion 3). Il dit aussi qu'on « moyenne » y (average out) : on somme ou on intègre, sans diviser. Enfin, sa gaussienne 2D, écrite de mémoire avec la constante 1/√(2π), ne somme pas à 1 : sa masse totale vaut √(2π) ≈ 2,51. La bonne constante est 1/(2π) = (1/√(2π))², un facteur par coordonnée.

fX(x) = ∫ f(x, y) dy, en discret Σy P(X = x, Y = y) : la loi de X quelle que soit Y, obtenue en sommant l'autre variable. Ce n'est pas une loi conditionnelle.

La conditionnelle : la tranche renormalisée outil

Brunton 27

Conditionner sur X = x, c'est ne garder que la tranche de la jointe à cet x, puis la diviser par sa masse : le zoom de l03, P(A ∣ B) = P(A ∩ B)/P(B), case par case. Premier dé X et maximum M, sachant X = 2 : il reste la colonne x = 2, M = 2 avec 2/36, puis 3, 4, 5 ou 6 avec 1/36 chacun. La colonne pèse 6/36, la marginale ; on divise : P(M = 2 ∣ X = 2) = 1/3, et 1/6 pour les autres valeurs.

En continu, on divise la tranche f(x, ·) par fX(x). Brunton (26) cite la probabilité d'une maladie cardiaque sachant qu'on est un homme de 40 ans, d'une taille et d'un poids donnés. Dans un nuage où Y = 0,8 X + 0,6 Z, avec X et Z normales centrées réduites indépendantes, la tranche x = 1,5 est une cloche centrée en 1,2, d'écart-type 0,6 ; la marginale de Y a un écart-type de 1. Savoir x resserre y.

Voir l'idée — une bande du nuage, à x fixé

3 000 points du nuage Y = 0,8 X + 0,6 Z, X et Z normales centrées réduites indépendantes. Les points rouges sont ceux de la bande verticale de largeur 0,3 autour de x fixé ; à droite, l'histogramme de leurs y, mis à l'échelle d'une densité. Les tirets rouges sont la conditionnelle théorique, une normale de centre 0,8 x et d'écart-type 0,6 ; les tirets bleus, la marginale de Y, d'écart-type 1. Déplace x fixé : la bande monte avec x, sa largeur en y ne change pas, et elle reste plus étroite que la marginale. Au bord, la bande contient peu de points : la marginale de X y est faible.

La formule
discret : P(Y = y ∣ X = x) = P(X = x, Y = y) / P(X = x)     continu : f(y ∣ x) = f(x, y) / fX(x)
  • Défini seulement là où fX(x) > 0 : on ne conditionne pas sur une valeur que X ne prend pas.
  • À x fixé, f(y ∣ x) est une densité en y : ∫ f(y ∣ x) dy = fX(x)/fX(x) = 1. Ce n'est pas une densité en x.
  • En continu, P(X = x) = 0 : la formule est la limite du conditionnement sur une bande [x, x + h] quand h tend vers 0. La vignette le fait avec une bande de largeur 0,3.
  • Notation. La barre est juste ici : on conditionne sur la variable aléatoire X, prise en x. Le fil B écrit p(y ∣ x ; θ) : x derrière la barre, la valeur observée d'une variable sur laquelle on conditionne ; θ derrière le point-virgule, un paramètre fixe et inconnu, qui n'est pas une variable aléatoire et sur lequel on ne conditionne donc pas.
Figure 3 — couper la jointe, puis diviser par la marginale

La jointe du nuage Y = 0,8 X + 0,6 Z (X et Z normales centrées réduites indépendantes), coupée à x₀ fixé. En violet, la tranche brute f(x₀, y) : son aire vaut fX(x₀), 0,130 pour x₀ = 1,5. En rouge, la même tranche divisée par fX(x₀) : son aire vaut 1, c'est la conditionnelle f(y ∣ x₀). En tirets bleus, la marginale de Y. Déplace x₀ : vers le bord, la tranche brute s'écrase (aire 0,054 en x₀ = 2), mais la conditionnelle garde sa forme, un pic de 0,665 et un écart-type de 0,6, et glisse avec son centre 0,8 x₀.

Exemples simples deux dés, le maximum, le nuage, un classifieur
  1. Deux dés. Sachant X = 3, la colonne contient six cases de 1/36 et pèse 6/36. Divisée, chaque case vaut 1/6 : connaître le premier dé ne change rien au second.
  2. Le maximum. Sachant X = 2 : M = 2 avec 1/3, puis 1/6 pour chaque valeur de 3 à 6. Sachant X = 5 : la colonne contient 5/36 en M = 5 et 1/36 en M = 6 ; divisée par 6/36, M = 5 avec 5/6 et M = 6 avec 1/6.
  3. Le nuage. Sachant X = x, Y = 0,8 x + 0,6 Z est une normale de moyenne 0,8 x et d'écart-type 0,6. La tranche x = 0 est centrée en 0, la tranche x = 1,5 en 1,2 ; leur largeur est la même.
  4. En ML. Un modèle discriminatif, régression logistique ou classifieur softmax, apprend directement p(y ∣ x), la tranche en y à x fixé, sans jamais modéliser p(x). Un modèle génératif apprend la jointe, et retrouve p(y ∣ x) par Bayes (notion 5).
Simuler en Python conditionner par une bande étroite, puis par comptage
import numpy as np

rng = np.random.default_rng(0)
n = 2_000_000
x = rng.standard_normal(n)
y = 0.8 * x + 0.6 * rng.standard_normal(n)       # the cloud of the vignette

band = np.abs(x - 1.5) < 0.02                     # a thin slice around X = 1.5
print(f"points in the slice: {band.sum()}")
print(f"slice : mean {y[band].mean():.3f} (theory 1.2), sd {y[band].std():.3f} (theory 0.6)")
print(f"all y : mean {y.mean():.3f} (theory 0),   sd {y.std():.3f} (theory 1)")

# discrete: first die X and maximum M; condition on X = 2 by keeping that column only
d1, d2 = rng.integers(1, 7, n), rng.integers(1, 7, n)
col = np.maximum(d1, d2)[d1 == 2]
print("P(M = m | X = 2), m = 1..6:", [round(float(np.mean(col == v)), 3) for v in range(1, 7)])
points in the slice: 10304
slice : mean 1.196 (theory 1.2), sd 0.604 (theory 0.6)
all y : mean -0.000 (theory 0),   sd 1.000 (theory 1)
P(M = m | X = 2), m = 1..6: [0.0, 0.333, 0.167, 0.167, 0.167, 0.166]
Où ça casse
  • f(y ∣ x) n'est pas f(x ∣ y). P(M = 2 ∣ X = 2) = 1/3, mais P(X = 2 ∣ M = 2) = 2/3. Passer de l'une à l'autre, c'est Bayes (notion 5).
  • Une densité en y, pas en x. Dans le nuage, à y = 1 fixé, ∫ f(1 ∣ x) dx = 1/0,8 = 1,25. Vue comme fonction de x, f(y ∣ x) est une vraisemblance (notion 5).
  • Hors du support, rien. « Sachant que le dé a donné 7 » n'a pas de sens : P(X = 7) = 0.
  • Une bande trop large mélange plusieurs tranches. À x = 1,5, la bande ±0,15 de la vignette donne en moyenne 1,191 et non 1,2 : la densité de X décroît dans la bande, qui contient plus de petits x que de grands ; une bande ±0,5 donne 1,107. Avec les 117 points de la vignette, le hasard (± 0,06) masque cet écart.

f(y ∣ x) = f(x, y)/fX(x) : la tranche de la jointe à x fixé, divisée par sa masse fX(x). C'est une densité en y, définie là où fX(x) > 0.

L'indépendance : la jointe se factorise outil

Brunton 26

X et Y sont indépendantes quand savoir x ne change rien à la loi de y : toutes les tranches f(y ∣ x) sont la même loi. Sur la jointe, cela veut dire qu'elle est le produit de ses marginales, f(x, y) = fX(x) fY(y). Deux dés : chaque case vaut 1/36 = 1/6 × 1/6. Premier dé et maximum : la case X = 1, M = 1 vaut 1/36, mais P(X = 1) P(M = 1) = 1/216 : X et M sont liées.

Brunton compare à la séparation des variables : sur un rectangle, la solution de l'équation de la chaleur s'écrit souvent fonction de x fois fonction de y. Puis il lance des fléchettes : un bon joueur dessine une gaussienne ronde autour du centre. Pour tester l'indépendance sur un nuage, on mélange les y entre les fléchettes : chaque x reçoit le y d'une autre fléchette, ce qui fabrique le produit des marginales. Une jointe déjà produit n'en est pas changée.

Voir l'idée — mélanger les y fabrique le produit des marginales

400 fléchettes. Viser le centre : x et y sont deux normales centrées réduites indépendantes. Mélange les y : chaque point glisse à la verticale jusqu'au y d'une autre fléchette, tirée au hasard. Le nuage reste le même nuage rond, avec environ 39 % des fléchettes dans le cercle de rayon 1 (tirets rouges) avant comme après : la jointe était déjà le produit de ses marginales, elle est séparable en x, y. Viser l'anneau (un joueur qui vise une couronne à distance 2) : le nuage est rond lui aussi, mais le mélange le détruit : les points glissent vers les quatre coins, et le centre se remplit, de 0 % à environ 9 % dans le cercle de rayon 1. Rond, et pourtant non séparable.

La formule
X, Y indépendantes ⟺ f(x, y) = fX(x) · fY(y) pour tous x, y ⟺ f(y ∣ x) = fY(y) partout où fX(x) > 0
gaussienne 2D standard : (1/(2π)) e−(x² + y²)/2 = (1/√(2π)) e−x²/2 · (1/√(2π)) e−y²/2 = φ(x) φ(y)
  • Discret : P(X = x, Y = y) = P(X = x) P(Y = y) pour toutes les cases. C'est l'indépendance d'événements de l03, appliquée à chaque paire {X = x}, {Y = y}.
  • « Pour tous x, y » : une case égale au produit ne prouve rien, il les faut toutes.
  • Avec une corrélation ρ, l'exposant devient −(x² − 2ρxy + y²)/(2(1 − ρ²)). Le terme croisé en xy ne se coupe pas en fonction de x fois fonction de y (figure 4). La covariance, qui mesure ce lien, est en l09.
Figure 4 — mêmes marginales, la jointe ne se factorise que sans corrélation

La gaussienne standard à corrélation ρ, f(x, y) = e−(x² − 2ρxy + y²)/(2(1 − ρ²)) / (2π√(1 − ρ²)). Ses marginales sont N(0, 1) pour tout ρ : le produit des marginales est donc toujours la même gaussienne ronde, en tirets. En traits pleins, les courbes de niveau de la jointe, aux mêmes hauteurs. À ρ = 0, les deux se confondent : la jointe est le produit. Monte ρ à 0,8 : la jointe s'allonge sur la diagonale. En (1, 1), elle vaut 0,152, 2,6 fois le produit 0,0585 ; en (1, −1), 0,0018, 33 fois moins.

Exemples simples deux dés, un rectangle, le maximum, un triangle, les fléchettes, une permutation
  1. Deux dés. Chaque case vaut 1/36 = 1/6 × 1/6 : indépendants.
  2. Un rectangle se factorise. P(X ≤ 2, Y ≥ 5) = 4/36 = 1/9 = P(X ≤ 2) P(Y ≥ 5) = 1/3 × 1/3.
  3. Le maximum. P(X = 6, M = 6) = 6/36 = 1/6, alors que P(X = 6) P(M = 6) = 1/6 × 11/36 = 11/216 = 0,051. Aucune case du tableau (X, M) n'est égale au produit de ses marges.
  4. Un support en triangle. Uniforme sur 0 < y < x < 1, l'aire vaut ½ et f = 2. fX(x) = 2x, fY(y) = 2(1 − y). Au point (0,2 ; 0,8), hors du triangle, f = 0, mais fX(0,2) fY(0,8) = 0,4 × 0,4 = 0,16. Un support qui n'est pas un produit A × B (un rectangle, dans les cas simples) suffit à prouver la dépendance ; le disque uniforme est dans ce cas.
  5. Les fléchettes de la vignette : viser le centre donne une jointe séparable, viser l'anneau non.
  6. En ML, l'importance par permutation. Mélanger une colonne de variables explicatives, comme la vignette mélange les y, remplace la jointe par le produit de la marginale de cette colonne et de la loi du reste. Ce que le modèle perd alors mesure ce qu'il tirait du lien.
Preuve produit et tranches, la gaussienne, le test du support
f(y ∣ x) = f(x, y) / fX(x)
définition de la conditionnelle (notion 3)
= fX(x) fY(y) / fX(x) = fY(y)
si la jointe est un produit : ⟹
f(x, y) = f(y ∣ x) fX(x) = fY(y) fX(x)
si toutes les tranches valent fY : ⟸

La gaussienne. e−(x² + y²)/2 = e−x²/2 · e−y²/2, et 1/(2π) = (1/√(2π))². Chaque facteur est φ, et la notion 2 a montré que φ est la marginale : la jointe est le produit de ses marginales.

Le support. Si fX(x) > 0 et fY(y) > 0 mais f(x, y) = 0, le produit est strictement positif et ne peut pas valoir f : X et Y sont dépendantes.

Simuler en Python l'écart au produit, et le test du mélange
import numpy as np
from math import pi

def joint(x, y, rho):                   # standard bivariate normal with correlation rho
    q = (x**2 - 2 * rho * x * y + y**2) / (1 - rho**2)
    return np.exp(-q / 2) / (2 * pi * np.sqrt(1 - rho**2))
phi = lambda t: np.exp(-t**2 / 2) / np.sqrt(2 * pi)   # both marginals are N(0, 1), for any rho

g = np.linspace(-3, 3, 301)
X, Y = np.meshgrid(g, g)
for rho in (0.0, 0.8):
    gap = np.abs(joint(X, Y, rho) - phi(X) * phi(Y)).max()
    print(f"rho = {rho}: max |f(x, y) - fX(x) fY(y)| on the grid = {gap:.4f}")

rng = np.random.default_rng(0)
n = 1_000_000
r, t = 2 + 0.2 * rng.standard_normal(n), rng.uniform(0, 2 * pi, n)
clouds = {"centre": rng.standard_normal((2, n)), "ring": (r * np.cos(t), r * np.sin(t))}
for name, (x, y) in clouds.items():
    ys = rng.permutation(y)             # shuffle the y's: builds the product of the marginals
    before, after = np.mean(x**2 + y**2 < 1), np.mean(x**2 + ys**2 < 1)
    print(f"{name:6s}: share with r < 1 before {before:.3f}, after shuffling {after:.3f}")
rho = 0.0: max |f(x, y) - fX(x) fY(y)| on the grid = 0.0000
rho = 0.8: max |f(x, y) - fX(x) fY(y)| on the grid = 0.1071
centre: share with r < 1 before 0.394, after shuffling 0.394
ring  : share with r < 1 before 0.000, after shuffling 0.087
Où ça casse
  • Mêmes marginales, jointes différentes (figure 4). L'indépendance est une propriété de la jointe, invisible sur les marginales.
  • Rond ne veut pas dire indépendant. L'anneau de la vignette et le disque uniforme sont ronds et non séparables. La gaussienne est la seule loi invariante par rotation dont les coordonnées sont indépendantes (théorème de Herschel–Maxwell).
  • Une covariance nulle ne suffit pas. L'anneau est symétrique, sa covariance est nulle, et ses coordonnées sont pourtant liées (l09).
  • Indépendance conditionnelle n'est pas indépendance. Naive Bayes suppose que les variables explicatives se factorisent sachant la classe, p(x1, …, xd ∣ c) = Πj p(xj ∣ c). Sans connaître la classe, elles restent liées par elle (notion 5).
Brunton, rectifiéBrunton (26) dit que la gaussienne 2D des fléchettes n'est pas séparable en x, y, seulement en r, θ. Elle l'est : e−(x² + y²)/2 = e−x²/2 · e−y²/2. Il l'avait construite plus tôt, ronde, à partir d'une gaussienne en x et d'une gaussienne en y ; ronde avec des marginales N(0, 1), elle a forcément ρ = 0, donc elle est séparable. Ce qui est rond sans être séparable, c'est un anneau ou un disque uniforme. Si la gravité ne fait que décaler ou étirer le nuage à la verticale, il reste séparable : aucun terme en xy n'apparaît. Enfin, « séparable en r, θ » demande un facteur r (notion 6).

X et Y indépendantes ⟺ f(x, y) = fX(x) fY(y) pour tous x, y ⟺ toutes les tranches f(y ∣ x) sont la même loi fY.

Bayes pour les densités outil

Brunton 27

La jointe se lit dans les deux sens : f(x, y) = f(y ∣ x) fX(x) = f(x ∣ y) fY(y). Égaliser les deux écritures et diviser donne Bayes pour les densités : f(x ∣ y) = f(y ∣ x) fX(x)/fY(y). C'est la page que Brunton demande d'écrire en 27, en la reliant à l03 : les mêmes formules, des densités à la place des probabilités, et une intégrale à la place de la somme au dénominateur.

Reprenons le dépistage de l03, avec un score continu au lieu d'un résultat positif ou négatif. Chez les sains, le score suit N(0, 1) ; chez les malades, N(2, 1) ; 1 % de la population est malade. La densité du score en 2 est 7,4 fois plus haute chez un malade que chez un sain. Pourtant P(malade ∣ score = 2) ne vaut que 6,9 % : la cote a priori, 1 contre 99, écrase le rapport.

Voir l'idée — ce que dit le score, et ce qu'il faut en croire

En haut, les deux vraisemblances du score : N(0, 1) chez les sains, en bleu, N(2, 1) chez les malades, en rouge. En bas, P(malade ∣ y) donnée par Bayes. Déplace le score y : à y = 2, la courbe rouge est 7,4 fois plus haute que la bleue, mais avec une prévalence de 1 % la probabilité a posteriori n'est que de 6,9 %, et il faut y = 3,3 pour passer ½. À 10 %, le même score de 2 donne 45 % ; à 50 %, 88 %, et le seuil ½ tombe en y = 1, à mi-chemin des deux centres. La courbe du bas est une sigmoïde de y, la forme de la régression logistique.

La formule
f(x ∣ y) = f(y ∣ x) fX(x) / fY(y),   avec   fY(y) = ∫ f(y ∣ x) fX(x) dx
une classe et un score : P(C = k ∣ Y = y) = f(y ∣ k) P(C = k) / Σj f(y ∣ j) P(C = j)
  • fY(y) > 0 : on ne conditionne pas sur un score impossible.
  • Le dénominateur est la marginale de Y (notion 2), écrite avec la conditionnelle : les probabilités totales, version intégrale. Il ne dépend pas de x, il ne fait que renormaliser.
  • Vue comme fonction de x, f(y ∣ x) est une vraisemblance : elle ne somme pas à 1 en général (notion 3).
  • Le mélange est permis : une variable discrète, la classe C, avec P, et une continue, le score Y, avec f.
Exemples simples le maximum, le score, la sigmoïde, Naive Bayes
  1. Discret, le maximum. P(X = 2 ∣ M = 2) = P(M = 2 ∣ X = 2) P(X = 2)/P(M = 2) = (1/3 × 1/6)/(3/36) = 2/3. Vérification directe : M = 2 correspond à (1, 2), (2, 1) et (2, 2), et X = 2 dans deux cas sur trois.
  2. Le score, en cotes (l03). Cote a posteriori = rapport de vraisemblance × cote a priori. À y = 2 : 7,39 × 1/99 = 0,075, soit 6,9 %. À y = 3 : rapport e4 = 54,6, cote 0,55, soit 35,5 %. À y = 4 : rapport 403, soit 80,3 %.
  3. Pourquoi une sigmoïde. ln du rapport = (y² − (y − 2)²)/2 = 2y − 2, donc logit P(malade ∣ y), le ln de la cote a posteriori, vaut 2y − 2 + ln(p/(1 − p)), avec p la prévalence : affine en y. Deux gaussiennes de même écart-type donnent toujours une a posteriori logistique ; ce modèle génératif et une régression logistique ont la même forme de frontière.
  4. En ML, Naive Bayes. P(c ∣ x1, …, xd) ∝ P(c) Πj f(xj ∣ c) : Bayes, plus la factorisation de la notion 4 appliquée sachant la classe. Le dénominateur, le même pour toutes les classes, n'est pas calculé : on compare les numérateurs.
Simuler en Python la formule, puis une bande autour de y = 2
import numpy as np
from math import exp, pi, sqrt

pdf = lambda y, mu: exp(-(y - mu) ** 2 / 2) / sqrt(2 * pi)   # N(mu, 1) density
prev = 0.01
for y in (2, 3):
    num = pdf(y, 2) * prev
    den = num + pdf(y, 0) * (1 - prev)          # f_Y(y), the marginal of the score
    ratio = pdf(y, 2) / pdf(y, 0)               # likelihood ratio, sick vs healthy
    print(f"score {y}: likelihood ratio {ratio:.2f}, P(sick | score) = {num / den:.4f}")

rng = np.random.default_rng(0)
n = 2_000_000
sick = rng.random(n) < prev
score = rng.standard_normal(n) + 2 * sick       # N(0, 1) if healthy, N(2, 1) if sick
band = np.abs(score - 2) < 0.05                 # condition on Y ≈ 2 with a thin band
print(f"people with a score near 2: {band.sum()}")
print(f"share of sick among them:   {sick[band].mean():.4f}")
score 2: likelihood ratio 7.39, P(sick | score) = 0.0695
score 3: likelihood ratio 54.60, P(sick | score) = 0.3555
people with a score near 2: 11647
share of sick among them:   0.0705
Où ça casse
  • Oublier le taux de base. f(y ∣ malade) élevée ne dit pas que P(malade ∣ y) l'est : 6,9 % à y = 2. C'est l'erreur de l03, en continu.
  • Prendre la vraisemblance pour une loi sur x. f(y ∣ x) en fonction de x ne somme pas à 1 en général ; il faut multiplier par fX et renormaliser.
  • Le dénominateur coûte. fY(y) = ∫ f(y ∣ x) fX(x) dx n'a souvent pas de forme fermée en grande dimension. C'est pour l'éviter qu'existent MCMC et l'inférence variationnelle (le posterior entier).
  • Notation. En fréquentiste, θ est fixe et la loi des données s'écrit p(y ; θ) : pas de Bayes sur θ. En bayésien, θ devient une variable aléatoire munie d'une loi a priori, et f(θ ∣ y) est une vraie conditionnelle, cette notion appliquée à θ.

Bayes pour les densités, là où fY(y) > 0 : f(x ∣ y) = f(y ∣ x) fX(x)/fY(y), le dénominateur étant la marginale ∫ f(y ∣ x) fX(x) dx.

Coordonnées polaires et jacobien culture

Brunton 26 et 27

Brunton parle de « bonnes coordonnées » : un nuage rond se décrit mieux par la distance au centre r et l'angle θ. Réécrire f en fonction de r et θ est permis. Mais pour obtenir la densité du couple (R, Θ), il faut un facteur r : une case dr × dθ a une aire r dr dθ, et les cases loin du centre sont plus grandes. Pour la gaussienne ronde, fR,Θ(r, θ) = r e−r²/2 · 1/(2π) : R suit une loi de Rayleigh, Θ est uniforme, et les deux sont indépendants.

D'où un chiffre qui surprend : 39,3 % seulement des fléchettes tombent à moins d'un écart-type du centre, contre 68,3 % pour |X| ≤ 1 sur une seule coordonnée. La densité est maximale au centre, mais l'anneau le plus peuplé est vers r = 1 : là encore, la densité se lit par unité d'aire, le compte par anneau, et l'aire d'un anneau croît avec r.

Voir l'idée — dense au centre, peuplé sur les anneaux

1 000 fléchettes d'une gaussienne ronde. Dans le second panneau, la part des fléchettes dans chaque anneau de largeur 0,25, et en tirets la loi de Rayleigh. Choisis un anneau : il se colore sur la cible et dans l'histogramme. Le disque central [0 ; 0,25) reçoit 3,1 % des fléchettes, l'anneau [1 ; 1,25) 14,9 %, presque cinq fois plus, alors que la densité y est presque deux fois plus faible : 0,084 par unité d'aire contre 0,157. L'anneau est simplement 9 fois plus grand. Ajoute des fléchettes : l'histogramme se cale sur les tirets.

La formule
fR,Θ(r, θ) = r · fX,Y(r cos θ, r sin θ)     gaussienne : fR,Θ(r, θ) = r e−r²/2 · 1/(2π),   r > 0, θ ∈ [0, 2π)
  • Le facteur r est le jacobien : pour x = r cos θ, y = r sin θ, |det J| = r. C'est la version 2D du |dx/dy| de l06.
  • Cas général, pour un changement de variables bijectif et dérivable : fU,V(u, v) = fX,Y(x(u, v), y(u, v)) · |det ∂(x, y)/∂(u, v)|.
  • La jointe se factorise en une fonction de r fois une fonction de θ : R et Θ sont indépendants (notion 4). R a la densité r e−r²/2 (Rayleigh), Θ est uniforme sur [0, 2π).
Exemples simples un, deux, trois écarts-types ; la distance moyenne
  1. Dans le cercle de rayon 1 : P(R ≤ 1) = 1 − e−1/2 = 0,393. Sur une coordonnée, P(|X| ≤ 1) = 0,683.
  2. Rayon 2 : 1 − e−2 = 0,865. Rayon 3 : 1 − e−4,5 = 0,989.
  3. La distance typique. Le mode de R est 1, sa médiane √(2 ln 2) = 1,18, sa moyenne √(π/2) = 1,25. Aucune n'est 0, là où la densité du nuage est maximale.
  4. Le disque et l'anneau de la vignette : 3,1 % des fléchettes sur une aire de 0,196 pour [0 ; 0,25), 14,9 % sur une aire de 1,767 pour [1 ; 1,25).
Preuve la loi de R par la CDF, et la constante 1/(2π)
P(R ≤ r) = ∬x² + y² ≤ r² (1/(2π)) e−(x² + y²)/2 dx dy
la probabilité d'une région (notion 1)
= ∫02π ∫0r (1/(2π)) e−s²/2 s ds dθ
polaires : dx dy devient s ds dθ, l'aire d'une case
= ∫0r s e−s²/2 ds = 1 − e−r²/2
l'intégrale en θ vaut 2π ; −e−s²/2 est une primitive
fR(r) = d/dr (1 − e−r²/2) = r e−r²/2
de CDF à densité : dériver (l06)

L'aire d'une case. Entre les rayons r et r + dr, sur un angle dθ : (r + dr)² dθ/2 − r² dθ/2 = r dr dθ + dr² dθ/2 ≈ r dr dθ.

La constante. Soit I = ∫ e−x²/2 dx. Alors I² = ∬ e−(x² + y²)/2 dx dy = ∫02π ∫0∞ e−r²/2 r dr dθ = 2π × 1, donc I = √(2π). D'où 1/√(2π) devant la normale en dimension 1, et 1/(2π) = (1/√(2π))² en dimension 2 : la constante de la notion 2.

Simuler en Python Box–Muller, et la coquille en grande dimension
import numpy as np

rng = np.random.default_rng(0)
n = 1_000_000
# Box-Muller: draw the polar coordinates first, then go back to x, y
r = np.sqrt(-2 * np.log(1 - rng.random(n)))      # Rayleigh, since P(R <= r) = 1 - exp(-r^2 / 2)
theta = 2 * np.pi * rng.random(n)                 # uniform angle, independent of r
x, y = r * np.cos(theta), r * np.sin(theta)
print(f"sd of x {x.std():.3f}, sd of y {y.std():.3f}, corr(x, y) {np.corrcoef(x, y)[0, 1]:.3f}")
print(f"P(R <= 1)  = {np.mean(r <= 1):.4f}   exact 1 - exp(-1/2) = {1 - np.exp(-0.5):.4f}")
print(f"P(|X| <= 1) = {np.mean(np.abs(x) <= 1):.4f}   one coordinate only")
print(f"E[R] = {r.mean():.4f}   exact sqrt(pi/2) = {np.sqrt(np.pi / 2):.4f}")

for d in (2, 10, 100):                            # norm of a d-dimensional standard gaussian
    norm = np.linalg.norm(rng.standard_normal((20_000, d)), axis=1)
    print(f"d = {d:3d}: norm {norm.mean():5.2f} ± {norm.std():.2f}, P(norm < 1) = {np.mean(norm < 1):.4f}")
sd of x 1.001, sd of y 1.000, corr(x, y) -0.000
P(R <= 1)  = 0.3931   exact 1 - exp(-1/2) = 0.3935
P(|X| <= 1) = 0.6826   one coordinate only
E[R] = 1.2539   exact sqrt(pi/2) = 1.2533
d =   2: norm  1.25 ± 0.66, P(norm < 1) = 0.3939
d =  10: norm  3.08 ± 0.69, P(norm < 1) = 0.0001
d = 100: norm  9.97 ± 0.71, P(norm < 1) = 0.0000
Où ça casse
  • Oublier r. (1/(2π)) e−r²/2 intégrée sur r > 0 et θ ∈ [0, 2π) donne √(π/2) ≈ 1,253, pas 1 : ce n'est pas une densité de (R, Θ).
  • Densité maximale n'est pas distance la plus probable. La densité du nuage culmine en (0, 0) ; la distance au centre la plus probable est 1.
  • En grande dimension, la masse est sur une coquille. En dimension 100, la norme d'une gaussienne standard vaut environ 10, à ± 0,7 près, et presque aucun point n'est près du centre (code ci-dessus). Pour un espace latent gaussien, le centre est un endroit où l'on ne tombe jamais.
Brunton, rectifiéBrunton (27) écrit sa gaussienne puis ajoute qu'on pourrait l'écrire f(r, θ), « c'est juste r² ». Comme réécriture de la même fonction, c'est juste. Comme densité du couple (R, Θ), il manque le facteur r : fR,Θ(r, θ) = (r/(2π)) e−r²/2. Même chose pour « séparable en r, θ » en 26 : elle l'est, une fois le jacobien compté.

Changer de coordonnées multiplie la densité par le jacobien ; en polaires, fR,Θ(r, θ) = r f(r cos θ, r sin θ). La gaussienne ronde donne R de Rayleigh et Θ uniforme, indépendants.

Résumé

À retenir
  1. La loi jointe, P(X = x, Y = y) ou f(x, y), décrit le couple ; une région se mesure par une somme de cases ou une intégrale double.
  2. Marginale : sommer ou intégrer l'autre variable. C'est la loi de X quelle que soit Y, pas une conditionnelle.
  3. Conditionnelle : f(y ∣ x) = f(x, y)/fX(x), la tranche à x fixé divisée par sa masse.
  4. Indépendance : f(x, y) = fX(x) fY(y) pour tous x, y ⟺ toutes les tranches ont la même loi.
  5. Les marginales ne déterminent pas la jointe : N(0, 1) en x et en y va avec n'importe quelle corrélation.
  6. La gaussienne 2D standard, (1/(2π)) e−(x² + y²)/2, est ronde et se factorise.
  7. Bayes : f(x ∣ y) = f(y ∣ x) fX(x)/fY(y), avec une marginale au dénominateur.
  8. Changer de coordonnées multiplie la densité par le jacobien : r en polaires.
« La loi jointe décrit le couple. La marginale s'obtient en intégrant l'autre variable, la conditionnelle en coupant une tranche à x fixé puis en la divisant par la marginale. X et Y sont indépendantes quand la jointe est le produit des marginales, c'est-à-dire quand toutes les tranches ont la même forme ; les marginales seules ne disent rien de la dépendance. Bayes pour les densités inverse une conditionnelle, avec une marginale au dénominateur. »

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

7 maillons · clique pour révéler après avoir dit
  1. Comment obtient-on fX à partir de f(x, y) ?
    On intègre y : fX(x) = ∫ f(x, y) dy ; en discret, la somme de la colonne x.
  2. La marginale de X est-elle conditionnée par Y ?
    Non : c'est la loi de X quelle que soit Y. Conditionner, c'est fixer Y et renormaliser.
  3. Définis f(y ∣ x) et dis ce qu'elle représente.
    f(x, y)/fX(x) : la tranche à x fixé divisée par sa masse ; une densité en y, définie là où fX(x) > 0.
  4. Quand X et Y sont-elles indépendantes ?
    Quand f(x, y) = fX(x) fY(y) pour tous x, y ; de façon équivalente, quand f(y ∣ x) = fY(y) pour tout x tel que fX(x) > 0.
  5. La gaussienne 2D ronde est-elle séparable en x, y ? Et avec une corrélation ρ ?
    Oui : e−(x² + y²)/2 = e−x²/2 e−y²/2. Avec ρ ≠ 0, le terme croisé −2ρxy l'en empêche, alors que les marginales restent N(0, 1).
  6. La densité d'un score est 7,4 fois plus haute chez un malade que chez un sain. Pourquoi P(malade ∣ score) ne vaut-elle que 6,9 % ?
    Bayes en cotes : avec 1 % de prévalence, la cote a priori 1/99 multiplie le rapport 7,4, ce qui donne une cote de 0,075.
  7. Que devient la densité gaussienne ronde en coordonnées polaires ?
    fR,Θ(r, θ) = r f(r cos θ, r sin θ) = r e−r²/2 · 1/(2π) : le jacobien r ; R suit une Rayleigh, Θ une uniforme, indépendants.