Esercizio - Controfattuali di Joe e della tabella di U (slide del corso)
Testo (slide del corso di Intelligenza Artificiale, Ing. dell'Informazione UniPD, Causal Inference parte 3, slide 8-15).
Parte 1: il tutoraggio. Delle sessioni di tutoraggio sono offerte agli studenti per migliorare lo studio a casa e il voto d'esame , secondo l'SCM Per lo studente Joe i dati dicono , , .
- Quale sarebbe stato il voto di Joe se avesse raddoppiato lo studio a casa ()?
- E se avesse avuto il tutoraggio massimo ()? E nessun tutoraggio ()?
Parte 2: la tabella. Nell'SCM , con , e , , : 3. Scrivere la tabella di tutti i controfattuali , . 4. Calcolare , , , e .
Teoria: Controfattuali e scoperta causaleUn controfattuale chiede «cosa sarebbe successo a questo individuo se X fosse stato x?»: $Y_x(u)$ è il valore di Y nel modello $M_x$ (equazione di X sostituita da X=x) con le esogene fissate al valore $u$ dell'individuo. Si calcola in tre passi: abduzione (aggiornare $P(U)$ con l'evidenza, nel caso deterministico ricavare $u$ dai dati), azione (sostituire l'equazione di X con la costante), predizione (calcolare Y in $M_x$). Differenza con gli interventi: $P(Y\mid do(x))\equiv P(Y_x)$ è a livello di popolazione, ma in generale $P(Y\mid do(x),z)\ne P(Y_x\mid z)$ perché nel secondo il condizionamento è prima dell'intervento. Nei modelli lineari gaussiani i coefficienti di regressione di ogni variabile sui suoi genitori sono i coefficienti strutturali, e l'effetto causale totale è la somma dei prodotti dei coefficienti lungo i cammini non backdoor. Scoperta causale (algoritmo PC): si parte dal grafo completo non orientato, si toglie ogni arco X−Y con $X\perp!!!\perp Y\mid Z$ a $|Z|$ crescente (test di Fisher), si orientano i collider (Z mai nell'insieme separatore), poi si propaga l'orientamento; catena e fork non sono distinguibili (stessa classe di equivalenza di Markov). Assunzioni: aciclicità, sufficienza, Markov, fedeltà. Argomento del corso da 9 CFU.Controfattuali e scoperta causale →; per la differenza tra intervento e controfattuale anche 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 →.
Soluzione
Parte 1
Abduzione. I dati di Joe permettono di ricavare i valori delle esogene, invertendo le equazioni dall'alto verso il basso: Queste tre quantità descrivono «Joe in persona»: fattori esterni non spiegati dal modello.
1. . Azione: si sostituisce l'equazione di con la costante (modello ). Predizione: si risolve con le esogene di Joe: Nota: resta quello reale () perché è antecedente a : forzare non lo cambia; non entra più nel calcolo.
2. Altri controfattuali. Se fosse stato , anche cambia, perché con lo stesso :
- : e ;
- : e .
La differenza è l'effetto totale dei coefficienti sui due cammini, e (Controfattuali e scoperta causaleUn controfattuale chiede «cosa sarebbe successo a questo individuo se X fosse stato x?»: $Y_x(u)$ è il valore di Y nel modello $M_x$ (equazione di X sostituita da X=x) con le esogene fissate al valore $u$ dell'individuo. Si calcola in tre passi: abduzione (aggiornare $P(U)$ con l'evidenza, nel caso deterministico ricavare $u$ dai dati), azione (sostituire l'equazione di X con la costante), predizione (calcolare Y in $M_x$). Differenza con gli interventi: $P(Y\mid do(x))\equiv P(Y_x)$ è a livello di popolazione, ma in generale $P(Y\mid do(x),z)\ne P(Y_x\mid z)$ perché nel secondo il condizionamento è prima dell'intervento. Nei modelli lineari gaussiani i coefficienti di regressione di ogni variabile sui suoi genitori sono i coefficienti strutturali, e l'effetto causale totale è la somma dei prodotti dei coefficienti lungo i cammini non backdoor. Scoperta causale (algoritmo PC): si parte dal grafo completo non orientato, si toglie ogni arco X−Y con $X\perp!!!\perp Y\mid Z$ a $|Z|$ crescente (test di Fisher), si orientano i collider (Z mai nell'insieme separatore), poi si propaga l'orientamento; catena e fork non sono distinguibili (stessa classe di equivalenza di Markov). Assunzioni: aciclicità, sufficienza, Markov, fedeltà. Argomento del corso da 9 CFU.Controfattuali e scoperta causale →). In un modello lineare l'effetto individuale è uguale per tutti: per Joe come per la media.
Parte 2
3. Tabella. , ; (modello : , ):
| 1 | 1 | 2 | 2 | 3 | 4 |
| 2 | 2 | 4 | 3 | 4 | 5 |
| 3 | 3 | 6 | 4 | 5 | 6 |
4. Probabilità. Ogni evento controfattuale si traduce nell'insieme degli che lo rendono vero, e si sommano le :
- : solo per : .
- : per : .
- : per : e sì; per : no. Quindi .
- : per ; per . Solo : .
- Condizionale . Abduzione: l'evidenza è vera per (), con probabilità ; per e per . Azione: . Predizione: è per (: sì) e per (: no). Dunque
Controfattuale e intervento a confronto: (a livello di popolazione, dà ), mentre chiede, per gli stessi individui con , se il loro esito sarebbe migliorato: è una domanda sull'individuo, che richiede la conoscenza di .
Verifica con il codice
from fractions import Fraction as F
# ---------- Parte 1: Joe (caso deterministico) X = U_X, H = a X + U_H, Y = b X + c H + U_Y
a, b, c = 0.5, 0.7, 0.4
X, H, Y = 0.5, 1, 1.5 # dati di Joe
# 1. abduzione: si invertono le equazioni per ricavare le esogene di Joe
U_X = X
U_H = H - a * X
U_Y = Y - b * X - c * H
print("abduzione:", U_X, U_H, U_Y)
# 2-3. azione + predizione: si risolve il modello M_x (o M_h) con le stesse esogene
def modello(x=None, h=None):
x_ = U_X if x is None else x # equazione di X sostituita dalla costante, se do(x)
h_ = a * x_ + U_H if h is None else h # equazione di H sostituita dalla costante, se do(h)
return x_, h_, b * x_ + c * h_ + U_Y
for nome, kw in [("mondo reale", {}), ("H = 2", dict(h=2)), ("H = 0", dict(h=0)), ("X = 1", dict(x=1)), ("X = 0", dict(x=0))]:
x_, h_, y_ = modello(**kw)
print(f"{nome:12s} X = {x_:.3f} H = {h_:.3f} Y = {y_:.3f}")
# ---------- Parte 2: X = a U, Y = b X + U con a = b = 1 e U in {1, 2, 3}
pU = {1: F(1, 2), 2: F(1, 3), 3: F(1, 6)}
Xf = lambda u: u # X(u)
Yf = lambda u: Xf(u) + u # Y(u) = bX + U
Yx = lambda x, u: x + u # Y_x(u): modello M_x, X = x
def prob(cond, evid=lambda u: True):
"""P(cond | evid) = abduzione (si restringe P(U) a evid) + azione + predizione (cond usa Y_x)"""
den = sum(p for u, p in pU.items() if evid(u))
return sum(p for u, p in pU.items() if evid(u) and cond(u)) / den
print("P(Y2 = 3) =", prob(lambda u: Yx(2, u) == 3))
print("P(Y2 > 3) =", prob(lambda u: Yx(2, u) > 3))
print("P(Y2 > 3, Y1 < 4) =", prob(lambda u: Yx(2, u) > 3 and Yx(1, u) < 4))
print("P(Y1 < 4, Y-X > 1) =", prob(lambda u: Yx(1, u) < 4 and Yf(u) - Xf(u) > 1))
print("P(Y3 > Y | Y > 2) =", prob(lambda u: Yx(3, u) > Yf(u), lambda u: Yf(u) > 2))Output:
abduzione: 0.5 0.75 0.7499999999999999
mondo reale X = 0.500 H = 1.000 Y = 1.500
H = 2 X = 0.500 H = 2.000 Y = 1.900
H = 0 X = 0.500 H = 0.000 Y = 1.100
X = 1 X = 1.000 H = 1.250 Y = 1.950
X = 0 X = 0.000 H = 0.750 Y = 1.050
P(Y2 = 3) = 1/2
P(Y2 > 3) = 1/2
P(Y2 > 3, Y1 < 4) = 1/3
P(Y1 < 4, Y-X > 1) = 1/3
P(Y3 > Y | Y > 2) = 2/3Il modello «mondo reale» riproduce i dati di Joe (), segno che l'abduzione è corretta; è un errore di virgola mobile (). Le probabilità sono calcolate con Fraction, quindi esatte.
Versione ripasso
- Joe: , , ; dati , , (Controfattuali e scoperta causaleUn controfattuale chiede «cosa sarebbe successo a questo individuo se X fosse stato x?»: $Y_x(u)$ è il valore di Y nel modello $M_x$ (equazione di X sostituita da X=x) con le esogene fissate al valore $u$ dell'individuo. Si calcola in tre passi: abduzione (aggiornare $P(U)$ con l'evidenza, nel caso deterministico ricavare $u$ dai dati), azione (sostituire l'equazione di X con la costante), predizione (calcolare Y in $M_x$). Differenza con gli interventi: $P(Y\mid do(x))\equiv P(Y_x)$ è a livello di popolazione, ma in generale $P(Y\mid do(x),z)\ne P(Y_x\mid z)$ perché nel secondo il condizionamento è prima dell'intervento. Nei modelli lineari gaussiani i coefficienti di regressione di ogni variabile sui suoi genitori sono i coefficienti strutturali, e l'effetto causale totale è la somma dei prodotti dei coefficienti lungo i cammini non backdoor. Scoperta causale (algoritmo PC): si parte dal grafo completo non orientato, si toglie ogni arco X−Y con $X\perp!!!\perp Y\mid Z$ a $|Z|$ crescente (test di Fisher), si orientano i collider (Z mai nell'insieme separatore), poi si propaga l'orientamento; catena e fork non sono distinguibili (stessa classe di equivalenza di Markov). Assunzioni: aciclicità, sufficienza, Markov, fedeltà. Argomento del corso da 9 CFU.Controfattuali e scoperta causale →).
- Abduzione: , , .
- (azione: equazione di sostituita, resta ): .
- : , . : , . Differenza .
- Tabella (, , ): : ; : ; : .
- Probabilità con : ; ; (solo ); (solo ).
- Condizionale: : abduzione per ; sì per , no per ; risultato .
- Errori tipici: dimenticare l'abduzione e usare non aggiornata; cambiare quando si forza (non cambia, è antecedente); confondere con il condizionale controfattuale.