Corrélation et causalité : comprendre la différence
L'article pilier – la distinction fondamentale entre corrélation et causalité.
Découvrez ce qu'est un facteur de confusion, comment il crée des corrélations trompeuses, et apprenez à l'identifier et le contrôler dans vos analyses de données.
Une variable confondante (ou facteur de confusion) est une variable externe qui influence à la fois la cause présumée et l'effet étudié, créant une association trompeuse entre les deux.
Imaginez que vous observez une corrélation entre X et Y. Un confondant C est une "troisième variable" qui est responsable de cette corrélation, sans que X cause Y ni Y cause X. C'est le grand imposteur de l'analyse de données.
Exemple canonique :
La chaleur augmente à la fois la consommation de glaces ET les noyades (car plus de gens se baignent). Résultat : glaces et noyades sont corrélées, mais il n'y a aucun lien causal direct.

Diagramme causal X ← C → Y (Assisté Nano Banana 2)
C agit sur X. Dans l'exemple classique, la température (C) influence la consommation de glaces (X).
C agit aussi sur Y. La température (C) influence les noyades (Y) car plus de gens vont à la plage.
Par l'intermédiaire de C, X et Y varient ensemble. Une analyse naïve conclura à une relation entre X et Y.
Sans contrôle de C, on croit à tort que X cause Y (ou vice-versa). D'où l'expression "corrélation ne signifie pas causalité".
X ← C → Y
Le confondant est un "ancêtre commun" qui crée un chemin de corrélation non causal entre X et Y.
Une étude observationnelle montre que les femmes prenant des hormones ont moins de maladies cardiovasculaires. Conclusion naïve : les hormones protègent le cœur. Problème : les femmes sous hormones étaient aussi plus suivies médicalement, avaient un meilleur statut socio-économique, et des habitudes de vie plus saines. Ces confondants expliquaient l'effet. Les essais randomisés ultérieurs ont montré l'inverse.
Observation : les personnes qui portent de grandes pointures de chaussures ont plus souvent mal à la tête. Le confondant : l'âge. Les enfants ont des petits pieds et peu de maux de tête ; les adultes ont de grands pieds et plus de maux de tête. Pas de lien causal direct.
Une étude des années 1980 a trouvé une corrélation entre consommation de café et cancer du pancréas. Le confondant : le tabagisme. Les buveurs de café étaient aussi plus souvent fumeurs, et c'est le tabac qui causait le cancer. Aujourd'hui, cette étude est un cas d'école.
Observation : les personnes plus éduquées gagnent plus d'argent. Confondant possible : le milieu socio-économique familial. Les enfants de familles aisées ont accès à de meilleures études ET bénéficient d'un réseau professionnel avantageux. L'éducation cause bien une partie de l'effet, mais un confondant amplifie la relation.

Collage des 3 exemples classiques (Assisté Nano Banana 2)
Pour qu'une variable C soit un confondant de la relation entre X et Y, trois conditions doivent être réunies :
| Condition | Explication | Exemple (glaces/noyades) |
|---|---|---|
| 1. C est associé à X | C varie avec la cause présumée X | La température influence la consommation de glaces |
| 2. C est associé à Y (indépendamment de X) | C varie avec l'effet Y, même quand X est fixe | La température influence les noyades (via baignade) |
| 3. C n'est PAS sur le chemin causal entre X et Y | C n'est pas une conséquence de X ni une cause de Y via X | La température n'est pas causée par les glaces ni ne cause les noyades via les glaces |
Le Directed Acyclic Graph (DAG) ou graphe acyclique orienté est un outil puissant pour représenter visuellement les hypothèses causales et identifier les confondants.
C / \ ↓ ↓ X Y
C est un confondant. Pour estimer l'effet causal de X sur Y, il faut conditionner sur C (le contrôler).
Pour identifier l'effet causal de X sur Y, il faut bloquer tous les chemins "non causaux" (back-door) entre X et Y. Un chemin back-door est un chemin qui part de X, remonte vers un ancêtre commun, puis redescend vers Y. La solution : conditionner sur l'ensemble des variables qui bloquent ces chemins (sans créer de nouveaux biais).

Schéma DAG avec flèches et explication du back-door (Assisté Nano Banana 2)
La meilleure façon d'identifier les confondants est de comprendre le mécanisme qui génère les données. Discutez avec des experts métier, lisez la littérature scientifique, construisez un DAG.
Comparez la relation brute entre X et Y avec la relation après contrôle de C :
import pandas as pd
from scipy.stats import pearsonr
from scipy.stats import partial_correlation
# Corrélation brute
r_brut, p_brut = pearsonr(df['X'], df['Y'])
# Corrélation partielle (contrôle de C)
from pingouin import partial_corr
r_partiel = partial_corr(data=df, x='X', y='Y', covar='C')
print(f"Brut : {r_brut:.3f}, Partiel : {r_partiel['r'].values[0]:.3f}")
Testez la robustesse de vos résultats en contrôlant différentes combinaisons de variables. Si le coefficient change radicalement quand vous ajoutez une variable, celle-ci est probablement importante.
L'assignation aléatoire (A/B test, essai randomisé) élimine théoriquement tous les confondants, observés ou non. C'est la méthode de référence, mais pas toujours possible (éthique, coût, faisabilité).
On divise les données en strates (groupes) selon les valeurs du confondant, puis on analyse la relation X → Y à l'intérieur de chaque strate. L'appariement (matching) sélectionne des sujets comparables sur le confondant.
On inclut le confondant comme variable de contrôle dans le modèle de régression : Y = β₀ + β₁X + β₂C + ε. Le coefficient β₁ est alors l'effet de X à C constant.
On estime la probabilité d'être exposé à X (le traitement) en fonction des confondants, puis on apparie ou pondère les sujets sur ce score. Utile quand il y a beaucoup de confondants.
Pour les données longitudinales, on compare l'évolution du groupe traité vs groupe contrôle avant/après intervention, ce qui contrôle les confondants constants dans le temps.
# Modèle simple (brut)
modele_brut <- lm(Y ~ X, data = df)
summary(modele_brut)
# Modèle avec contrôle du confondant C
modele_controle <- lm(Y ~ X + C, data = df)
summary(modele_controle)
# Comparaison des coefficients de X
coef(modele_brut)['X']
coef(modele_controle)['X']
Le problème le plus difficile : les confondants que vous n'avez pas mesurés. Ils peuvent toujours biaiser vos résultats.
La E-value (valeur E) quantifie la force minimale qu'un confondant non observé devrait avoir (associations avec X et Y) pour expliquer entièrement l'effet observé. Plus la E-value est élevée, plus l'effet est robuste.
On utilise une variable Z qui est associée à X mais n'a aucun lien direct avec Y (sauf via X). L'IV permet d'estimer un effet causal même en présence de confondants non observés.
Estimer la borne inférieure et supérieure possible du vrai effet causal en faisant varier l'influence d'un confondant hypothétique.
import numpy as np
import pandas as pd
from scipy.stats import pearsonr
import statsmodels.api as sm
# Paramètres
n = 1000
np.random.seed(42)
# Génération du confondant C
C = np.random.normal(0, 1, n)
# X et Y causés par C + bruit indépendant
X = 2 * C + np.random.normal(0, 1, n)
Y = 3 * C + np.random.normal(0, 1, n)
# Corrélation X-Y (trompeuse)
r_brut, p_brut = pearsonr(X, Y)
print(f"Corrélation brute X-Y : {r_brut:.3f} (p={p_brut:.4f})")
# Régression de Y sur X (sans C)
model_brut = sm.OLS(Y, sm.add_constant(X)).fit()
print(f"Coefficient X (brut) : {model_brut.params[1]:.3f}")
# Régression avec contrôle de C
X_with_C = np.column_stack((X, C))
model_controle = sm.OLS(Y, sm.add_constant(X_with_C)).fit()
print(f"Coefficient X (contrôlé) : {model_controle.params[1]:.3f}")
print(f"Coefficient C : {model_controle.params[2]:.3f}")
# Le coefficient de X devrait être proche de 0 (pas d'effet causal)
Un confondant est en amont de X et Y (X ← C → Y). Un médiateur est sur le chemin causal entre X et Y (X → M → Y). Pour les distinguer, demandez-vous : C est-il causé par X ? Si oui, c'est un médiateur (ne pas contrôler). Si C cause X et Y sans être causé par X, c'est un confondant (contrôler).
Non ! Contrôler une variable causée par X (un médiateur) ou par Y (un collisionneur) peut introduire un biais. Seules les variables qui causent à la fois X et Y (ou sont des causes communes) sont des confondants à contrôler. Un DAG aide à ne pas se tromper.
Vous pouvez : 1) utiliser une variable instrumentale (si vous en trouvez une), 2) réaliser une analyse de sensibilité (E-value), 3) discuter franchement de la limite dans vos conclusions. En recherche, l'honnêteté sur les biais potentiels est une force, pas une faiblesse.
Théoriquement, oui, en moyenne, pour tous les confondants (observés et non observés). En pratique, le hasard peut créer des déséquilibres (surtout sur petits échantillons). D'où l'importance des tests de balance et de l'ajustement a posteriori si nécessaire.
Un collisionneur est une variable causée par deux autres (X → C ← Y). Conditionner sur un collisionneur (contrôler C) crée une association artificielle entre X et Y, même si elles sont indépendantes dans la population. Exemple : talent et beauté sont indépendants, mais parmi les célébrités (C), on observe une corrélation négative.
Oui, partiellement. Des packages comme DoWhy (Python) ou causalTree (R) aident à identifier les confondants à partir d'un DAG. Mais l'expertise métier reste irremplaçable pour construire le DAG initial. L'automatisation complète est un leurre.
Les variables confondantes sont l'ennemi invisible de l'analyse de données. Elles créent des corrélations trompeuses qui peuvent induire en erreur les décideurs. Les identifier et les contrôler est essentiel pour approcher la causalité.