Correlazione o causalità: cosa consente davvero di affermare un’analisi?
La correlazione descrive una variazione congiunta. Un effetto causale richiede un controfattuale credibile e ipotesi di identificazione che non derivano dal solo coefficiente.
Risposta diretta
Separare un’associazione osservata da un effetto causale identificato e mostrare cosa cambia l’aggiustamento.
La correlazione descrive una variazione congiunta. Un effetto causale richiede un controfattuale credibile e ipotesi di identificazione che non derivano dal solo coefficiente.
Hernán & Robins, Causal Inference: What IfCinelli, Forney & Pearl, 2022
01
La risposta in 30 secondi
1
Una correlazione o differenza grezza descrive ciò che si osserva insieme. Non definisce né l’intervento né l’esito controfattuale.
2
Un effetto causale confronta gli esiti medi sotto due interventi ben definiti per una popolazione e un periodo dichiarati.
3
In uno studio osservazionale, l’interpretazione causale dipende dal disegno, dal grafo causale e da ipotesi non provate dal coefficiente.
02
Tre livelli di lettura
- 1
Decisore: chiedere quale decisione cambierebbe e quale confronto controfattuale la sostiene.
- 2
Professionista: dichiarare esposizione, esito, popolazione, periodo e variabili di aggiustamento prima dell’analisi.
- 3
Analista: separare estimando, identificazione e stima; documentare positività, sensibilità e validità esterna.
03
Situazione marketing concreta
Un team osserva che i clienti sottoposti a retargeting acquistano di più entro 30 giorni. Tuttavia il retargeting riguarda soprattutto visitatori con forte intenzione precedente. La domanda utile non è solo «chi acquista di più?», ma «quale sarebbe stato il tasso della stessa popolazione con e senza retargeting?»
04
Domanda scientifica ed estimando
Popolazione obiettivo: clienti idonei rappresentati da un campione sintetico di 10.000 unità. Al tempo zero, A=1 è l’assegnazione a una politica fissa: una sola impression display, stessa creatività, entro 24 ore, con limite di una in sette giorni. A=0 sopprime ogni impression di retargeting per sette giorni. Y è l’acquisto entro 30 giorni e L l’intenzione precedente. Estimando: ATE = E[Y¹] − E[Y⁰], standardizzato sui pesi empirici fissi del campione.
ATE = E[Y¹] − E[Y⁰]05
Perché il confronto grezzo può ingannare
- Confondimento: l’intenzione precedente influenza retargeting e acquisto; L → A e L → Y creano associazione non causale.
- Causalità inversa: un segnale precoce dell’esito può attivare l’esposizione se la cronologia è mal definita.
- Controllo errato: aggiustare per un mediatore o collider può bloccare parte dell’effetto o aprire un percorso di bias.
06
Intuizione del metodo
Il DAG dichiarato è L → A, L → Y e A → Y. La variazione di A proviene dal targeting operativo, non da assegnazione casuale. La standardizzazione confronta i rischi A=1 e A=0 a parità di L, poi pesa gli strati secondo la popolazione obiettivo. Chiude il percorso back-door osservato tramite L; non corregge confondenti non misurati.
Greenland, Pearl & Robins (1999) Cinelli, Forney & Pearl (2022)
07
Dati necessari
- Una riga per strato d’intenzione e livello di esposizione, con numerosità n e acquisti y.
- Definizione stabile dell’esposizione, esito binario a 30 giorni, popolazione, finestra ed esclusioni fissati prima del calcolo.
- Confondenti scelti tramite ragionamento causale, non con selezione automatica.
08
Modello formale e simboli
Associazione
RDcrude = E[Y|A=1] − E[Y|A=0]A: assegnazione alla politica; Y: acquisto entro 30 giorni.
Standardizzazione
E[Yᵃ] = Σₗ E[Y|A=a,L=l]P(L=l)L: intenzione precedente; a: intervento dichiarato; ATE: differenza dei rischi standardizzati.
09
Calcolo dichiarato, passo dopo passo
- 01
Calcolare i rischi grezzi per esposizione.
- 02
Calcolare il rischio in ogni cella L × A.
- 03
Pesare ogni rischio con P(L) nella popolazione obiettivo.
- 04
Sottrarre i rischi standardizzati e calcolare l’errore standard.
10
Esempio numerico completo
Dataset sintetico creato per l’apprendimento. Non descrive alcuna campagna reale.
| L | A | n | Y=1 | Rischio |
|---|---|---|---|---|
| 0 | 0 | 4,800 | 192 | 4% |
| 0 | 1 | 1,200 | 72 | 6% |
| 1 | 0 | 800 | 192 | 24% |
| 1 | 1 | 3,200 | 896 | 28% |
Associazione
22,00% − 6,86% = 15,14 punti
ATE
14,80% − 12,00% = 2,80 punti
IC al 95%
[1,20; 4,40] punti
Lo scarto tra 15,14 e 2,80 punti deriva dalla composizione dell’intenzione. L’intervallo di Wald tratta il campionamento, non confondenti omessi.
11
Ipotesi di validità
- Coerenza: l’assegnazione osservata corrisponde esattamente alla politica display definita, al comparatore e al tempo zero.
- Scambiabilità condizionale: a parità di L, nessun determinante non misurato influenza ancora A e Y.
- Positività: ogni livello di L contiene clienti esposti e non esposti.
- Assenza d’interferenza: l’esposizione di un cliente non modifica l’esito di un altro.
Hernán & Robins, Causal Inference: What If Cinelli, Forney & Pearl (2022)
12
Diagnostica e incertezza
01
Verificare numerosità e rischi di ogni cella, cronologia e definizione del trattamento.
02
Controllare la positività: nessuna cella vuota; ispezionare probabilità di esposizione estreme su dati individuali.
03
L’IC di Wald assume celle binomiali indipendenti e condiziona su numerosità e pesi osservati. Se i pesi sono stimati, usare bootstrap o funzione d’influenza. Riportare separatamente la sensibilità a confondenti non misurati e al DAG.
13
Interpretare i due risultati
L’associazione grezza risponde a «quale differenza si osserva tra i gruppi?». L’ATE standardizzato risponde a «quale differenza media si avrebbe sotto due politiche?», solo se le ipotesi sono credibili. L’intervallo quantifica il campionamento, non automaticamente il bias da confondimento.
14
Conclusioni ammesse e vietate
Ammesso
- Descrivere un’associazione grezza di 15,14 punti nel dataset.
- Sotto le ipotesi dichiarate, stimare un ATE standardizzato di 2,80 punti per questa popolazione.
Vietato
- Dire che coefficiente o significatività provano l’impatto del retargeting.
- Generalizzare a un’altra popolazione, periodo o versione del trattamento senza nuova giustificazione.
15
Decisione marketing possibile
La responsabile può decidere un A/B test quando l’importanza giustifica variazione randomizzata, oppure usare provvisoriamente la stima standardizzata con prudenza e sensibilità. Il calcolo prepara la decisione; non sceglie budget o lancio.
16
Quando usare e quando non usare
01
Usare la standardizzazione quando trattamento, esito, popolazione e un insieme di aggiustamento pretrattamento difendibile sono disponibili.
02
Non usarla come scorciatoia causale se manca positività, il trattamento è ambiguo o mancano confondenti importanti.
03
Alternative: esperimenti A/B o geografici, differenza-nelle-differenze, variabili strumentali, controllo sintetico e analisi di sensibilità secondo il disegno.
17
Implementazioni riproducibili
Stesso CSV, stessa standardizzazione, stessi output attesi. Il software esegue il calcolo; non valida le ipotesi causali.
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
Risultato finale atteso
Un dossier decisionale contiene domanda causale, DAG versionato, estimando, popolazione e periodo, dizionario dati, calcolo grezzo e aggiustato, intervallo, diagnostica di positività, ipotesi non testabili, sensibilità, limiti di generalizzazione e decisione umana proposta.
19
Fonti scientifiche e livello di prova
- Hernán & Robins, Causal Inference: What If
Testo metodologico completo: controfattuali, coerenza, scambiabilità, positività, standardizzazione e interferenza.
- Cinelli, Forney & Pearl (2022)
Articolo metodologico su controlli buoni e cattivi, percorsi back-door, mediatori e collider.
- Greenland, Pearl & Robins (1999)
Fondamento formale dei grafi causali e dei criteri di identificazione basati sui percorsi.
Le fonti sostengono il metodo. Dataset e risultati numerici sono creazioni sintetiche MSC; non sono validazione empirica esterna.
Dataset · Strumento
Connessioni metodologiche
