Un’iniziazione alla modellizzazione dell’andamento del Covid-19 con Python
Di questi tempi il Covid e il suo andamento giorno per giorno sono stati argomento costante delle nostre conversazioni e dei nostri pensieri. Spesso abbiamo avuto anche il desiderio o l’esigenza di poter operare previsioni per i giorni futuri. Il seguito fornirà un approccio prettamente didattico per andare a soddisfare questa esigenza che potremmo sentire. Verranno introdotti due tipi di descrizione, e si fornirà anche una base matematica per iniziare a pensare come effettivamente lo studioso possa approcciarsi al problema col calcolatore. Inoltre, verrà reso disponibile anche una sorta di tutorial per proseguire nel raffinamento del modello in esame.
-Vari tipi di modellizzazione
I fisici sono specializzati nell’analisi dei dati e nella modellizzazione dei trend. Sono tanti i colleghi che hanno messo a frutto le arti imparate a fatica per il bene della comunità e dare una descrizione dei trend della pandemia che oramai è l’argomento principe delle nostre vite. Nella mia ottica, due sono i tipi principali di descrizione:
-
Un modello non dipendente dal tempo, con un numero arbitrario di parametri, che sicuramente descriverà i dati se il numero di parametri liberi è sufficientemente elevato. Sfortunatamente questa tipologia di modelli non ha potere preditivo su fenomeni intrinsicamente dipendenti dal tempo.
-
Un modello dipendente dal tempo, che deve per forza essere descritto da equazioni differenziali ordinarie (ODE) nel tempo.
– Il più semplice dei modelli SIR
Il modello SIR (descritto ad esempio in: https://arxiv.org/pdf/2005.08724.pdf ), è il modello forse più semplice per la descrizione di un fenomeno pandemico. Il modello può essere descritto con il seguente sistema di equazioni differenziali:
Dove la popolazione di N individui è divisa in tre categorie: gli S, suscettibili alla diffusione, gli I infetti, e gli R, i rimossi, per sopraggiunta immunità o per, ehm, mancata immunità. Il modello può essere ancora semplificato con semplici ipotesi. Questo può essere utile per fini puramente didattici. Infatti, può essere un primo esercizio per avvicinare il lettore alle equazioni differenziali, o a Python, che oggi sfrutteremo per risolverle al nostro posto!
Con l’assunto che i dati si riferiscano ad un limitato lasso temporale e.g. due settimane, che la popolazione sia grande (si spera!) e che il numero di infettati al giorno non sia di ordine di grandezza comparabile alla popolazione e.g. 60 milioni di abitanti e 100 mila infettati al giorno sembra ancora ragionevole. Ma questo è esattamente il caso dell’Italia! Che fortuna. Si può allora semplificare ancora il nostro problema puramente didattico a:
– Chiediamo aiuto a Python
Ho prodotto un codice in Python, veramente semplice, che risolva il problema in esame. Il codice è in Jupyter-Notebook, disponibile qui: https://github.com/siragoni/Miscellaneous/blob/main/SimplifiedSIR.ipynb
Usiamo Numpy e Scipy, delle librerie open-source di Python:
Veramente semplice.
Applicando le funzioni di Scipy si possono prendere i dati relativi al period 26 febbraio – 11 marzo per decessi e infezioni e risolvere il tutto. Si ottiene una descrizione abbastanza buona del trend (fit) anche con un modello così semplice! Siete ora in grado di complicare il modello a vostro piacimento per arrivare alla descrizione che più vi aggrada…
Un’iniziazione alla modellizzazione dell’andamento del Covid-19 con Python
Di questi tempi il Covid e il suo andamento giorno per giorno sono stati argomento costante delle nostre conversazioni e dei nostri pensieri. Spesso abbiamo avuto anche il desiderio o l’esigenza di poter operare previsioni per i giorni futuri. Il seguito fornirà un approccio prettamente didattico per andare a soddisfare questa esigenza che potremmo sentire. Verranno introdotti due tipi di descrizione, e si fornirà anche una base matematica per iniziare a pensare come effettivamente lo studioso possa approcciarsi al problema col calcolatore. Inoltre, verrà reso disponibile anche una sorta di tutorial per proseguire nel raffinamento del modello in esame.
-Vari tipi di modellizzazione
I fisici sono specializzati nell’analisi dei dati e nella modellizzazione dei trend. Sono tanti i colleghi che hanno messo a frutto le arti imparate a fatica per il bene della comunità e dare una descrizione dei trend della pandemia che oramai è l’argomento principe delle nostre vite. Nella mia ottica, due sono i tipi principali di descrizione:
-
Un modello non dipendente dal tempo, con un numero arbitrario di parametri, che sicuramente descriverà i dati se il numero di parametri liberi è sufficientemente elevato. Sfortunatamente questa tipologia di modelli non ha potere preditivo su fenomeni intrinsicamente dipendenti dal tempo.
-
Un modello dipendente dal tempo, che deve per forza essere descritto da equazioni differenziali ordinarie (ODE) nel tempo.
– Il più semplice dei modelli SIR
Il modello SIR (descritto ad esempio in: https://arxiv.org/pdf/2005.08724.pdf ), è il modello forse più semplice per la descrizione di un fenomeno pandemico. Il modello può essere descritto con il seguente sistema di equazioni differenziali:
Dove la popolazione di N individui è divisa in tre categorie: gli S, suscettibili alla diffusione, gli I infetti, e gli R, i rimossi, per sopraggiunta immunità o per, ehm, mancata immunità. Il modello può essere ancora semplificato con semplici ipotesi. Questo può essere utile per fini puramente didattici. Infatti, può essere un primo esercizio per avvicinare il lettore alle equazioni differenziali, o a Python, che oggi sfrutteremo per risolverle al nostro posto!
Con l’assunto che i dati si riferiscano ad un limitato lasso temporale e.g. due settimane, che la popolazione sia grande (si spera!) e che il numero di infettati al giorno non sia di ordine di grandezza comparabile alla popolazione e.g. 60 milioni di abitanti e 100 mila infettati al giorno sembra ancora ragionevole. Ma questo è esattamente il caso dell’Italia! Che fortuna. Si può allora semplificare ancora il nostro problema puramente didattico a:
– Chiediamo aiuto a Python
Ho prodotto un codice in Python, veramente semplice, che risolva il problema in esame. Il codice è in Jupyter-Notebook, disponibile qui: https://github.com/siragoni/Miscellaneous/blob/main/SimplifiedSIR.ipynb
Usiamo Numpy e Scipy, delle librerie open-source di Python:
Veramente semplice.
Applicando le funzioni di Scipy si possono prendere i dati relativi al period 26 febbraio – 11 marzo per decessi e infezioni e risolvere il tutto. Si ottiene una descrizione abbastanza buona del trend (fit) anche con un modello così semplice! Siete ora in grado di complicare il modello a vostro piacimento per arrivare alla descrizione che più vi aggrada…