Koronavirusepidemian mallintamista on esitelty THL:n webinaareissa. Tässä kirjoituksessa esitellään mallintamisen laskentakoodeja, eli laskennan lähdekoodeja, joita kohtaan on myös ilmennyt kiinnostusta.

Mitä ovat laskentakoodit?

Kiteytetysti, laskentakoodien avulla toteutetaan mallit, jotka koronamallinnusryhmän webinaareissa on esitelty.

Ruoanlaittoon verrattuna mallit vastaavat reseptejä ja koodit kattiloita ja muita ruoanlaittovälineitä. Koodit itsessään eivät tuo mallin kuvaukseen varsinaisesti uutta sisältöä. Reseptiä eli mallin kuvausta seuraten taitava kokki voi tehdä aterian.

Jotta saadaan jotakin suuhunpantavaa, tarvitaan reseptin ja kattiloiden lisäksi tietenkin myös ruokatarvikkeet. Malleille näitä ovat erilaiset aineistot.

Yksinkertaisimmillaan aineisto voi muodostua yksittäisistä parametreista, luvuista joita malliin syötetään, mutta aineistot voivat olla myös esimerkiksi sairaaloiden potilasaineistoja.

Koronamallinnusryhmän koodien sisällön voi jakaa karkeasti kolmeen ryhmään.

Ensiksikin, varsinaiset laskentakoodit, jotka toteuttavat mallien laskentakaavat.

Toinen ryhmä on koodit, jotka lukevat aineistot eri tietolähteistä ja muokkaavat niiden tietosisällön laskentakoodin käyttämään muotoon. Ruoanlaittovertausta jatkaen nämä koodit ikään kuin käyvät kaupassa hankkimassa tarvikkeet, purkavat kauppakassit ja pilkkovat raaka-aineet kokin tarvitsemalla tavalla. Tätä osuutta eivät tosin tee pelkästään mallinnusryhmän koodit, vaan siihen osallistuu paljon asiantuntijoita esimerkiksi THL:n tietohallinnosta.

Koodien kolmas ryhmä on tulosten esittäminen ja tallentaminen. Jotta laskennasta olisi kenellekään mitään hyötyä, tulokset on luonnollisesti esitettävä erilaisina taulukkoina ja kaaviokuvina. Jokainen osaa itse kuvitella, mikä olisi tämän kohdan vastaavuus kokkailussa.

Minkälaisia malleja, sellaisia koodeja

Koronaepidemian alkuvaiheessa analyyseissä käytettiin ulkomaiseen vertailualueeseen perustuvaa mallia. Tällä hetkellä käytetään myös kotimaista korona-aineistoa hyödyntävää ”oppivaa mallia”.

Mallien avulla voi laskea erilaisia tulevaisuuden skenaarioita, eli arvioita tulevien tautitapausten ja hoidon tarpeen määristä sen mukaan, mitä tulevaisuutta koskevia parametreja malleille syötetään. Mallit eivät arvioi tällaisten skenaarioiden toteutumisen todennäköisyyttä, eivätkä esimerkiksi anna vastausta kysymykseen ”toisen aallon” saapumisesta.

Molemmat käytetyt mallit perustuvat samanlaiseen hyvin yksinkertaiseen epidemiologiseen SEIR-malliin (S = Susceptible, altis; E = Exposed, tartunnan saanut; I = Infectious, tartuttava; R = Removed, aiemmin tartuttava). Parametrien erilaisesta käsittelystä johtuen mallit eroavat kuitenkin ohjelmistoina toisistaan suuresti.

Vertailualueeseen perustuva malli on käytännössä pelkkä SEIR-malli, johon parametrit syötetään. Sellaisen voi ohjelmoida vartissa (Kuva 1) – blogia varten kokeilin tätä ja otin aikaa! Itse koodin kirjoittaminen mallin kuvauksesta on tässä tapauksessa siis hyvin yksinkertaista, lähes taskulaskintasoa.

Varsinainen työ vertailualuetta käytettäessä olikin parametrien selvittämisessä. Tätä puolta selitettiin webinaarissa.

Oppiva malli oppii parametrit kertyvästä aineistosta

Oppiva malli tarkoittaa, että malli estimoi (”oppii”) parametrit kertyvästä kotimaisesta korona-aineistosta ja muodostaa näin tilannekuvan. Tämän pohjalta voidaan paitsi saada ymmärrystä epidemiasta myös laskea lyhyen tähtäimen ennuste, esimerkiksi tulevalle viikolle. Lisäksi tilannekuvaa voi käyttää lähtökohtana erilaisille pitkän tähtäimen skenaarioille.

Oppivan mallin tapauksessa ohjelmisto sisältää kaikki alussa kuvatut vaiheet aineiston lukemisesta ja on siksi oleellisesti laajempi. Sen rakennetta on kuvattu alla tarkemmin.

Malleja ja koodeja on kehitetty pitkälti rintarinnan, muuttuvien käyttötarpeiden mukaan. Siksi mallinnusryhmän koodit ovat eräänlaisia prototyyppejä, eivätkä käytettävyydeltään yleisessä tai teollisuudessa käytössä olevien ohjelmien tasoa. Tyypillisesti ohjelmistoa kykenee käyttämään tutkija itse tai kollega perehdytyksen jälkeen.

Ryhmän tavoitteena ei ole ollut koodien hiominen yleiseen käyttöön. Sellainen vaatisi oman ohjelmistoprojektinsa, millaisessa vaadittava osaaminen on erilaista kuin mallinnusryhmän matemaattiseen laskentaan painottuva osaaminen.

SEIR-mallin koodi.
Kuva 1. SEIR-mallin koodi. Tätä blogia varten vartissa koodaamani SEIR-malli. Siinä palautetaan SEIR-tilojen lisäksi päivittäinen infektion ilmaantuvuustermi insI, johon voi tarvittaessa liittää vakavien tautien todennäköisyydet ja sairaalahoitojaksojen kestot. Tässä koodissa tilojen väliset siirtymät on toteutettu siirtymätodennäköisyyksillä, jolloin tilat pysyvät varmasti positiivisina kiinteässä aika-askelluksessa. Perustartuttavuusluku R0 syötetään ajasta riippuvana vektorina, jolloin voi kokeilla eri tavoin jaksotettujen R0 vaikutusta.

Oppivan mallin ohjelmisto

Oppivasta mallista on laadittu kolme eri laskentaohjelmistoa, kolmella eri ohjelmointikielellä.

Usean version etuna on, että laskennan toimivuutta on mahdollista tarkistaa vertailemalla tuloksia toisiinsa. Kaksi malleista on riippumattomasti toteutettuja prototyyppejä. Kolmas, vielä keskeneräinen versio on tarkoitettu jatkossa ryhmän yhteiskäyttöön.

Alla olevassa kuvassa (Kuva 2) on esitetty oppivan mallin ohjelmiston rakennetta. Siniset laatikot kuvastavat koodin osia ja punertavat nuolet tiedon siirtymistä.

Aineiston lukemisen komponentti (1) lukee ja muokkaa päivittäin kertyvän aineiston varsinaisen laskentakomponentin käyttämään muotoon. Laskentakomponentti jakaantuu kahteen osaan. Ensimmäinen osa (2) estimoi mallin parametrit aineistosta ja muodostaa näin epidemian laskennallisen tilannekuvan. Toinen osa (3) määrittelee tulevaisuuden skenaarion ja laskee tilannekuvalle pohjautuvan ennusteen kyseiselle skenaariolle.

Molempien laskentaosien ytimessä on edellä esitetyn kaltainen SEIR-mallin koodi. Suomessa kevään ensimmäinen epidemia-aalto keskittyi suurelta osin pääkaupunkiseudulle. Oppivaa mallia ajatellen muualta Suomesta kertyi niin vähän aineistoa, että malli ei kykene siitä oppimaan koronavirusepidemian ominaisuuksia. Siksi laskentakomponentit (2-3) on toteutettu pääkaupunkiseudun alueelle.

Osissa (4-5) on laskentakomponenttien laajennus Suomen muille alueille toteutettu niin, että alueellisia aineistoja yhdistetään pääkaupunkiseudulta estimoituihin parametreihin.

Voisiko oppivan mallin koodeja päästä kokeilemaan?

Python-ohjelmointikielellä toteutetun version voi ladata alla olevasta linkistä.
Linkki ohjelmistoon

Linkin takaa löytyvässä versiossa aineistona on simuloimalla tuotettu aineisto, jonka avulla mallin ajamista voi kokeilla.

Tietosuojan vuoksi todellista sairaala-aineistoa ja siihen liittyviä aineiston lukuohjelmia ei ole mahdollista laittaa sellaisenaan jakoon.Lupaa eri aineistojen tutkimuskäyttöön voi hakea normaalin menettelyn mukaisesti Findatan kautta.
Ohjeet tietoluvan hakemiseen

 .
Kuva 2. Oppivan mallin ohjelmiston rakenne.

Lue lisää:

Koronaepidemian mallinnusta
THL

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *