Salta al contenuto
Note per Studenti Esercizio - Diagnosi COVID con la regola di Bayes (laboratorio 5)

Esercizio - Diagnosi COVID con la regola di Bayes (laboratorio 5)

In questa pagina 3

Testo (laboratorio 5, Probability and Bayesian networks, part A, corso di Intelligenza Artificiale, Ing. dell'Informazione UniPD). Si vuole calcolare la probabilità di avere il COVID-19 in base a tre possibili sintomi: febbre alta, tosse continua, perdita di gusto e olfatto. La probabilità di essere infetti è 1%1\% e, in tal caso, le probabilità di sviluppare i sintomi sono:

  • febbre alta: 10%10\% con COVID, solo 2%2\% senza;
  • tosse continua: 20%20\% con COVID, solo 5%5\% senza;
  • perdita di gusto e olfatto: 15%15\% con COVID, solo 0,1%0{,}1\% senza.

Domanda: qual è la probabilità di avere il COVID data la presenza di tutti e tre i sintomi?


Formalizzazione

Quattro variabili booleane: malattia DD, febbre FF, tosse CC, perdita di gusto/olfatto LL. Lettera minuscola = valore vero (dd significa D=trueD=\text{true}, ¬d\neg d significa D=falseD=\text{false}). Si cerca P(d∣f,c,l)P(d\mid f,c,l).

Dati del problema, scritti come distribuzioni: P(D)=⟨0,01; 0,99⟩,P(F∣d)=⟨0,1; 0,9⟩, P(F∣¬d)=⟨0,02; 0,98⟩,\mathbf P(D)=\langle0{,}01;\ 0{,}99\rangle,\quad \mathbf P(F\mid d)=\langle0{,}1;\ 0{,}9\rangle,\ \mathbf P(F\mid\neg d)=\langle0{,}02;\ 0{,}98\rangle, P(C∣d)=⟨0,2; 0,8⟩, P(C∣¬d)=⟨0,05; 0,95⟩,P(L∣d)=⟨0,15; 0,85⟩, P(L∣¬d)=⟨0,001; 0,999⟩.\mathbf P(C\mid d)=\langle0{,}2;\ 0{,}8\rangle,\ \mathbf P(C\mid\neg d)=\langle0{,}05;\ 0{,}95\rangle,\quad \mathbf P(L\mid d)=\langle0{,}15;\ 0{,}85\rangle,\ \mathbf P(L\mid\neg d)=\langle0{,}001;\ 0{,}999\rangle.

Soluzione

Passo 1: regola di Bayes. Dalla regola di Bayes (Incertezza - probabilità, regola di Bayes e indipendenza condizionataUn agente con osservazioni parziali non può usare regole logiche rigide ("mal di denti implica carie" è falso): usa la probabilità come grado di credenza e, con la teoria dell'utilità, sceglie l'azione con utilità attesa massima. Strumenti: distribuzione congiunta completa (tabella di $2^n$ valori), marginalizzazione $P(Y\mid e)=\alpha\sum_h P(Y,e,h)$ con costante di normalizzazione $\alpha=1/P(e)$, regola del prodotto $P(a,b)=P(a\mid b)P(b)$, regola di Bayes $P(\text{causa}\mid\text{effetto})=\frac{P(\text{effetto}\mid\text{causa})P(\text{causa})}{P(\text{effetto})}$ e indipendenza condizionata $P(a,b\mid c)=P(a\mid c)P(b\mid c)$, che permette di scomporre la congiunta in tabelle più piccole. Un test con sensibilità 73% e falsi positivi 12% su una malattia con prior 1/700 dà una probabilità a posteriori di appena 0,9%.Incertezza - probabilità, regola di Bayes e indipendenza condizionata →): P(d∣f,c,l)=P(f,c,l∣d) P(d)P(f,c,l).P(d\mid f,c,l)=\frac{P(f,c,l\mid d)\,P(d)}{P(f,c,l)}.

Passo 2: numeratore. Dato DD i tre sintomi sono condizionalmente indipendenti (se so di avere il COVID, la febbre non cambia la probabilità della tosse): la rete è un naive Bayes D→FD\to F, D→CD\to C, D→LD\to L. Quindi P(f,c,l∣d)P(d)=P(f∣d)P(c∣d)P(l∣d)P(d)=0,1⋅0,2⋅0,15⋅0,01=3⋅10−5.P(f,c,l\mid d)P(d)=P(f\mid d)P(c\mid d)P(l\mid d)P(d)=0{,}1\cdot0{,}2\cdot0{,}15\cdot0{,}01=3\cdot10^{-5}.

Passo 3: denominatore. Legge delle probabilità totali sui due valori di DD: P(f,c,l)=P(f,c,l∣d)P(d)+P(f,c,l∣¬d)P(¬d)=3⋅10−5+0,02⋅0,05⋅0,001⋅0,99=3⋅10−5+9,9⋅10−7=3,099⋅10−5.P(f,c,l)=P(f,c,l\mid d)P(d)+P(f,c,l\mid\neg d)P(\neg d)=3\cdot10^{-5}+0{,}02\cdot0{,}05\cdot0{,}001\cdot0{,}99=3\cdot10^{-5}+9{,}9\cdot10^{-7}=3{,}099\cdot10^{-5}.

Passo 4: risultato. P(d∣f,c,l)=3⋅10−53,099⋅10−5=0,968.P(d\mid f,c,l)=\frac{3\cdot10^{-5}}{3{,}099\cdot10^{-5}}=0{,}968. Quasi 97%97\%, anche se il prior è 1%1\%: la perdita di gusto e olfatto (150150 volte più probabile con il COVID) pesa moltissimo.

Come cresce la credenza. Aggiungendo un sintomo alla volta (stessa formula con meno fattori): nessun sintomo 0,010{,}01; solo febbre 0,04810{,}0481; febbre e tosse 0,16810{,}1681; tutti e tre 0,96810{,}9681. I rapporti di verosimiglianza (P(sintomo∣d)/P(sintomo∣¬d)P(\text{sintomo}\mid d)/P(\text{sintomo}\mid\neg d)) sono 55, 44 e 150150, con prodotto 30003000; moltiplicato per l'odds a priori 0,01/0,990{,}01/0{,}99 dà l'odds a posteriori 30,330{,}3, cioè probabilità 30,3/31,3=0,96830{,}3/31{,}3=0{,}968.

Codice

python
import numpy as np

p_d = np.array([0.01, 0.99])                     # P(D) = <P(d), P(non d)>
# riga 0: malato, riga 1: non malato; colonna 0: sintomo presente, colonna 1: assente
p_f = np.array([[0.10, 0.90], [0.02, 0.98]])     # P(F | D)
p_c = np.array([[0.20, 0.80], [0.05, 0.95]])     # P(C | D)
p_l = np.array([[0.15, 0.85], [0.001, 0.999]])   # P(L | D)

num = p_f[0, 0] * p_c[0, 0] * p_l[0, 0] * p_d[0]   # P(f|d)P(c|d)P(l|d)P(d)
alt = p_f[1, 0] * p_c[1, 0] * p_l[1, 0] * p_d[1]   # P(f|~d)P(c|~d)P(l|~d)P(~d)
print(num, alt)
print(num / (num + alt))

Output: 3.0000000000000004e-05 9.9e-07 e 0.9680542110358179. Verificato anche per enumerazione sulle 1616 righe della congiunta: P(f,c,l)=3,099⋅10−5P(f,c,l)=3{,}099\cdot10^{-5} e P(d∣f,c,l)=0,968054P(d\mid f,c,l)=0{,}968054.

Versione ripasso

  • Dati: P(d)=0,01P(d)=0{,}01; P(f∣d)=0,1P(f\mid d)=0{,}1, P(f∣¬d)=0,02P(f\mid\neg d)=0{,}02; P(c∣d)=0,2P(c\mid d)=0{,}2, P(c∣¬d)=0,05P(c\mid\neg d)=0{,}05; P(l∣d)=0,15P(l\mid d)=0{,}15, P(l∣¬d)=0,001P(l\mid\neg d)=0{,}001. Cerco P(d∣f,c,l)P(d\mid f,c,l).
  • Bayes (regola di BayesP(d∣e)=P(e∣d)P(d)/P(e)P(d\mid e)=P(e\mid d)P(d)/P(e)Incertezza - probabilità, regola di Bayes e indipendenza condizionata →) e indipendenza condizionatadato DD i sintomi non si influenzano: P(f,c,l∣d)=P(f∣d)P(c∣d)P(l∣d)P(f,c,l\mid d)=P(f\mid d)P(c\mid d)P(l\mid d).
  • Numeratore: 0,1⋅0,2⋅0,15⋅0,01=3⋅10−50{,}1\cdot0{,}2\cdot0{,}15\cdot0{,}01=3\cdot10^{-5}. Denominatore: 3⋅10−5+0,02⋅0,05⋅0,001⋅0,99=3,099⋅10−53\cdot10^{-5}+0{,}02\cdot0{,}05\cdot0{,}001\cdot0{,}99=3{,}099\cdot10^{-5}.
  • Risultato: P(d∣f,c,l)=0,968P(d\mid f,c,l)=0{,}968. Un sintomo alla volta: 0,01→0,048→0,168→0,9680{,}01\to0{,}048\to0{,}168\to0{,}968.
  • Errori tipici: dimenticare di sommare anche il caso ¬d\neg d al denominatore; usare P(¬f∣d)P(\neg f\mid d) invece di P(f∣d)P(f\mid d); scambiare P(d∣f)P(d\mid f) con P(f∣d)P(f\mid d).

Teoria collegata