Gardner aveva un dono raro: era capace di trasformare formule matematiche e teoremi astrusi in storie coinvolgenti, giochi matematici e paradossi di ogni tipo. E come molti lettori di Query sapranno, è stato anche uno dei padri fondatori dello scetticismo scientifico moderno: ci ha insegnato che la matematica e la scienza sono il miglior antidoto contro l’irrazionalità e le fallacie del nostro cervello. Al suo ritiro, la rubrica passò a Douglas Hofstadter con un piccolo cambio di nome: “Temi metamagici”. Dal 1984, con l’avvento dei personal computer, il testimone passò a A.K. Dewdney e la rubrica divenne “Ricreazioni al calcolatore”. Armato del mio ZX Spectrum 48K, ogni mese la leggevo non meno avidamente di quelle di Gardner (avevo scoperto che in biblioteca avevano tutte le annate!). Dewdney ci mostrò che il computer non era solo una macchina per fare calcoli velocemente, ma un vero e proprio “microscopio per la mente”, un laboratorio virtuale dove testare e risolvere rompicapi, e inventare nuovi mondi. Da allora non ho mai smesso di risolvere giochi matematici e di scrivere programmi al calcolatore. Certo, anche di fare esperimenti di chimica, specialmente sul cibo, ma questa è un’altra storia, come chi legge Le Scienze sa bene.
Con questa nuova rubrica per Query vorrei provare a cimentarmi con quella duplice eredità, fondendola con gli attrezzi del mestiere del mio lavoro quotidiano di ricerca: le simulazioni (Monte Carlo e non) al calcolatore. In ogni puntata esploreremo un enigma: a volte sarà un problema antico di mille anni, altre volte un paradosso statistico o un tranello cognitivo. Lo affronteremo con carta e penna, ma anche scrivendo un programma.
Iniziamo.
Il paradosso di Randomia
La vostra cittadina, Randomia, è stata scelta casualmente per partecipare a uno studio epidemiologico per studiare una rara malattia, la “casualite”. Nel giro di pochi giorni, tutta la cittadinanza viene sottoposta a un test per scoprire chi l’ha contratta. Mentre fate la coda all’ufficio d’igiene in attesa del test, leggete sui cartelloni che la malattia colpisce solo una piccola percentuale di persone: una su 2000, lo 0,05% della popolazione. La vostra città ha 40.000 abitanti, quindi – ragionate – statisticamente solo una ventina di persone risulterà contagiata.
«Sarebbe davvero una sfortuna se proprio io fossi uno dei venti contagiati, con una probabilità così piccola», pensate. Un poco in apprensione, chiedete a un’infermiera notizie sul test. «Non si preoccupi, è completamente indolore e velocissimo. È stato appena sviluppato e ha un’accuratezza del 95%», vi rassicura l’infermiera.
È il vostro turno. Entrate nello studio medico, venite sottoposti al test e nel giro di pochi minuti avete il risultato: “positivo!”.
La fronte si imperla di sudore, un brivido scende lungo la spina dorsale, diventate pallidi ed esclamate: «Proprio a me doveva capitare? Possibile che debba essere io uno di quei venti? D’altra parte, l’infermiera ha detto che il test è accurato il 95% delle volte, quindi è poco probabile che si tratti di un errore».
Dovete preoccuparvi? Quanto? Qual è la probabilità di avere contratto davvero la malattia?
«Non si preoccupi troppo», vi dice l’infermiera, «dopo tutto la probabilità che abbiate veramente la malattia è molto bassa. Dovremo fare altri controlli».
«Se per lei il 95% è una probabilità bassa!» rispondete, un poco stizziti.
«Ma no, ora le spiego. Nessun test diagnostico è accurato al 100%. Questo significa che a volte il test non riesce a riconoscere la presenza della malattia in una persona effettivamente contagiata. Questi casi si chiamano falsi negativi. Se una persona ha la malattia, il test la rivela correttamente nel 95% dei casi.
Succede però anche l’opposto: il test può risultare positivo anche se il soggetto è sano. Questi casi si chiamano falsi positivi. Nel nostro caso, se una persona è sana, il 95% delle volte il test risulta negativo, ma nel 5% dei casi il test segnala un positivo: un falso positivo».
«Ma allora, qual è la probabilità che io abbia davvero la malattia?» chiedete, sempre più confusi.
«Per saperlo basta usare la formula delle probabilità condizionate di Bayes»
«Veramente con le formule matematiche non ho molta dimestichezza», balbettate.
«Va bene, allora segua il mio ragionamento: vogliamo calcolare la probabilità che, risultando positivo al test, abbia veramente la malattia. In una città di queste dimensioni ci sono mediamente 20 contagiati. Il test riconosce i veri positivi il 95% delle volte, quindi segnalerà correttamente 19 persone. Si ricorda però dei falsi positivi? Delle 39.980 persone sane, saranno il 5%, vale a dire 1999 persone. Mi segue?»
Siete ormai rapiti dalla vostra guida in statistica applicata alla medicina e annuite appena, a bocca aperta.
«Ricapitolando, 2018 suoi concittadini, lei compreso, sono risultati positivi al test, ma di questi solo 19 sono veramente malati. Questo significa che, in assenza di altre informazioni, lei ha meno dell’1% di probabilità di essere stato davvero contagiato. Faremo altri accertamenti, ma per ora non è il caso di preoccuparsi troppo…»
Riprendete il vostro colorito, e vi appuntate mentalmente di comprare un libro di statistica per saperne di più. «Ma… questo Bayes, è un medico?»
«Ahahah, no», risponde l’infermiera. «Thomas Bayes era un reverendo, e ha scoperto la formula che porta il suo nome nel 1763. Formula che non riguarda in particolare i test diagnostici. Ha validità generale, e si applica quando certi eventi ne condizionano altri, come nel suo caso, dove la probabilità di risultare positivo dipende dall’accuratezza del test e dall’effettivo contagio. Il teorema di Bayes si usa in moltissimi campi, persino in criminologia»
«Senta signorina, come si chiama? Posso invitarla a cena, così mi racconta di più? E dire che a scuola odiavo la matematica...»
Con carta e penna
È sempre abbastanza difficile, per chi non ha dimestichezza con la teoria delle probabilità, dare una stima intuitiva della probabilità di un evento che dipende da altri (la cosiddetta probabilità condizionata). Per risolvere problemi come quello precedente, è utilissimo fare ricorso a una semplice tabella:
| Test positivo | Test negativo | TOTALE | |
| Malati | VP = 19 | FN = 1 | 20 |
| Sani | FP = 1999 | VN = 37.981 | 39.980 |
| TOTALE | 2018 | 37.982 | 40.000 |
Sappiamo che la malattia colpisce lo 0,05% dei casi. A Randomia ci saranno quindi in media 20 malati e 39.980 sani. Possiamo cominciare a riempire l’ultima colonna. Sappiamo poi che il test identifica correttamente i malati e i sani il 95% delle volte: i Veri Positivi (VP) sono 19, mentre i Veri Negativi (VN) sono 37.981. Riempiamo quindi le caselle VP e VN, e per differenza rispetto al totale completiamo le restanti colonne.
Abbiamo ora tutti i dati che ci servono per risolvere il problema a colpo d’occhio. 2018 cittadini di Randomia sono risultati positivi al test. Se voi siete tra questi, e in assenza di altre informazioni, è possibile che abbiate la malattia in 19 casi su 2018, pari allo 0,9% circa. È molto più probabile che siate sani come un pesce (1999 casi su 2018, il 99,1%).
Il teorema di Bayes permette tra le altre cose di calcolare direttamente questa probabilità senza dover ricostruire la tabella ogni volta.
Il teorema di Bayes in azione
Se vogliamo calcolare la probabilità desiderata in un unico passaggio, possiamo usare la formula del reverendo Bayes. Non lasciatevi spaventare dai simboli: una volta capito il meccanismo, si tratta solo di fare tre moltiplicazioni e una divisione.
La formula di Bayes, applicata al nostro caso medico, si scrive così:
Vediamo cosa significano questi simboli:
- P(M | positivo) è quello che vogliamo scoprire. Si legge “probabilità di essere malati, dato un test positivo”;
- P(M) è la probabilità a priori di essere malati. A Randomia è lo 0,05%, vale a dire 0,0005;
- P(S) è la probabilità di essere sani (il 99,95%, o 0,9995);
- P(positivo | M) è l’accuratezza del test quando trova un vero malato (i veri positivi). L’infermiera ci ha detto che è il 95% (0,95);
- P(positivo | S) è la probabilità che il test dia un falso positivo su una persona sana. Essendo il test accurato al 95%, sbaglierà nel 5% dei casi (0,05).
Il denominatore è semplicemente il valore di P(positivo) tenendo conto sia dei sani sia dei malati.
Se guardate con attenzione la formula, noterete che stiamo semplicemente dividendo i veri positivi per il totale dei positivi (veri positivi + falsi positivi), esattamente come abbiamo fatto nell’ultima riga della nostra tabella. Vediamo i vari passaggi:
- 1. consideriamo i veri positivi (il numeratore): moltiplichiamo l’accuratezza del test per la rarità della malattia:
P(positivo | M) · P(M) = 0,95 · 0,0005 = 0,000475
- 2. consideriamo i falsi positivi: moltiplichiamo il margine di errore del test per il numero di persone sane:
P(positivo | S) · P(S) = 0,05 · 0,9995 = 0,049975
- 3. applichiamo la formula finale: dividiamo i veri positivi per il totale di tutti i test risultati positivi:
Il risultato è 0,00941, vale a dire lo 0,94%. In sole tre righe di calcolo, la formula di Bayes ci porta alla conclusione: avete meno dell’1% di probabilità di avere realmente la “casualite”.
Nella pratica, spesso le soglie di sensibilità (quanti veri positivi il test riesce a identificare) e di specificità (quanti veri negativi il test riesce a identificare) sono strettamente dipendenti e non possono essere variate in modo indipendente.
Questo porta all’apparente paradosso illustrato dall’infermiera: un test diagnostico molto accurato utilizzato per rilevare una malattia piuttosto rara non è in grado di stabilire se una persona è infetta senza altri test di conferma.
Nel caso di una malattia contagiosa, per esempio, i costi sociali causati dai falsi negativi possono essere altissimi. È molto importante identificare e isolare con la maggiore precisione possibile ogni singola persona contagiosa per evitare un’epidemia. I test sono allora deliberatamente tarati per diminuire il più possibile il rischio dei falsi negativi (il test si fa scappare solo 1 malato su 20). Purtroppo, però, questo abbassamento della soglia aumenta fisiologicamente il numero di falsi positivi tra i sani, con le conseguenze (e gli spaventi) che abbiamo visto.
Il problema al calcolatore
Non vi fidate della logica dell’infermiera, della tabella e men che meno della formula di Bayes?
Nessun problema, è per questo che usiamo i calcolatori. Possiamo simulare il problema e stimare direttamente la soluzione.
Il nostro programma creerà i 40.000 abitanti assegnando la malattia casualmente con le probabilità date, eseguirà i 40.000 test diagnostici e poi conterà quanti veri positivi sono stati trovati rispetto ai positivi totali. Per ridurre le fluttuazioni statistiche, chiederemo al computer di simulare 1.000 città diverse, testando 40 milioni di pazienti in pochi secondi.
Prima di lanciare la nostra simulazione, una piccola nota tecnica per chi volesse cimentarsi a casa: in questa rubrica useremo il linguaggio di programmazione C nello standard 99. Perché proprio questo linguaggio, nato negli anni ’70, e non qualcosa di più moderno?
I motivi sono tre. Innanzitutto, il C è veloce ed efficiente: simulare 40 milioni di pazienti richiederà una frazione di secondo. In secondo luogo, è un linguaggio molto compatto: la sua sintassi è semplice (basata su parentesi graffe e cicli for e if) ed è molto simile a quella di molti linguaggi moderni. Vi basteranno pochissime modifiche per tradurlo nel vostro linguaggio preferito, che sia Java, Python, C++ o Go. Infine, gli strumenti per scrivere ed eseguire programmi in C (i compilatori) sono gratuiti, open-source e preinstallati su moltissimi sistemi operativi, oppure utilizzabili direttamente online via browser senza installare nulla.
Se non sapete programmare ma volete provare lo stesso a simulare il problema, magari cambiando qualche dato, potete usare compilatori online gratuiti. Vi basterà visitare siti web come onlinegdb.com o programiz.com, incollare il listato che trovate in queste pagine, ed eseguire il codice. In pochi secondi, avrete i risultati della vostra simulazione.
Da ultimo: per abitudine uso l’inglese per i nomi di variabili e le funzioni, ma voi potete fare come preferite.
Per accedere al listato cliccate qui
Eseguite il programma e verificate che i risultati siano simili a quelli della teoria.
Una sfida per i lettori: il problema dei taxi
Ecco un problema del tutto analogo nella sua struttura al caso dei test diagnostici appena visto. Potete cercare di risolverlo costruendo una tabella simile a quella dell’infermiera, oppure modificando le costanti del codice C fornito in questo articolo per simulare la situazione al calcolatore.
Sempre nella città di Randomia, una persona è testimone di un crimine che coinvolge un taxi. Si presenta diligentemente alla stazione di polizia e afferma che il taxi coinvolto nel crimine era di colore blu. La polizia, da precedenti studi statistici, sa che i testimoni spesso riportano in buona fede particolari errati (a causa del buio e dello stress), e stima all’80% la probabilità che un testimone possa riferire fedelmente il colore corretto. La polizia è anche a conoscenza di un altro fatto fondamentale per Randomia: l’85% dei taxi della città è verde, mentre il rimanente 15% è blu.
Qual è la probabilità che un taxi blu sia veramente coinvolto nel crimine? Molte persone, sapendo che l’affidabilità del testimone è dell’80%, risponderebbero d’istinto che anche la probabilità che il taxi sia blu è dell’80%…ma ormai dovreste sapere che il ragionamento è errato!
È il celebre problema del taxi, ideato negli anni ’70 dal premio Nobel Daniel Kahneman e da Amos Tversky, i padri dello studio sui bias cognitivi.
Alla prossima.