Regressione predittiva o causale: cosa si vuole stimare?
La stessa famiglia di regressione può servire due obiettivi incompatibili: prevedere una spesa futura o stimare l’effetto di un intervento. Cambiano estimando, variabili ammissibili, disegno e validazione.
Risposta diretta
Separare correttamente una previsione al giorno 7 da un effetto causale totale definito al giorno 0.
La stessa famiglia di regressione può servire due obiettivi incompatibili: prevedere una spesa futura o stimare l’effetto di un intervento. Cambiano estimando, variabili ammissibili, disegno e validazione.
01
La risposta in 30 secondi
1
Una regressione predittiva stima un valore futuro per una nuova unità e si valuta su dati non usati per la stima.
2
Una regressione causale mira all’effetto di un intervento definito in una popolazione e dipende da un disegno di identificazione, non dal solo fit.
3
Una variabile post-trattamento può migliorare la previsione al giorno 7 ma essere inammissibile per l’effetto causale totale deciso al giorno 0.
02
Tre livelli di lettura
- 1
Decisore: chiarire se la decisione chiede chi spenderà di più o cosa causerebbe l’invio del promemoria.
- 2
Professionista: fissare origine della previsione, intervento, comparatore, esito, popolazione e variabili disponibili a ogni istante.
- 3
Analista: separare perdita predittiva, estimando causale, identificazione, stima e portata dell’incertezza.
03
Situazione marketing concreta
Un retailer randomizza al giorno 0 un promemoria e-mail tra 2.400 clienti idonei. Al giorno 7 vuole prevedere la spesa a 30 giorni con le informazioni disponibili. Separatamente vuole l’effetto totale medio dell’invio. L’indice di engagement al giorno 7 è utile per la prima domanda ma avviene dopo l’assegnazione per la seconda.
04
Due domande, due estimandi
Previsione: per un cliente osservato al giorno 7, stimare E[Y|X] e l’errore su 600 clienti holdout. Causalità: tra 2.400 clienti randomizzati, stimare ATE = E[Y(1)−Y(0)], con T=1 un solo promemoria al giorno 0 e nessun altro fino al giorno 30, T=0 nessun promemoria fino al giorno 30 e Y spesa a 30 giorni in euro.
Previsione
μ(x) = E[Y | X=x]Causalità
ATE = E[Y(1) − Y(0)]05
Perché la stessa regressione può ingannare
- Un RMSE basso non definisce né intervento né controfattuale e non prova alcun effetto causale.
- Aggiungere l’engagement post-trattamento aiuta a prevedere Y ma blocca parte del percorso T → M → Y quando si legge il coefficiente di T.
- Selezionare variabili perché predicono bene non sostituisce il ragionamento causale su confondenti, mediatori e collider.
Arnold et al. (2020) Ramspek et al. (2021) Cinelli, Forney & Pearl (2022)
06
Intuizione e cronologia causale
L e S precedono T ma non lo causano perché T è randomizzato. Il DAG dichiarato è L,S → M; L,S → Y; T → M → Y; e T → Y. L è l’intenzione iniziale, S la spesa precedente e M l’engagement al giorno 7. Al giorno 7 M è informazione predittiva disponibile. Per l’effetto totale di T deciso al giorno 0, M è un mediatore da non aggiustare. La stessa colonna cambia quindi ruolo con domanda e istante decisionale.
07
Dati necessari e disponibilità
- customer_id; split train/holdout; baseline_intent_z e prior_spend_eur misurati prima del giorno 0.
- reminder_assigned è l’assegnazione randomizzata al giorno 0; engagement_index_7d è misurato dopo.
- spend_30d_eur è l’esito continuo. Le 1.800 righe train stimano le previsioni; 600 righe holdout ne valutano il trasporto interno.
08
Modelli formali e simboli
Previsione al giorno 7
Y = β₀ + β₁L + β₂S + β₃T + β₄M + εL: baseline_intent_z; S: prior_spend_eur; T: reminder_assigned; M: engagement_index_7d; Y: spend_30d_eur.
Effetto totale
Y = α₀ + τT + α₁L + α₂S + uτ: differenza media aggiustata per precisione; M è escluso.
μ(x) è la media condizionata di Y per il vettore di predittori x. β₀ e α₀ sono le intercette; da β₁ a β₄ e da α₁ ad α₂ sono le pendenze; τ è l’ATE; ε e u sono i residui dei due modelli.
09
Calcolo dichiarato, passo dopo passo
- 01
Generare o caricare 2.400 righe con seed 20260819 e conservare lo split fissato.
- 02
Stimare due previsioni su train: senza M, poi con M; valutare solo su holdout.
- 03
Ricampionare in coppia i 600 errori holdout 2.000 volte per l’IC del miglioramento RMSE.
- 04
Stimare τ sulle 2.400 unità escludendo M e calcolare l’IC robusto HC1.
- 05
Stimare separatamente il modello con M per mostrare perché il coefficiente di T non risponde all’ATE totale.
10
Esempio numerico completo
Dataset sintetico MSC. Non descrive alcuna campagna reale.
| Oggetto | Specifica | Risultato |
|---|---|---|
| RMSE | Previsione senza M | 6,1006 € |
| RMSE | Previsione con M | 5,1734 € |
| ATE | Modello causale senza M | 8,3667 € |
| βT | M | Modello aggiustato per M | 2,0657 € |
Guadagno predittivo
15,20%
95% CI [11,05%; 19,62%]
ATE
8,37 €
95% CI [7,87 €; 8,86 €]
Verità del generatore
8,80 €
11
Ipotesi di validità
- Previsione: definizioni, disponibilità al giorno 7, popolazione e misurazione stabili tra train, holdout e uso futuro.
- Causalità: randomizzazione corretta, coerenza delle due politiche, assenza di interferenza, esito osservato e follow-up non differenziale.
- Il modello lineare stima una differenza media e può aumentare la precisione; la randomizzazione, non la forma della regressione, identifica l’ATE.
Hernán & Robins, Causal Inference: What If Arnold et al. (2020) Cinelli, Forney & Pearl (2022)
12
Diagnostica e incertezza
01
Previsione: confrontare RMSE, MAE e R² su holdout; verificare drift, valori fuori supporto e disponibilità reale di M all’origine.
02
Causalità: controllare rapporto di assegnazione, equilibrio pretrattamento, attrition, contaminazione ed errori standard robusti HC1.
03
L’IC bootstrap del miglioramento RMSE descrive questo holdout sintetico. L’IC HC1 dell’ATE descrive il rumore campionario nel disegno dichiarato, non la validità esterna.
13
Interpretare senza confondere gli obiettivi
Il modello al giorno 7 con M riduce RMSE del 15,20%, IC bootstrap 95% [11,05%; 19,62%]. È un guadagno predittivo su questo holdout. Il modello causale senza M stima ATE 8,37 €, IC HC1 [7,87 €; 8,86 €], vicino alla verità sintetica 8,80 €. Con M, il coefficiente di T scende a 2,07 € e non rappresenta più l’effetto totale.
14
Conclusioni ammesse e vietate
Ammesso
- Scegliere il modello con M per una previsione al giorno 7 in un contesto comparabile.
- Riportare 8,37 € come stima dell’effetto totale medio nel protocollo randomizzato dichiarato.
Vietato
- Presentare la riduzione del RMSE come prova che il promemoria aumenta la spesa.
- Leggere 2,07 € come effetto causale totale o generalizzare 8,37 € a un’altra popolazione senza nuove prove.
15
Decisione marketing possibile
Mantenere due oggetti distinti: uno score di spesa al giorno 7 che può usare M e una stima sperimentale dell’effetto totale che la esclude. Il primo priorizza un’azione al giorno 7; il secondo decide se mantenere la politica di promemoria.
16
Quando usare ciascun approccio
01
Usare la regressione predittiva quando il target è un esito futuro individuale e l’origine è esplicita.
02
Usare la stima causale quando una decisione modifica T e un disegno credibile identifica il controfattuale.
03
Non usare questo modello lineare se esito, supporto o meccanismo di assegnazione cambiano materialmente senza nuovo audit.
04
Alternative: validazione temporale e modelli non lineari per prevedere; differenza di medie randomizzata per l’ATE; analisi di mediazione dedicata se l’effetto diretto diventa il target.
17
Implementazioni riproducibili
Python 3.13 e R 4.5 sono riferimenti. SPSS 31 e SAS 9.4 sono sintassi secondarie per il modello causale; non certificano equivalenza degli errori standard né ipotesi.
Python 3.13
python msc-p018-reference.py --csv msc-p018-predictive-causal.csvR 4.5
d <- read.csv("msc-p018-predictive-causal.csv")
train <- subset(d, split == "train"); hold <- subset(d, split == "holdout")
pre <- lm(spend_30d_eur ~ baseline_intent_z + prior_spend_eur + reminder_assigned, train)
post <- lm(spend_30d_eur ~ baseline_intent_z + prior_spend_eur + reminder_assigned + engagement_index_7d, train)
e0 <- hold$spend_30d_eur - predict(pre, hold)
e1 <- hold$spend_30d_eur - predict(post, hold)
rmse <- function(e) sqrt(mean(e^2))
c(pre_rmse=rmse(e0), post_rmse=rmse(e1), improvement=100*(rmse(e0)-rmse(e1))/rmse(e0))
set.seed(20260819)
b <- replicate(2000, { i <- sample(seq_along(e0), replace=TRUE); 100*(rmse(e0[i])-rmse(e1[i]))/rmse(e0[i]) })
quantile(b, c(.025, .975))
hc1 <- function(fit) {
X <- model.matrix(fit); e <- residuals(fit); n <- nrow(X); p <- ncol(X)
bread <- solve(crossprod(X)); meat <- crossprod(X, X * e^2)
se <- sqrt(diag((n/(n-p)) * bread %*% meat %*% bread))
cbind(estimate=coef(fit), se=se, lower=coef(fit)-1.959964*se, upper=coef(fit)+1.959964*se)
}
total <- lm(spend_30d_eur ~ reminder_assigned + baseline_intent_z + prior_spend_eur, d)
adjusted <- lm(spend_30d_eur ~ reminder_assigned + baseline_intent_z + prior_spend_eur + engagement_index_7d, d)
hc1(total)["reminder_assigned", ]
hc1(adjusted)["reminder_assigned", ]IBM SPSS Statistics 31
GET DATA /TYPE=TXT /FILE='msc-p018-predictive-causal.csv'
/DELCASE=LINE /DELIMITERS="," /ARRANGEMENT=DELIMITED /FIRSTCASE=2
/VARIABLES=customer_id A5 split A7 baseline_intent_z F12.6 prior_spend_eur F12.6
reminder_assigned F1.0 engagement_index_7d F12.6 spend_30d_eur F12.6.
REGRESSION /DEPENDENT spend_30d_eur
/METHOD=ENTER reminder_assigned baseline_intent_z prior_spend_eur.SAS 9.4
proc import datafile="msc-p018-predictive-causal.csv" out=p018 dbms=csv replace; guessingrows=max; run;
proc reg data=p018;
model spend_30d_eur = reminder_assigned baseline_intent_z prior_spend_eur / hcc hccmethod=1;
run; quit;18
Risultato finale atteso
Un dossier contiene due schede separate: previsione con origine al giorno 7, variabili ammissibili, metriche holdout e drift; causalità con protocollo al giorno 0, DAG, ATE, intervallo, minacce e popolazione di validità. Gli output non sono mai fusi in una sola conclusione.
19
Fonti scientifiche e livello di prova
- Shmueli (2010)
Fondamento concettuale: obiettivi, dati, validazione e criteri differiscono tra spiegazione e previsione.
- Hernán & Robins, Causal Inference: What If
Testo metodologico completo: controfattuali, ATE, randomizzazione, coerenza e interferenza.
- Arnold et al. (2020)
Articolo metodologico open access: selezione delle variabili, valutazione e interpretazione dipendono dalla domanda.
- Cinelli, Forney & Pearl (2022)
Fondamento causale: aggiustare un mediatore può bloccare l’effetto totale cercato.
- Ramspek et al. (2021)
Revisione empirica: documenta e limita la frequenza della confusione in 180 studi osservazionali.
Questi testi sostengono il metodo. Dataset, meccanismo generatore e risultati sono creazioni sintetiche MSC, non validazione empirica esterna.
Dataset · Strumento
Connessioni metodologiche
