Esercizio - Effetto causale di pioggia e irrigatore sul prato bagnato (laboratorio 7)
Testo (laboratorio 7, Causal inference - Part A, esercizio 1). Si consideri la rete dello sprinkler, supposta una descrizione affidabile delle relazioni causali tra le quattro variabili: nuvoloso , irrigatore , pioggia , erba bagnata , con , , , e le tabelle
- Scrivere un programma Python che calcoli visto a lezione.
- Qual è l'effetto causale del tempo nuvoloso sul prato bagnato , cioè l'espressione di ?
- Tra pioggia e irrigatore, quale ha l'effetto causale più forte, o ?
- Calcolare l'effetto causale medio (ACE) dell'irrigatore su .
Teoria: Interventi e operatore do - criterio backdoor e aggiustamentoOsservare $X=x$ e forzare $X=x$ sono cose diverse: $P(y\mid x)\ne P(y\mid do(x))$ quando c'è un confondente. L'intervento $do(X=x)$ si calcola con la «chirurgia» del grafo (si tolgono le frecce entranti in X) e si traduce in probabilità osservazionali con la formula di aggiustamento $P(y\mid do(x))=\sum_z P(y\mid x,z)P(z)$, dove $Z$ sono i genitori di X, o più in generale un insieme S che soddisfa il criterio backdoor: blocca ogni cammino backdoor (cammino da X a Y che inizia con una freccia entrante in X) e non contiene discendenti di X. Effetto causale medio $ACE=P(y\mid do(x))-P(y\mid do(\neg x))$. Se il confondente non è osservabile ma c'è un mediatore Z con X→Z→Y, vale il front-door $P(y\mid do(x))=\sum_z P(z\mid x)\sum_{x'}P(y\mid x',z)P(x')$. Mediazione: effetto diretto controllato CDE con $do(x),do(z)$. Se due insiemi backdoor danno risultati diversi sui dati, il modello è sbagliato. Argomento del corso da 9 CFU.Interventi e operatore do - criterio backdoor e aggiustamento →; il grafo è in Inferenza causale - modelli causali strutturali e scala della causalitàI dati e la distribuzione congiunta da soli non dicono quali variabili causano quali: lo mostrano il paradosso di Simpson (la medicina funziona in ogni sottogruppo ma sembra peggiorare la popolazione) e il fatto che reti bayesiane diverse (A→B e B→A) descrivono la stessa congiunta. Serve un modello causale: un modello causale strutturale (SCM) ha variabili esogene U, endogene V e funzioni $v_i=f_i(\text{genitori},u_i)$; il suo grafo è la rete causale, e una rete causale è una rete bayesiana in cui le frecce sono cause. Le tre strutture elementari decidono l'indipendenza: catena $A\to B\to C$ e fork $A\leftarrow B\to C$ si bloccano osservando B, il collider $A\to B\leftarrow C$ si blocca se B e i suoi discendenti NON sono osservati (osservarlo crea dipendenza, explaining away). d-separazione: X e Y sono separati da Z se ogni cammino è bloccato; allora $X\perp!!!\perp Y\mid Z$. La scala della causalità (Pearl): associazione $P(y\mid x)$, intervento $P(y\mid do(x))$, controfattuali. Argomento del corso da 9 CFU.Inferenza causale - modelli causali strutturali e scala della causalità →.
Soluzione
1.
La pioggia non si può modificare fisicamente, ma si può calcolare il suo effetto causale «come se» si intervenisse, usando le probabilità osservazionali. L'unico genitore di è , quindi la formula di aggiustamento è
è nella rete. Resta , che si ricava dalla congiunta (Reti bayesiane - semantica, indipendenze e inferenza esattaUna rete bayesiana è un grafo diretto aciclico (DAG) con una variabile per nodo e una tabella delle probabilità condizionate (CPT) $P(X_i\mid\text{Parents}(X_i))$ per nodo; rappresenta la congiunta come prodotto $P(x_1,\dots,x_n)=\prod_i P(x_i\mid\text{parents}(X_i))$, con molti meno numeri della tabella completa (rete dell'allarme: 10 contro 31). Tre strutture elementari: catena $X\to Y\to Z$ e fork $Y\leftarrow X\to Z$ (estremi indipendenti dato il centro), collider $X\to Z\leftarrow Y$ (indipendenti, ma dipendenti se si osserva $Z$ o un suo discendente). Modelli causali (genitori = cause) danno reti più piccole. Inferenza esatta per enumerazione: $\mathbf P(X\mid\mathbf e)=\alpha\sum_{\mathbf y}\mathbf P(X,\mathbf e,\mathbf y)$ calcolata come somma di prodotti, in profondità e da sinistra a destra; per l'allarme $\mathbf P(B\mid j,m)=\langle0{,}284;\ 0{,}716\rangle$. Molti prodotti si ripetono: l'eliminazione di variabili li salva come fattori e li riusa.Reti bayesiane - semantica, indipendenze e inferenza esatta →): Il prodotto non dipende da : si porta fuori dalla somma e si assorbe nella costante di normalizzazione ( è una nuova costante, e il risultato sommato su è già normalizzato perché ). Con i numeri: Per cambiano i pesi : Sostituendo nella formula:
import numpy as np
t, f = 0, 1 # indici di "vero" e "falso"
P_C = np.array([0.5, 0.5]) # P(C)
P_S_C = np.array([[0.1, 0.5], [0.9, 0.5]]) # P(S | C): riga = valore di S, colonna = valore di C
P_R_C = np.array([[0.8, 0.1], [0.2, 0.9]]) # P(R | C)
P_G_SR = np.array([[[0.95, 0.90], [0.90, 0.10]], # P(G | S, R): indici [g][s][r]
[[0.05, 0.10], [0.10, 0.90]]])
# P(G | r, c) = sum_s P(s | c) P(G | r, s)
P_G_rc = P_S_C[t, t] * P_G_SR[:, t, t] + P_S_C[f, t] * P_G_SR[:, f, t] # P(G | r, c)
P_G_rnc = P_S_C[t, f] * P_G_SR[:, t, t] + P_S_C[f, f] * P_G_SR[:, f, t] # P(G | r, no c)
p_g_do_r = P_C[t] * P_G_rc[t] + P_C[f] * P_G_rnc[t]
print(P_G_rc, P_G_rnc, p_g_do_r)Output:
[0.905 0.095] [0.925 0.075] 0.915Controllo indipendente: simulando l'SCM dello sprinkler (quattro variabili esogene uniformi, funzioni a soglia) un milione di volte con forzata a vero, la frequenza di erba bagnata è .
2.
non ha genitori: l'intervento non toglie nessuna freccia e il grafo prima e dopo è lo stesso. Quindi , che si ricava sommando sui valori di e (indipendenti dato ):
P_g_c = [sum(P_R_C[r, c] * P_S_C[s, c] * P_G_SR[t, s, r] for r in (t, f) for s in (t, f)) for c in (t, f)]
print(P_g_c) # [0.76, 0.5425]: P(g | c) e P(g | no c)3. Pioggia o irrigatore?
e hanno lo stesso genitore e lo stesso figlio : il calcolo di è identico con e scambiati.
P_G_sc = P_R_C[t, t] * P_G_SR[:, t, t] + P_R_C[f, t] * P_G_SR[:, t, f] # P(G | s, c)
P_G_snc = P_R_C[t, f] * P_G_SR[:, t, t] + P_R_C[f, f] * P_G_SR[:, t, f] # P(G | s, no c)
p_g_do_s = P_C[t] * P_G_sc[t] + P_C[f] * P_G_snc[t]
print(P_G_sc, P_G_snc, p_g_do_s)Output: [0.94 0.06] [0.905 0.095] 0.9225.
Confronto: , ma questo confronta solo la probabilità di erba bagnata quando la causa è forzata a vero, non quanto la causa cambia il risultato. Per «effetto più forte» conta di quanto cambia passando da causa assente a causa presente, cioè l'ACE. Quello dell'irrigatore è (punto 4); quello della pioggia, con lo stesso calcolo, e . Quindi la pioggia ha l'effetto causale più forte, nonostante . Il motivo: ciascuna causa cambia molto l'esito solo se l'altra è assente. L'effetto della pioggia è se l'irrigatore è acceso () e se è spento (), con : . L'effetto dell'irrigatore è se piove e se non piove, con : . L'irrigatore è acceso meno spesso della pioggia che cade, quindi nel caso medio «l'altra causa è assente» è più probabile per la pioggia. Nota: la soluzione del corso calcola solo e non dà una conclusione esplicita sul confronto.
4. ACE dell'irrigatore
Per :
P_G_nsc = P_R_C[t, t] * P_G_SR[:, f, t] + P_R_C[f, t] * P_G_SR[:, f, f] # P(G | no s, c)
P_G_nsnc = P_R_C[t, f] * P_G_SR[:, f, t] + P_R_C[f, f] * P_G_SR[:, f, f] # P(G | no s, no c)
p_g_do_ns = P_C[t] * P_G_nsc[t] + P_C[f] * P_G_nsnc[t]
print(P_G_nsc, P_G_nsnc, p_g_do_ns, p_g_do_s - p_g_do_ns)Output: [0.74 0.26] [0.18 0.82] 0.46 0.4625 (a meno di errori di arrotondamento in virgola mobile). : accendere l'irrigatore aumenta la probabilità di erba bagnata di circa 46 punti percentuali. La simulazione dell'SCM con forzata dà e .
Nota sul codice del corso. La soluzione ufficiale indicizza P_G_SR[:, t, f] dove qui compare P_G_SR[:, f, t]: i due valori coincidono (), quindi i risultati sono identici.
Versione ripasso
- Dati: ; , ; , ; , (un solo attivo), . Grafo , , (Interventi e operatore do - criterio backdoor e aggiustamentoOsservare $X=x$ e forzare $X=x$ sono cose diverse: $P(y\mid x)\ne P(y\mid do(x))$ quando c'è un confondente. L'intervento $do(X=x)$ si calcola con la «chirurgia» del grafo (si tolgono le frecce entranti in X) e si traduce in probabilità osservazionali con la formula di aggiustamento $P(y\mid do(x))=\sum_z P(y\mid x,z)P(z)$, dove $Z$ sono i genitori di X, o più in generale un insieme S che soddisfa il criterio backdoor: blocca ogni cammino backdoor (cammino da X a Y che inizia con una freccia entrante in X) e non contiene discendenti di X. Effetto causale medio $ACE=P(y\mid do(x))-P(y\mid do(\neg x))$. Se il confondente non è osservabile ma c'è un mediatore Z con X→Z→Y, vale il front-door $P(y\mid do(x))=\sum_z P(z\mid x)\sum_{x'}P(y\mid x',z)P(x')$. Mediazione: effetto diretto controllato CDE con $do(x),do(z)$. Se due insiemi backdoor danno risultati diversi sui dati, il modello è sbagliato. Argomento del corso da 9 CFU.Interventi e operatore do - criterio backdoor e aggiustamento →).
- 1) . Genitore di : . ; (il fattore va nella normalizzazione). ; . . Simulazione: .
- 2) . Nessun genitore: .
- 3) (stesso schema con ): , , . Confrontare solo e non basta: serve l'ACE. Pioggia: ; irrigatore: . Effetto più forte: pioggia.
- 4) ACE irrigatore. , , , .
- Codice: matrici numpy
P_C,P_S_C,P_R_C,P_G_SR, indicit=0(vero),f=1; ogni è una somma pesata di righe diP_G_SR. - Errori tipici: usare al posto di ; pesare con invece che con ; confrontare invece degli ACE; sommare le senza i pesi .