Corrélation ou causalité : que permet réellement d’affirmer une analyse ?
Une corrélation décrit une variation conjointe. Un effet causal exige un contrefactuel crédible et des hypothèses d’identification qui ne découlent pas du coefficient seul.
Réponse directe
Séparer une association observée d’un effet causal identifié, puis montrer ce que l’ajustement change.
Une corrélation décrit une variation conjointe. Un effet causal exige un contrefactuel crédible et des hypothèses d’identification qui ne découlent pas du coefficient seul.
Hernán & Robins, Causal Inference: What IfCinelli, Forney & Pearl, 2022
01
La réponse en 30 secondes
1
Une corrélation ou une différence brute décrit ce qui est observé ensemble. Elle ne définit ni l’intervention ni le résultat contrefactuel.
2
Un effet causal compare les résultats moyens sous deux interventions bien définies pour une population et une période données.
3
Dans une étude observationnelle, l’interprétation causale dépend du design, du graphe causal et d’hypothèses non prouvées par le coefficient.
02
Trois niveaux de lecture
- 1
Décideur : demandez quelle décision changerait et quelle comparaison contrefactuelle la justifie.
- 2
Praticien : fixez exposition, outcome, population, période et variables d’ajustement avant l’analyse.
- 3
Analyste : séparez estimand, identification et estimation; documentez positivité, sensibilité et validité externe.
03
Situation marketing concrète
Une équipe observe que les clients reciblés achètent davantage sous 30 jours. Or le reciblage vise surtout les visiteurs dont l’intention préalable est forte. La question utile n’est pas seulement « qui achète le plus ? », mais « que serait devenu le taux d’achat de la même population sous une politique de reciblage, puis sans reciblage ? »
04
Question scientifique et estimand
Population cible : clients éligibles, représentés par un échantillon synthétique de 10 000 unités. À l’instant zéro, A=1 est l’affectation à une politique fixe : une seule impression display, même création, dans les 24 heures, avec plafond d’une impression sur sept jours. A=0 supprime toute impression de reciblage pendant sept jours. Y est l’achat sous 30 jours et L l’intention préalable. Estimand : ATE = E[Y¹] − E[Y⁰], standardisé sur les poids empiriques fixes de l’échantillon.
ATE = E[Y¹] − E[Y⁰]05
Pourquoi la comparaison brute peut tromper
- Confusion : l’intention préalable influence à la fois le reciblage et l’achat; L → A et L → Y créent une association non causale.
- Causalité inverse : un signal précoce de l’outcome peut déclencher l’exposition si la chronologie est mal définie.
- Mauvais contrôle : ajuster un médiateur ou un collider peut bloquer une partie de l’effet ou ouvrir un chemin de biais.
06
Intuition de la méthode
Le DAG déclaré est L → A, L → Y et A → Y. La variation de A vient du ciblage opérationnel, pas d’une assignation aléatoire. La standardisation compare les risques A=1 et A=0 à intention L égale, puis repondère chaque strate selon sa part dans la population cible. Elle ferme le chemin arrière observé via L; elle ne corrige aucun confondeur non mesuré.
Greenland, Pearl & Robins (1999) Cinelli, Forney & Pearl (2022)
07
Données nécessaires
- Une ligne par strate d’intention et niveau d’exposition, avec effectif n et achats y.
- Définition stable de l’exposition, outcome binaire à 30 jours, population, fenêtre et exclusions fixés avant le calcul.
- Confondeurs déterminés par le raisonnement causal, pas par une sélection automatique de variables.
08
Modèle formel et symboles
Association
RDcrude = E[Y|A=1] − E[Y|A=0]A : affectation à la politique; Y : achat sous 30 jours.
Standardisation
E[Yᵃ] = Σₗ E[Y|A=a,L=l]P(L=l)L : intention préalable; a : intervention déclarée; ATE : différence des risques standardisés.
09
Calcul déclaré, étape par étape
- 01
Calculer les risques bruts par exposition.
- 02
Calculer le risque dans chaque cellule L × A.
- 03
Pondérer chaque risque par P(L) dans la population cible.
- 04
Soustraire les deux risques standardisés et calculer l’erreur standard.
10
Exemple numérique de bout en bout
Dataset synthétique créé pour l’apprentissage. Il ne décrit aucune campagne réelle.
| L | A | n | Y=1 | Risque |
|---|---|---|---|---|
| 0 | 0 | 4,800 | 192 | 4% |
| 0 | 1 | 1,200 | 72 | 6% |
| 1 | 0 | 800 | 192 | 24% |
| 1 | 1 | 3,200 | 896 | 28% |
Association
22,00% − 6,86% = 15,14 points
ATE
14,80% − 12,00% = 2,80 points
IC à 95 %
[1,20; 4,40] points
L’écart entre 15,14 et 2,80 points vient de la composition d’intention. L’intervalle de Wald traite le bruit d’échantillonnage, pas un confondeur omis.
11
Hypothèses de validité
- Cohérence : l’affectation observée correspond exactement à la politique display définie, à son comparateur et à l’instant zéro.
- Échangeabilité conditionnelle : à intention L égale, aucun déterminant non mesuré n’influence encore A et Y.
- Positivité : chaque niveau de L contient des clients exposés et non exposés.
- Absence d’interférence : l’exposition d’un client ne change pas l’outcome d’un autre.
Hernán & Robins, Causal Inference: What If Cinelli, Forney & Pearl (2022)
12
Diagnostics et incertitude
01
Vérifier les effectifs et risques dans chaque cellule, la chronologie et la définition de traitement.
02
Contrôler la positivité : aucune cellule vide; inspecter les probabilités d’exposition extrêmes sur données individuelles.
03
L’IC de Wald suppose des cellules binomiales indépendantes et conditionne sur les effectifs et poids observés. Si les poids sont estimés, utiliser bootstrap ou fonction d’influence. Rapporter séparément la sensibilité aux confondeurs non mesurés et au DAG.
13
Interpréter les deux résultats
L’association brute répond à « quelle différence observe-t-on entre les groupes reçus ? ». L’ATE standardisé répond à « quelle différence moyenne obtiendrait-on sous deux politiques pour la population déclarée ? », seulement si les hypothèses d’identification sont crédibles. L’intervalle quantifie l’échantillonnage sous le modèle; il ne couvre pas automatiquement le biais de confusion.
14
Conclusions permises et interdites
Recevable
- Décrire une association brute de 15,14 points dans ce dataset.
- Sous les hypothèses déclarées, estimer un ATE standardisé de 2,80 points pour cette population.
Interdit
- Dire que le coefficient ou sa significativité prouve l’impact du reciblage.
- Généraliser à une autre population, période ou version de traitement sans nouvelle justification.
15
Décision marketing possible
La responsable peut décider de lancer un A/B test lorsque l’enjeu justifie une variation randomisée, ou d’utiliser provisoirement l’estimation standardisée avec une marge de prudence et une analyse de sensibilité. Le calcul prépare l’arbitrage; il ne décide ni du budget ni du déploiement.
16
Quand utiliser, quand ne pas utiliser
01
Utiliser la standardisation si le traitement, l’outcome, la population et un ensemble d’ajustement prétraitement défendable sont disponibles.
02
Ne pas l’utiliser comme raccourci causal si la positivité échoue, si le traitement est ambigu ou si des confondeurs majeurs manquent.
03
Alternatives : expérimentation A/B ou géographique, différence-de-différences, variable instrumentale, contrôle synthétique et analyses de sensibilité selon le design.
17
Implémentations reproductibles
Même CSV, même standardisation, mêmes sorties attendues. Le logiciel exécute le calcul; il ne valide pas les hypothèses causales.
Python 3.13
# Python 3.13, standard library only
import csv, math
rows = list(csv.DictReader(open("msc-p002-retargeting.csv", encoding="utf-8")))
for r in rows:
r.update({k:int(r[k]) for k in ("prior_intent","retargeted","n","purchases")})
N = sum(r["n"] for r in rows)
weights = {l:sum(r["n"] for r in rows if r["prior_intent"]==l)/N for l in (0,1)}
risk = {(r["prior_intent"],r["retargeted"]):r["purchases"]/r["n"] for r in rows}
crude = {a:sum(r["purchases"] for r in rows if r["retargeted"]==a)/sum(r["n"] for r in rows if r["retargeted"]==a) for a in (0,1)}
standardized = {a:sum(weights[l]*risk[l,a] for l in (0,1)) for a in (0,1)}
ate = standardized[1]-standardized[0]
se = math.sqrt(sum(weights[l]**2*(risk[l,1]*(1-risk[l,1])/next(r["n"] for r in rows if r["prior_intent"]==l and r["retargeted"]==1)+risk[l,0]*(1-risk[l,0])/next(r["n"] for r in rows if r["prior_intent"]==l and r["retargeted"]==0)) for l in (0,1)))
print(crude[1]-crude[0], ate, (ate-1.959964*se, ate+1.959964*se))R 4.5
# R 4.5
d <- read.csv("msc-p002-retargeting.csv")
d$risk <- d$purchases / d$n
w <- aggregate(n ~ prior_intent, d, sum); w$weight <- w$n / sum(w$n)
d <- merge(d, w[c("prior_intent","weight")], by="prior_intent")
crude <- aggregate(cbind(purchases,n) ~ retargeted, d, sum)
crude$risk <- crude$purchases / crude$n
std <- aggregate(I(weight*risk) ~ retargeted, d, sum)
ate <- std[std$retargeted==1,2] - std[std$retargeted==0,2]
cell <- transform(d, v=weight^2*risk*(1-risk)/n)
se <- sqrt(sum(cell$v))
c(crude_RD=diff(crude$risk), ATE=ate, lo=ate-qnorm(.975)*se, hi=ate+qnorm(.975)*se)IBM SPSS Statistics 31
* IBM SPSS Statistics 31.
GET DATA /TYPE=TXT /FILE='msc-p002-retargeting.csv' /FIRSTCASE=2 /DELCASE=LINE
/DELIMITERS=',' /VARIABLES=prior_intent F1.0 retargeted F1.0 n F8.0 purchases F8.0.
MATRIX.
GET x /VARIABLES=prior_intent retargeted n purchases.
COMPUTE risk=x(:,4)&/x(:,3).
COMPUTE N=CSUM(x(:,3)).
COMPUTE w={CSUM(x(1:2,3))/N;CSUM(x(1:2,3))/N;CSUM(x(3:4,3))/N;CSUM(x(3:4,3))/N}.
COMPUTE p1=CSUM((x(:,2)=1)&*x(:,4))/CSUM((x(:,2)=1)&*x(:,3)).
COMPUTE p0=CSUM((x(:,2)=0)&*x(:,4))/CSUM((x(:,2)=0)&*x(:,3)).
COMPUTE s1=CSUM((x(:,2)=1)&*w&*risk); s0=CSUM((x(:,2)=0)&*w&*risk).
COMPUTE se=SQRT(CSUM(w&*w&*risk&*(1-risk)&/x(:,3))).
PRINT {p1-p0;s1-s0;s1-s0-1.959964*se;s1-s0+1.959964*se}
/TITLE='crude_RD ATE CI_low CI_high'.
END MATRIX.SAS 9.4
/* SAS 9.4 */
proc import datafile='msc-p002-retargeting.csv' out=d dbms=csv replace; guessingrows=max; run;
proc sql;
create table cell as select a.*, purchases/n as risk,
(select sum(n) from d b where b.prior_intent=a.prior_intent)/(select sum(n) from d) as weight
from d a;
create table crude as select retargeted, sum(purchases)/sum(n) as risk from cell group by retargeted;
create table std as select retargeted, sum(weight*risk) as risk,
sum(weight*weight*risk*(1-risk)/n) as variance from cell group by retargeted;
quit;
data result; merge crude(where=(retargeted=0) rename=(risk=c0)) crude(where=(retargeted=1) rename=(risk=c1))
std(where=(retargeted=0) rename=(risk=s0 variance=v0)) std(where=(retargeted=1) rename=(risk=s1 variance=v1));
crude_RD=c1-c0; ATE=s1-s0; SE=sqrt(v0+v1); CI_low=ATE-1.959964*SE; CI_high=ATE+1.959964*SE; run;
proc print data=result; var crude_RD ATE CI_low CI_high; run;18
Livrable final attendu
Un dossier décisionnel contient la question causale, le DAG versionné, l’estimand, la population et la période, le dictionnaire des données, le calcul brut et ajusté, l’intervalle, les diagnostics de positivité, les hypothèses non testables, la sensibilité, les limites de généralisation et la décision humaine proposée.
19
Sources scientifiques et niveau de preuve
- Hernán & Robins, Causal Inference: What If
Manuel méthodologique complet : contrefactuels, cohérence, échangeabilité, positivité, standardisation et interférence.
- Cinelli, Forney & Pearl (2022)
Article méthodologique sur les bons et mauvais contrôles, chemins arrière, médiateurs et colliders.
- Greenland, Pearl & Robins (1999)
Fondement formel des graphes causaux et des critères d’identification par chemins.
Ces sources étayent la méthode. Le dataset et les résultats numériques sont des créations synthétiques MSC; ils ne constituent pas une validation empirique externe.
Dataset · Outil
Connexions méthodologiques
