Salta al contenuto
Note per Studenti Esercizio - Controfattuali di Joe e della tabella di U (slide del corso)

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 XX sono offerte agli studenti per migliorare lo studio a casa HH e il voto d'esame YY, secondo l'SCM X=UX,H=aX+UH,Y=bX+cH+UY,a=0.5, b=0.7, c=0.4.X=U_X,\qquad H=aX+U_H,\qquad Y=bX+cH+U_Y,\qquad a=0.5,\ b=0.7,\ c=0.4. Per lo studente Joe i dati dicono X=0.5X=0.5, H=1H=1, Y=1.5Y=1.5.

  1. Quale sarebbe stato il voto di Joe se avesse raddoppiato lo studio a casa (H=2H=2)?
  2. E se avesse avuto il tutoraggio massimo (X=1X=1)? E nessun tutoraggio (X=0X=0)?

Parte 2: la tabella. Nell'SCM X=aUX=aU, Y=bX+UY=bX+U con a=b=1a=b=1, U∈{1,2,3}U\in\{1,2,3\} e P(U=1)=12P(U=1)=\frac12, P(U=2)=13P(U=2)=\frac13, P(U=3)=16P(U=3)=\frac16: 3. Scrivere la tabella di tutti i controfattuali Yx(u)Y_x(u), x=1,2,3x=1,2,3. 4. Calcolare P(Y2=3)P(Y_2=3), P(Y2>3)P(Y_2>3), P(Y2>3,Y1<4)P(Y_2>3,Y_1<4), P(Y1<4, Y−X>1)P(Y_1<4,\ Y-X>1) e P(Y3>Y∣Y>2)P(Y_3>Y\mid Y>2).

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: UX=X=0.5,UH=H−aX=1−0.5⋅0.5=0.75,UY=Y−bX−cH=1.5−0.7⋅0.5−0.4⋅1=0.75.U_X=X=0.5,\qquad U_H=H-aX=1-0.5\cdot0.5=0.75,\qquad U_Y=Y-bX-cH=1.5-0.7\cdot0.5-0.4\cdot1=0.75. Queste tre quantità descrivono «Joe in persona»: fattori esterni non spiegati dal modello.

1. H=2H=2. Azione: si sostituisce l'equazione di HH con la costante H=2H=2 (modello MH=2M_{H=2}). Predizione: si risolve YY con le esogene di Joe: YH=2=bX+c⋅2+UY=0.7⋅0.5+0.4⋅2+0.75=0.35+0.8+0.75=1.9.Y_{H=2}=bX+c\cdot2+U_Y=0.7\cdot0.5+0.4\cdot2+0.75=0.35+0.8+0.75=1.9. Nota: XX resta quello reale (0.50.5) perché XX è antecedente a HH: forzare HH non lo cambia; UHU_H non entra più nel calcolo.

2. Altri controfattuali. Se XX fosse stato xx, anche HH cambia, perché H=aX+UHH=aX+U_H con lo stesso UH=0.75U_H=0.75:

  • X=1X=1: H=0.5⋅1+0.75=1.25H=0.5\cdot1+0.75=1.25 e YX=1=0.7⋅1+0.4⋅1.25+0.75=0.7+0.5+0.75=1.95Y_{X=1}=0.7\cdot1+0.4\cdot1.25+0.75=0.7+0.5+0.75=1.95;
  • X=0X=0: H=0.75H=0.75 e YX=0=0+0.4⋅0.75+0.75=1.05Y_{X=0}=0+0.4\cdot0.75+0.75=1.05.

La differenza YX=1−YX=0=1.95−1.05=0.9=b+ac=0.7+0.5⋅0.4Y_{X=1}-Y_{X=0}=1.95-1.05=0.9=b+ac=0.7+0.5\cdot0.4 è l'effetto totale dei coefficienti sui due cammini, X→YX\to Y e X→H→YX\to H\to Y (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. X(u)=uX(u)=u, Y(u)=bX+u=2uY(u)=bX+u=2u; Yx(u)=x+uY_x(u)=x+u (modello MxM_x: X=xX=x, Y=x+UY=x+U):

uu X(u)X(u) Y(u)Y(u) Y1(u)Y_1(u) Y2(u)Y_2(u) Y3(u)Y_3(u)
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 uu che lo rendono vero, e si sommano le P(u)P(u):

  • P(Y2=3)P(Y_2=3): Y2(u)=3Y_2(u)=3 solo per u=1u=1: 12\frac12.
  • P(Y2>3)P(Y_2>3): Y2=4,5>3Y_2=4,5>3 per u=2,3u=2,3: 13+16=12\frac13+\frac16=\frac12.
  • P(Y2>3, Y1<4)P(Y_2>3,\ Y_1<4): per u=2u=2: Y2=4>3Y_2=4>3 e Y1=3<4Y_1=3<4 sì; per u=3u=3: Y1=4Y_1=4 no. Quindi 13\frac13.
  • P(Y1<4, Y−X>1)P(Y_1<4,\ Y-X>1): Y−X=u>1Y-X=u>1 per u=2,3u=2,3; Y1<4Y_1<4 per u=1,2u=1,2. Solo u=2u=2: 13\frac13.
  • Condizionale P(Y3>Y∣Y>2)P(Y_3>Y\mid Y>2). Abduzione: l'evidenza Y>2Y>2 è vera per u=2,3u=2,3 (Y=4,6Y=4,6), con probabilità 13+16=12\frac13+\frac16=\frac12; P(U∣Y>2)=23P(U\mid Y>2)=\frac23 per u=2u=2 e 13\frac13 per u=3u=3. Azione: X=3X=3. Predizione: Y3Y_3 è 55 per u=2u=2 (5>45>4: sì) e 66 per u=3u=3 (6>66>6: no). Dunque P(Y3>Y∣Y>2)=P(U=2)P(U=2)+P(U=3)=1/31/2=23.P(Y_3>Y\mid Y>2)=\frac{P(U=2)}{P(U=2)+P(U=3)}=\frac{1/3}{1/2}=\frac23.

Controfattuale e intervento a confronto: P(Y3>2)=1P(Y_3>2)=1 (a livello di popolazione, do(X=3)do(X=3) dà Y=3+u≥4Y=3+u\ge4), mentre P(Y3>Y∣Y>2)=23P(Y_3>Y\mid Y>2)=\frac23 chiede, per gli stessi individui con Y>2Y>2, se il loro esito sarebbe migliorato: è una domanda sull'individuo, che richiede la conoscenza di UU.

Verifica con il codice

python
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/3

Il modello «mondo reale» riproduce i dati di Joe (Y=1.5Y=1.5), segno che l'abduzione è corretta; UY=0.7499…U_Y=0.7499\ldots è un errore di virgola mobile (0.750.75). Le probabilità sono calcolate con Fraction, quindi esatte.

Versione ripasso

Teoria collegata