Pozdrav svima.

Prije ovoga, Matija je napisao dobar članak o korištenju Jupyter Notebook-a.

U svojem zadnjem članku sam napisao i pojasnio jednostavnu regresiju pomoću podataka korona (COVID-19) virusa.

Ovo je nastavak na taj post, u kojem će fokus biti na modelu koji se koristi za predviđanje epidemija. Kao što sam obećao (crno na bijelo u tom postu) ovaj nastavak zamišljen je kao kulminacija (da, znam da su vam ovi tekstovi JAKO uzbudljivi) ove serije članaka. U međuvremenu sam dobio i par prijedloga što bi se dalje moglo napraviti.

Netko je predložio da bi trebali usporediti podatke “obične” gripe i pogledati kako se to razlikuje. Ne mogu naći gdje je taj komentar i tko ga je napisao, ali sjećam se da sam vidio taj komentar na Facebook-u. Ili sam potpuno poludio, što je isto moguće.

Nikola Prpić je na Facebook-u predložio da bi se trebalo pozabaviti modeliranjem širenja u društvu koristeći “network theory” i traženje “Nash ravnoteže” u različitim strategijama borbe protiv širenja virusa. Čuo sam (i samo čuo, ne znam puno o tome) i za jedno i za drugo, ali baš zato što sam čuo za jedno i za drugo, nisam siguran da li želim zaviriti u tu zečju rupu (možda ovo nije hrvatski izraz?).

Uvod

Moje ime je Kristijan Šarić i ja sam programer. Nisam stručnjak za viruse, nisam epidemiolog, ne smatram se stručnjakom ni u čemu, ali sam vjerojatno po nekim kategorijama “stručnjak za IT” (štogod to bilo). Sve što napišem i pokažem ovdje nije mišljenje osobe koja je stručna za korona virus, nego je moj pokušaj da samome sebi objasnim što se to događa i kako se brzo taj virus širi (i to podijelim sa vama).

Isto tako, ljudi koji su uvjereni da bi trebali pustiti samo priznate stručnjake da se bave ovom situacijom, ne vide jedan ključan problem u takvom pristupu. Mediji koji nisu savršeni, ponekada nisu objektivni, i nekada prenesu neprovjerenu informaciju. Kao i pojedinci koji nisu dovoljno upućeni i šire priče kao da ako staviš kupus na lijevu nadlakticu ne možeš dobiti korona virus. Jedini problem je, jeli, što moraš šetati uokolo s kupusom na ruci.

Ovo je pokušaj da se situaciju objasni na temelju podataka i činjenica, i ne mogu naglasiti koliko mislim da je to bitno. Iako (uvijek!) postoji količina osobne interpretacije, fokus je na grafovima i podatcima koji stoje iza njih. Pozivam sve zainteresirane da se uključe, da koriste podatke i ove grafove za izvor informacija i da daju (zanimljive) ideje kako bi se ovo moglo poboljšati. Siguran sam da postoje ljudi koji mogu ovo napraviti puno bolje i koji znaju što rade, tako da ovo može nekome biti početna točka. Svi mogu pokrenuti sve ovo što sam ja pokrenuo i dobiti će iste rezultate. Ako nađete neke greške, slobodno nam se javite.

Kao što sam obećao, sav sadržaj dostupan je svima ovdje.

U drugom blog postu, fokus je bio na regresiji, a u ovom postu pokušavam pojasniti kako ovaj rast napreduje pomoću modela. Ovaj model, SIR, i to ne onaj koji jedete, često se koriste za modeliranje epidemija.

Ova verzija jako je neprecizna i mislim da je ne treba uzimati za ozbiljno.

Imajte na umu da podatci koje koristimo malo kaskaju za potvrđenim podatcima ali su i isto tako možda malo točniji baš zbog toga.

Jesam zaboravio naglasiti da je ovo samo projekcija, a ne istina?

Korišteni podatci

Podatke koje smo koristili možete vidjeti ovdje.

Ovi podatci su sa “Johns Hopkins University Center for Systems Science and Engineering” ili kraće “Johns Hopkins CSSE”. Ažuriraju se na dnevnoj bazi.

Sa time da su u zadnjoj verziji izmijenili format podataka i nazive datoteke, tako da zadnje podatke koje smo koristili su od 27.03.2020, dok notebook vizualizacije koristi starije podatke od 25.03.2020. Više informacija ovdje. Svaki dan kada se podatci ažuriraju, možete osvježiti podatke i dobiti nove vizualizacije.

Situacija u Hrvatskoj i okolici

Pogledajmo prvo ove reciklirane grafove sa najnovijim podatcima i pogledajmo regresijame koje smo dobili zadnji put. Sve ovo je dodatno pojašnjeno u zadnjem članku. Tek nakon toga ćemo se baciti na SIR model i rezultate koje sam dobio.

Ali prije toga, dodao sam interaktivnost u Jupyter Notebook. Uuuuuu. 

Sada možete pomicati slider i dobivati različite rezultate. Vau. 

Tako da sada možete pogledati koje zemlje imaju više od N zaraženih, gdje je N vrijednost koju možete birati pomoću pomicanja ovog gumba.

Šalu na stranu, ovo je jako korisno ako želite interaktivno saznati neke podatke ili prikazati neke grafove. To ćemo koristiti kasnije u SIR modelu da dobijemo lijepe slika koje možemo onda opisati. Ako ste kada koristili Mathematicu, ovo je bila jedna od stvari koja mi je bila jako lijepa, i možete je koristiti u Jupyter Notebook-u. Da biste to mogli napraviti trebate pokrenuti projekt.

Primjer (ovaj slider na vrhu se pomiče), morat ćete mi vjerovati na riječ ili sami pokrenuti projekt:

Nego, da se vratimo na članak.

Broj potvrđenih slučajeva u Hrvatskoj:

Broj potvrđenih slučajeva u zemljama sa kojima graničimo:

Vidimo da Italija opet dominira i da su prema njoj sve ostale zemlje ravna crta na dnu grafa. Da vidimo situaciju svih susjednih zemlja bez Italije:

Vidimo da Srbija vodi, a Hrvatska i Slovenija su tu negdje iza. 

Ako pogledamo situaciju kod nas gdje se možemo malo više fokusirati na dane kada je korona virus bio aktivniji kod nas:

Isto tako možemo pogledati i u Italiji:

Pogledajmo i regresije.

Italija:

Španjolska:

Njemačka:

Hrvatska, logistička krivulja koja prikazuje broj potvrđenih slučajeva, crvena crta je današnji datum:

Hrvatska, gaussova krivulja koja prikazuje rast (i pad) novozaraženih:

SIR model

Sada možemo započeti s pričom oko matematičkog modeliranja zaraznih bolesti.

Ukratko, modeli koji se koriste za modeliranje epidemija često se zovu SIR (ne onaj s rupama) ili SEIR. Postoje varijacije na istu temu, ali principi su jednostavni.

SIR stoji za – Susceptible (Podložni), Infected (Zaraženi), Removed (Uklonjeni).

S \rightarrow I \rightarrow R

U populaciji imamo ljude koji su skloni zarazi i mogu biti zaraženi korona virusom. Imamo i one koji su se već zarazili, te one koji su se oporavili ili umrli od istog virusa. Postoji nekakav slijed tih stanja. Ljudi mogu iz nezaraženih postati samo zaraženi a iz zaraženih samo otklonjeni, što možete biti da su se oporavili ili umrli (drugim riječima ne mogu nikoga više zaraziti). Ovdje ima stvarno puno stvari koje se mogu reći i napisati o ovome i tema je prilično bogata. Kao što postoji i jako puno modifikacija na ovaj model, ali ne trebamo ulaziti u (prevelike) detalje kako bismo probali vidjeti što možemo dobiti iz takvih modela.

Ono što je bitno je da odnos ovakvih varijabla (S, I, R) možemo smjestiti u formule koje nam mogu dati vrijednosti takvih varijabla u datom trenutku. Znači moguće je da mi kažemo, “sada je dan 105., koje su vrijednosti nezaraženih, zaraženih, i otklonjenih” i dobijemo vrijednosti. Vrijeme se često označava s t, pa ćemo ga tako označiti i ovdje:

S, I, R = funkcija (t)

Naravno, pitanje je koja je ta funkcija koja nam vraća vrijednosti S, I i R i kako ta funkcija izgleda. Riječ je o diferencijalnim jednadžbama koje nam mogu definirati odnos između ovih varijabli. Pogledajmo kako se one pišu, ali krenimo redom. Prvo, pogledajmo kako možemo dobiti S, vrijednost ljudi koji još nisu zaraženi:

\frac{dS}{dt} = - \frac{ \beta SI}{N}

Lijevu stranu ćemo zanemariti, to je samo notacija (tako se označava diferencijalna jednadžba). Što imamo na desnoj strani? Imamo jedan parametar koji ne znamo, i odmah iza toga parametra imamo vrijednosti koje znamo, S, što označava broj nezaraženih, imamo I, što označava broj zaraženih i imamo N. Što je N? N je ukupni broj ljudi u populaciji i često možemo vidjeti N = S + I + R. Znači znamo sve osim \beta, a taj parametar označava koja je količina zaraze bolesti od svakog pojedinog individualca. Koliko je svaka osoba sklona zaraziti se korona virusom. 

I, na kraju, što možemo vidjeti kao rezultat R, ljudi koji su otklonjeni iz populacije?

\frac{dr}{dt} = \gamma I

Vidimo samo parametar \gamma i I, zaražene. Drugim riječima, \gamma je ovdje stopa kojom ljudi prelaze iz zaraženih u maknute (da li oporavljene ili mrtve).

Što možemo vidjeti u jednadžbi za zaražene? Pogledajmo:

\frac{dI}{dt} = \frac{\beta SI}{N} - \gamma I

Slična priča, sa time da ovdje imamo još jedan parametar, \gamma , koji se koristi uz \beta. \gamma je ovdje stopa kojom ljudi prelaze iz zaraženih u maknute. 

I što nam sve ovo govori? Da li možemo nešto napraviti sa time? Naravno, možemo vizualizirati različite grafove i vidjeti na koji način se mijenja situacija kako mijenjamo te parametre. Ono što je još bitno za napomenuti prije je da je prosječni broj dana koliko je osoba zarazna računa sa tako da:

days = \frac{1}{\gamma}

Uzmimo neke fiksne brojeve sa kojima ćemo se igrati. Recimo da imamo populaciju od 10000 do 4000000 ljudi. Recimo da imamo \beta od 0.001 do 0.5 i kažimo da imamo 1/\gamma (koliko dana su ljudi zarazni) od 1 do 30. Isto tako, reći ćemo da nemamo samo umrlih (i onih koji su preboljeli) na početku i da imamo 5 ljudi koji su inicijalno zaraženi.

U ovom grafu, uzmimo primjer da imamo populaciju od 2000000, \beta od 0.5 i 1/\gamma od 15 i pogledajmo što ćemo dobiti:

Ispod (X os) su dani u godini, na lijevo (Y os) je populacija u brojevima. Vidimo da je plave boje broj zaraženih, crvene boje broj nezaraženih i zelene boje broj otklonjeni.

Kako vrijeme prolazi, vrijednosti se mijenjaju. To nadam se ima smisla, nema svaki dan isti broj niti oboljelih niti otklonjenih.

Ono što je zanimljivo ovdje je da plava linija koja značava zaražene tamo negdje oko 120. dana pada na dno. Ako pogledamo što se još zbiva na 120. Danu možemo vidjeti da je to dan kada oporavljenih (zelena boja) imamo skoro kao i broja cijele populacije a onih nezaraženih (crvene) imamo nula. Drugim riječima u ovakvom scenariju, nakon 120 dana cijela populacija je zaražena.

 

Što se događa kada promijenimo ove vrijednosti? Stavimo da je , stopa širenja duplo manja:

Sada vidimo da je stopa širenja puno sporija i treba puno više vremena da bi se ljudi zarazili (plava linija), kao i to da sada nije zaražena cijela populacija.

Što možemo dobiti ako umjesto 15 dana trajanja zaraze, stavimo da zaraza traje 3 dana? Znači da prepotstavimo da je \beta = 0.5 i da je korona virus zarazan samo 3 dana?

Pogledajmo:

Ovo je puno bolja situacija. Zaraženo je “samo” oko pola populacije a nakon 120. dana cijela situacija se potpuno umiruje. Vidimo da je i ova linija zaraženih (plava linija) puno “ravnija”.

Na Jupyter Notebook-u imate sav sadržaj sa kojim se možete igrati i sa kojim možete mijenjati ove vrijednosti i gledati kako one utječu na krajnju vrijednost.

SIR predikcije

Na žalost, moje ograničeno iskustvo sa SIR modelima govori mi da su jako nestabilni. Iako samo probao na više različitih način doći do preciznih vrijednosti, ti modeli jako su osjetljivi na sitne promjene parametara, kao i činjenicu da neke vrijednosti moramo izvući iz… Zraka. Iz zraka. 

Koji je broj populacije? Da li je to broj jedne zemlje, pokrajine, suma svih gradova ili nešto treće? Isto tako, koje su inicijalne vrijednosti parametra \beta i \gamma ?

Kada pokušavamo optimizirati model da bi smanjili greške između postojećih podataka i modela kojeg pokušavamo napraviti, bitno je od kuda krenuti. 

Ako krenemo sa nekim vrijednostima koje nisu blizu krajnjeg rješenja, funkcija ne može pronaći optimalne parametre (ne konvergira).

Sve u svemu, siguran sam da postoje dugačka objašnjenja zašto koristiti ova vrijednosti i zašto one vrijednosti, ali isto tako možda upravo baš ta riješenja mogu dovesti do zablude da je ovakav model precizan. Ako ne postoje jedna i samo jedna skupina vrijednosti od kojih krećemo, model je sklon “namještanju”.

Postoji više nedostataka ovog modela kojeg sam napravio, jedan od kojeg je da se greška modela računa samo na temelju zaraženih (problem sa ovim dataset-om je bio da se broj umrlih jako čudno broji pa je time eliminiran). 

Postoji jako puno optimizacija koje se ovdje mogu napraviti, ali meni se čini da je ovaj model i dalje nestabilan.

Manje priče, pogledajmo rješenja i grafove.

Pogledajmo Hubei.

Moramo malo uvećati sliku da bismo vidjeli crvenu liniju i točke sa podatcima.

Pogledajmo situaciju negdje gdje nemamo sve podatke. Ovo ne bih uzimao za ozbiljno. Njemačka:

Zaključak

SIR modeli korisni su kao jednostavani modeli kojima možemo prikazati dinamiku epidemije i ss kojim se može modelirati scenarij u kojem imamo veći broj poznatih varijabli.

Daju jako lijepu sliku kako bi se u zamišljenim situacijama širenja događala, te to možemo vizualno predočiti ljudima.

Iza njihove jednostavnosti krije se razina kompleksnosti koja nije za amatera i sa kojom se, bojim se, i stručni ljudi mogu poskliznuti.

Sretno učenje, ljudi, uživajte!