Deux grandeurs qui varient ensemble ne prouvent pas que l'une agit sur l'autre. Souvent, une troisième les pilote toutes les deux : un confondeur. L'ignorer fabrique des effets fantômes, et parfois en cache de vrais.
Dans une courbe de charge, le froid extérieur explique à la fois la consommation de chauffage et les ventes de bouillottes. Si vous reliez directement les deux, vous « découvrez » que les bouillottes font consommer du courant. Il faut comparer à température égale.
Avant de calculer, on dessine les flèches de causalité supposées. Trois motifs reviennent partout, et chacun appelle un traitement différent.
Z est la température, X les ventes de glaces, Y la consommation de climatisation (tout est centré-réduit). Vous réglez à quel point Z pilote chaque grandeur, et le vrai effet de X sur Y. Les couleurs séparent les jours selon la température : à température égale, la relation disparaît.
Les trois groupes de température sont des tiers des jours. La pente « à température égale » vient d'une régression de Y sur X et Z ; elle estime le vrai effet si Z est le seul confondeur.
Ajoutons une variable M causée à la fois par X et par Y (un collider). Les quatre barres sont l'effet de X estimé selon ce que l'on contrôle. Seule la bonne spécification retrouve le vrai effet (trait orange).
Ici Z → X vaut 1 et Z → Y vaut 1,5. Les erreurs sont mesurées sur un seul échantillon : le bouton « Nouveaux jours » tire un autre échantillon pour voir leur variabilité.
Voici comment aborder une question causale sans se faire piéger, puis le code qui reproduit ces régressions.
import numpy as np import statsmodels.api as sm rng = np.random.default_rng(0) n = 200 z = rng.normal(size=n) # température (confondeur) x = 1.0 * z + rng.normal(size=n) # ventes de glaces y = 1.5 * z + 0.0 * x + rng.normal(size=n) # clim : AUCUN effet de x naif = sm.OLS(y, sm.add_constant(x)).fit() ajuste = sm.OLS(y, sm.add_constant(np.column_stack([x, z]))).fit() print(naif.params[1]) # ≈ 0,7 : effet fantôme print(ajuste.params[1]) # ≈ 0 : à température égale, rien
Combien d'observations faut-il pour détecter un petit effet, et pourquoi regarder les résultats tous les jours fausse le test.
Statistiques, finance quantitative, machine learning, deep learning, LLM, agents IA, MLOps : 321 épisodes avec des simulateurs à manipuler, pas des vidéos.
Statistics, quantitative finance, machine learning, deep learning, LLMs, AI agents, MLOps: 321 interactive episodes with simulators to play with, not videos.