• Ei tuloksia

Aivohalvauksen ennustaminen neuroverkkomallilla

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Aivohalvauksen ennustaminen neuroverkkomallilla"

Copied!
43
0
0

Kokoteksti

(1)

Jori Nordlund

Aivohalvauksen ennustaminen neu- roverkkomallilla

Metropolia Ammattikorkeakoulu Insinööri (AMK)

Tieto- ja viestintätekniikka Insinöörityö

10.05.2021

(2)

Tekijä: Jori Nordlund

Otsikko: Aivohalvauksen ennustaminen neuroverkkomallilla

Sivumäärä: 38 sivua

Aika: 10.05.2021

Tutkinto: Insinööri (AMK)

Tutkinto-ohjelma: Tieto- ja viestintätekniikka Ammatillinen pääaine: Ohjelmistotuotanto

Ohjaajat: Lehtori, Matti Oosi

Insinöörityön tavoitteena oli tutkia mahdollisuutta hyödyntää neuroverkkomallia aivo- halvauksen riskin ennustamisessa. Insinöörityön raportissa kerrotaan aivohalvauk- sesta ja perehdytään sen riskitekijöihin. Raportissa esitellään myös neuroverkkojen toimintaa yleisesti sekä työssä käytettyjä teknologioita.

Insinöörityö toteutettiin Python-ohjelmointikielellä hyödyntäen TensorFlow-, Scikit- learn-, Matplotlib- sekä Pandas-kirjastoja. Ohjelman tekemiseen sekä dokumentoin- tiin käytettiin Jupyter Notebook -tekstieditoria.

Raportissa esitellään työssä käytettyjä Python-kirjastoja sekä paneudutaan näiden tarjoamiin työkaluihin, jotka olivat työn toteuttamisen kannalta olennaisia.

Työn aikana kokeiltiin useita rakenteeltaan erilaisia neuroverkkomalleja. Lopullista vertailua varten jätettiin kaksi toisistaan poikkeavaa mallia. Toinen neuroverkkomal- leista oli yksinkertainen ja toinen huomattavasti monimutkaisempi.

Insinöörityön raportissa tutkitaan kummankin neuroverkkomallin tuottamia ennustus- tuloksia ja pohditaan mallien ennustustulosten tarkkuuden ja virhefunktion arvojen välisiä eroja.

Avainsanat: neuroverkot, aivohalvaus, Python

(3)

Author: Jori Nordlund

Title: Predicting Stroke with Neural Network Model Number of Pages: 38 pages

Date: 10 May 2021

Degree: Bachelor of Engineering

Degree Programme: Information and Communications Technology Professional Major: Software Engineering

Instructors: Matti Oosi, Senior Lecturer

The aim of the study was to examine the possibility of using a neural network model to predict stroke from a dataset. This report introduces stroke and the risk factors in- volved. Focus is also on neural networks in general and the technologies used for processing the data and creating the neural network models.

The project was done using the Python programming language. Relevant Python li- braries here are TensorFlow, Scikit-learn, Matplotlib, and Pandas. Jupyter Notebook editor was used for creating and documenting the program.

The technologies used in the project are introduced in this report, including the rele- vant Python libraries and the tools they provide for data science and machine learn- ing projects.

During the project, several different neural network models were tried and tested. For the final evaluation two structurally different models were, a simple neural network model and a more complex model.

The results achieved with the models are explored and evaluated. The evaluation of the models was done by observing the prediction accuracies and the values of the loss function.

Keywords: neural networks, stroke, Python

(4)

Sisällys

Lyhenteet

1 Johdanto 1

2 Taustaa aivohalvauksesta 2

2.1 Aivohalvaus 2

2.2 Aivohalvaus Suomessa 2

2.3 Riskitekijöitä 2

3 Neuroverkot 3

3.1 Yleistä 3

3.2 Rakenne 3

3.3 Toiminta 6

4 Tietoaineisto 7

4.1 Muuttujat 8

4.2 Tietoaineiston esikäsittely 10

4.3 Havaintoja tietoaineistosta 12

5 Käytetyt teknologiat 17

5.1 Python 17

5.2 Python-kirjastot 18

5.2.1 Pandas 19

5.2.2 Matplotlib 20

5.2.3 Scikit-learn 21

5.2.4 TensorFlow.keras 22

5.3 Jupyter Notebook 23

6 Neuroverkkomallit 26

7 Tulokset 29

8 Yhteenveto 34

Lähteet 36

(5)

Lyhenteet

ReLu: Rectified linear unit. Askelfunktio, jota usein hyödynnetään neurover- koissa aktivaatiofunktiona.

BMI: Body mass index. Painoindeksi, käytetään arvioimaan henkilön pi- tuuden ja painon suhdetta.

CSV: Comma-separated values. Tiedostomuoto, jossa tietoarvot on ero- tettu toisistaan pilkuilla.

JSON: JavaScript Object Notation. Yksinkertainen, tekstipohjainen tapa esittää tietoa.

(6)

1 Johdanto

Tämän insinöörityön tavoitteena on tutkia neuroverkkomallin hyödyntämistä ai- vohalvauksen ennustamisessa. Tarkoituksena on siis luoda neuroverkkomalli ennustamaan, onko henkilöllä ollut aivohalvaus erinäisten muuttujien arvojen perusteella.

Tässä insinöörityöraportissa kerrotaan taustatietoa aivohalvauksesta sekä sen riskitekijöistä, esitellään neuroverkkojen rakennetta ja toimintaa yleisellä tasolla, syvennytään projektissa käytettyyn aineistoon ja kerrotaan tarkemmin muuttu- jien arvojen jakautumisesta sekä arvojen suhteesta aivohalvauksen riskitekijöi- hin. Raportissa esitellään myös projektissa käytettyjä teknologioita ja kerrotaan näiden teknologioiden hyödyntämisestä koneoppimisen ongelmien ratkaisemi- sessa. Työssä keskitytään erityisesti kuitenkin neuroverkkoihin.

Projekti alkaa tietoaineiston esikäsittelyllä, johon kuuluu muun muassa tiedon muuttamista sopivaan muotoon sekä puuttuvaa tietoa sisältävien tapausten kor- jaamista aineistossa. Kun tietoaineisto on saatu esikäsiteltyä, luodaan ja koulu- tetaan neuroverkkomalleja. Mallien suoriutumista arvioidaan tarkkailemalla nii- den ennustamisen tarkkuutta sekä virhefunktion arvoa koulutusprosessin ede- tessä. Mallien kouluttamisen jälkeen vertaillaan ennustamisen tarkkuutta koulu- tus- ja validointiaineiston välillä.

Tietoaineistona hyödynnetään kaggle-sivustolta löytyvää aineistoa. Neuroverk- komallien luominen toteutetaan Jupyter Notebook -ohjelmalla käyttäen Python- ohjelmointikieltä ja hyödyntäen tietojenkäsittelytieteessä tyypillisesti hyödynnet- täviä Python-kirjastoja kuten TensorFlowta, matplotlibia ja pandasta.

(7)

2 Taustaa aivohalvauksesta

2.1 Aivohalvaus

Aivohalvaus on aivoverenkierrossa tapahtuva häiriö. Aivohalvaus voi tapahtua joko niin, että aivovaltimossa on tukkeuma tai -valtimo alkaa vuotamaan. Yleisin aiheuttaja aivohalvaukseen on aivovaltimoon ilmaantunut veritulppa. Aivohal- vauksen mahdollisia havaittavia oireita ovat muun muassa toispuoleiset raajo- jen toimintahäiriöt, ongelmat puheen tuottamisessa, kasvojen lihasten halvaan- tuminen, näköhäiriöt ja huimaus. [1.]

2.2 Aivohalvaus Suomessa

Aivohalvaus on Suomen kolmanneksi yleisin kuolinsyy. Terveyden ja hyvinvoin- nin laitoksen nettisivuilta selviää, että vuosittain noin 25 000 suomalaista kärsii aivoverenkierron häiriöstä. Näistä tapauksista kuolettavia oli vuonna 2014 noin 4400. [2.]

Joka vuosi aivohalvauksen saaneista ihmisistä noin 20 % on työikäisiä. Näin ol- len aivohalvausta ei voida pitää pelkästään vanhojen ihmisten sairautena. [1.]

2.3 Riskitekijöitä

Aivohalvauksen suurimpia riskitekijöitä ovat korkea ikä, diabetes, tupakointi, li- havuus, suuri alkoholin kulutus, veren korkea kolesterolipitoisuus ja korkea ve- renpaine. Riskitekijöiden perusteella voidaankin päätellä, että aivohalvauksen ehkäisemisen kannalta terveelliset elämäntavat ovat suuressa roolissa. [1.]

(8)

3 Neuroverkot

3.1 Yleistä

Neuroverkot ovat yksi koneoppimisen menetelmistä, joiden avulla on esimer- kiksi mahdollista yrittää ennustaa jonkin asian lopputulosta, kun vastaavista ta- pauksista aiemmin tiedetään lopputulos ja on olemassa dataa, jolla voidaan olettaa olevan yhteys siihen, millaiseen lopputulokseen päädyttiin.

Neuroverkkoja hyödynnetään nykypäivänä paljon ja niistä on apua monien eri- laisten ongelmien ratkaisussa. Yleisiä ongelmia, joita neuroverkoilla pyritään ratkaisemaan ovat esimerkiksi:

• Kuvantunnistus, eli pyritään tunnistamaan objekteja kuvista.

• Binäärinen ennustaminen, eli pyritään vastaamaan kysymykseen, jossa on kaksi toisensa poissulkevaa lopputulosta.

• Luokkaennustaminen, eli pyritään aineiston perusteella päättelemään mi- hin luokkaan kyseinen tapaus sijoittuu.

3.2 Rakenne

Neuroverkkoja on monenlaisia ja ratkaistavasta ongelmasta riippuen neuro- verkko voi olla yksinkertainen tai hyvinkin monimutkainen. Neuroverkko raken- tuu vähintään kolmesta kerroksesta, syötekerroksesta (engl. input layer), piilo- kerroksesta (engl. hidden layer) ja ulostulokerroksesta (engl. output layer). Piilo- kerroksia voi olla, ja usein onkin, enemmän kuin yksi. Neuroverkkojen kerrokset rakentuvat neuroneista, neuronit koostuvat synapseista, summaajasta ja akti- vaatiofunktiosta. Kuva 1 havainnollistaa, miltä neuroverkkomalli voi yksinkertai- simmillaan näyttää. [3.]

(9)

Kuva 1. Esimerkki yksinkertaisesta neuroverkosta.

Synapsit ovat kahden neuronin välinen yhteys, jolla on oma paino. Tätä painoa hyödynnetään laskennassa, kun signaali siirtyy neuronilta toiselle. Laskeminen tapahtuu kertomalla neuronin j neuronille k lähettämä arvo painolla, jota kuva- taan kirjaimella w (engl. weight). [4.]

Summaajalla lasketaan synapsien kautta tulleiden signaalien summa. Neuro- nille k saadaan laskettua summa kaavan 1 avulla

𝑢𝑘 = ∑ 𝑤𝑘𝑗𝑥𝑗

𝑚

𝑗=1

(1)

jossa w on synapsin paino ja x on syötteenä saatu signaali.

Aktivaatiofunktiota käyttämällä aiemmin laskettu summa 𝑢𝑘 saadaan epälineaa- riseksi seuraavan kaavan 2 avulla

(10)

𝑦𝑘 = 𝑓(𝑢𝑘+ 𝑏𝑘) (2)

jossa 𝑦𝑘 on ulostulosignaali, f on epälineaarinen aktivaatiofunktio, 𝑢𝑘 on syöte- signaalien summa ja 𝑏𝑘 on vakiotermi. Summan epälineaariseksi muuttamisella pyritään varmistamaan, että neuroverkko ei oppimisessaan pyri hyödyntämään vain lineaarisia riippuvuuksia, vaan ikään kuin näkee tietoaineiston muuttujien keskinäisiä suhteita lopputuloksen kannalta ja kykenee muodostamaan moni- mutkaisempia riippuvuussuhteita.

Aktivaatiofunktiota valitessa on useita vaihtoehtoja, usein kuitenkin käytössä on joko askelfunktio (ReLU) tai logistinen funktio (sigmoidi) (kuva 2).

Kuva 2. Aktivaatiofunktioiden kuvaajat.

Nykyään yleisimmin käytetty aktivaatiofunktio on askelfunktio. Askelfunktion toi- minta on hyvin yksinkertainen esimerkiksi logistiseen funktioon verrattuna. Posi- tiivisilla arvoilla askelfunktio käyttäytyy lineaarisesti, negatiivisilla arvoilla askel- funktion tuloksena on aina nolla. Funktion yksinkertaisuudesta johtuen se no-

(11)

peuttaa laskemista neuroverkkomallia koulutettaessa tai käytettäessä. Askel- funktiota käytettäessä kaikki neuronit eivät todennäköisesti aktivoidu, sillä nega- tiivisilla arvoilla tuloksena on nolla ja tällöin neuroni ei osallistu kyseisen tapauk- sen prosessointiin. Tällainen toiminta jäljittelee aivojen toimintaa siinä mielessä, että vaikka aivoissa on erittäin suuri määrä neuroneja eivät kaikki näistä neuro- neista ole koko ajan aktiivisesti mukana tiedon prosessoimisessa. [5.]

Logistisen funktion tuottamat arvot ovat välillä 0–1. Syötteen ollessa negatiivi- nen funktion tulos lähenee arvoa 0, mitä pienempi syötteen arvo on. Syötteen ollessa positiivinen funktion tulos lähenee arvoa 1, mitä suurempi syötteen arvo on. [6.]

3.3 Toiminta

Neuroverkkojen toiminta perustuu siihen, että ne yrittävät oppia ennustamaan aineiston muuttujien perusteella syntyvää lopputulosta ja kierros kierrokselta saamaan arvauksia oikein enemmän kuin edellisellä kierroksella. Ihannetilan- teessa siis neuroverkkomalli kehittyy jokaisella kerralla, kun sen läpi ajetaan koulutusaineistoa.

Toiminnan voisi yksinkertaisesti tiivistettynä selittää seuraavasti:

1. Määritellään neuroverkon rakenne ja alustetaan muuttujien arvot (painot ja vakiotermit).

2. Syötetään mallille dataa, jossa se siirtyy kerroksesta toiseen käyden läpi summaamiset ja aktivaatiofunktiot.

3. Lopuksi datan tullessa ulostulokerroksesta, mallin ennustamaa arvoa voi- daan verrata tiedettyyn todelliseen arvoon.

4. Koulutusvaiheen ollessa edelleen käynnissä saadun tuloksen ja todelli- sen arvon välisen virheen perusteella lasketaan painoille ja vakioter-

(12)

meille uusia arvoja pyrkien saavuttamaan parempi suoriutuminen seu- raavalla kierroksella. Uusien arvojen laskemiseen hyödynnetään vasta- virta-algoritmia (engl. backpropagation). [6.]

Vastavirta-algoritmilla pyritään havainnoimaan yksittäisen neuronin vai- kutusta saadun arvon ja todellisen arvon välillä laskemalla niiden välinen ero jotakin virhefunktiota hyödyntäen. Mikäli arvot eroavat toisistaan vir- hefunktiolla, saadaan nollasta poikkeava lukuarvo, joka kuvaa virheen suuruutta. Tavoitteena on siis minimoida virhefunktiolta saatuja arvoja niin, että virheen suuruus lähenisi nollaa. [6.]

4 Tietoaineisto

Insinöörityössä käytetty tietoaineisto on peräisin kaggle.com-sivustolta, se sisäl- tää monipuolisesti tietoa henkilöstä sekä tiedon siitä, onko kyseisellä henkilöllä ollut aivohalvausta. Tietoaineiston alkuperäislähde sivustolla on merkitty sa- lassa pidettäväksi todennäköisesti johtuen siitä, että tietoaineisto pitää sisällään potilastietoja. [7.]

Tietoaineisto koostuu yhteensä 5109 tapauksesta. Näistä tapauksista 249 on sellaisia, joilla on ollut aivohalvaus. Positiivisten tulosten osuus koko otannasta on siis noin 5 %, joka on erittäin vähän (kuva 3).

(13)

Kuva 3. Positiivisten ja negatiivisten tulosten jakauma.

Tämä epätasainen jakauma positiivisten ja negatiivisten tulosten välillä osoittau- tui hankalaksi neuroverkkomallia koulutettaessa. Mallin toimivuuden arvioiminen hankaloitui, sillä neuroverkkomallin on hankala ennustaa oikein luotettavasti, kun koulutuksessa käytetty tietoaineisto ei sisällä tarpeeksi positiivisen arvon omaavia esimerkkitapauksia.

4.1 Muuttujat

Tietoaineisto sisälsi alun perin 12 muuttujaa, mutta mallin kouluttamista varten yksilöllinen tunniste (”id”) ei ollut tarpeellinen, joten se pudotettiin aineistosta.

Tietoaineiston muuttujat:

• Gender eli sukupuoli. 0 merkitsee miestä ja 1 merkitsee naista.

(14)

• Age eli ikä vuosissa. Minimi arvo on 0,08 (noin yksi kuukausi) ja maksimi arvo on 82. Keskiarvoinen ikä tietoaineistossa on 43 vuotta.

• Hypertension eli kohonnut verenpaine. 0 tarkoittaa että henkilöllä ei ole kohonnutta verenpainetta ja 1 tarkoittaa, että henkilöllä on kohonnut ve- renpaine.

• Heart_disease eli sydänsairaus. 0 tarkoittaa, että henkilöllä ei ole sydän- sairautta, ja 1 tarkoittaa, että henkilöllä on jokin sydänsairaus.

• Ever_married kertoo siitä, onko henkilö ollut joskus avioliitossa. 0 tarkoit- taa, että henkilö ei ole koskaan ollut avioliitossa, ja 1 tarkoittaa, että joko henkilö on joskus ollut, tai on tällä hetkellä, avioliitossa.

• work_type kertoo siitä, millainen on henkilön työtilanne. 0 tarkoittaa, että henkilö on yksityisellä puolella, 1 tarkoittaa, että henkilö ei ole koskaan ollut töissä, 2 tarkoittaa, että henkilö hoitaa lapsiaan, 3 tarkoittaa, että henkilö työllistää itse itsensä, ja 4 tarkoittaa, että henkilö on töissä joko kunnallisella puolella tai valtiolla.

• Residence_type kertoo siitä, missä henkilö asuu. 0 tarkoittaa, että hen- kilö asuu kaupungissa, ja 1 tarkoittaa, että henkilö asuu maaseudulla.

• Avg_glucose_level eli henkilön keskimääräinen veren glukoositaso (ve- rensokeri). Yksikkönä on mg/dL. Tietoaineiston pienin arvo on 55,12;

suurin arvo on 271,74 ja keskiarvo on 106,14. Normaalit paastoverenso- keriarvot terveellä ihmisellä ovat alle 100 mg/dL. Mikäli arvot ovat välillä 100–125 mg/dL, on henkilöllä esidiabetes. Arvot, jotka ylittävät 125 mg/dL, viittaavat diabetekseen. [8.]

• bmi eli painoindeksi (BMI). Yksikkönä on kg/m^2. Tietoaineiston pienin arvo on 10,3; suurin arvo on 97,6 ja keskiarvo on 27,76. Painoindeksi kertoo henkilön pituuden ja painon suhteesta. Henkilön sanotaan olevan

(15)

normaalipainoinen, kun painoindeksin arvo on välillä 18,5–25. Mikäli pai- noindeksi on alle 18,5, henkilö on alipainoinen. Painoindeksin ollessa yli 25 todetaan henkilön olevan ylipainoinen. Ylipainon vakavuus riippuu siitä, kuinka paljon normaaliraja ylittyy. Painoindeksin ollessa välillä 25–

30 puhutaan lievästä ylipainosta, välillä 30–35 merkittävästä lihavuu- desta, välillä 35–40 vaikeasta lihavuudesta ja yli 40 ylittävien arvojen ta- pauksessa sairaalloisesta lihavuudesta. [9.]

• Smoking_status kertoo, tupakoiko henkilö tai onko hän joskus tupakoi- nut. 0 tarkoittaa, että ei ole tietoa henkilön tupakoinnista, 1 tarkoittaa, että henkilö ei ole koskaan tupakoinut, 2 tarkoittaa, että henkilö on joskus tu- pakoinut mutta sittemmin lopettanut, ja 3 tarkoittaa, että henkilö polttaa tupakkaa.

• Stroke eli aivohalvaus. 0 tarkoittaa, että henkilöllä ei ole ollut aivohal- vausta, ja 1 tarkoittaa, että henkilöllä on ollut aivohalvaus. Stroke on ai- neiston kohdemuuttuja (engl. target attribute). Kohdemuuttuja on se muuttuja, jonka arvoa neuroverkkomallilla pyritään ennustamaan.

4.2 Tietoaineiston esikäsittely

Usein ennen kuin tietoaineistoa voidaan hyödyntää koneoppimisessa mallin kouluttamiseen, täytyy pitää huolen siitä, että tieto on sellaisessa muodossa, jota malli osaa käyttää hyväkseen. Huomiota tulee myös kiinnittää puuttuviin ar- voihin, sillä huomioimattomina ne vaikuttavat negatiivisesti mahdollisuuksiin luoda toimiva malli.

Ennen tietoaineiston esikäsittelyä monien muuttujien arvot olivat sanallisessa muodossa esim. muuttujan work_type mahdolliset arvot olivat ”Private”, ”Ne- ver_worked”, ”children”, ”Self-employed” ja ”Govt_job”. Nämä sanalliset muuttu- jan arvot korvasin lukuarvoilla välillä 0–4 niin, että sama luku viittaa aina tiettyyn sanalliseen arvoon esim. ”Private” = 0. Tämä toimenpide oli tehtävä siksi, että

(16)

muuttujia olisi mahdollista hyödyntää myöhemmin neuroverkkomallin koulutta- misessa.

Toinen tärkeä vaihe tietoaineiston esikäsittelyssä on puuttuvien arvojen käsitte- leminen. Puuttuvia arvoja voidaan käsitellä joko pudottamalla puuttuvia arvoja sisältävät otokset tai korvaamalla puuttuvaa tietoa. Korvaaminen voidaan suorit- taa korvaamalla keskiarvo, moodi, mediaani tai nolla. Vaihtoehtoisesti puuttuvia arvoja voidaan myös yrittää ennustaa hyödyntäen koneoppimisen algoritmeja.

Tämän insinöörityön toteutuksessa kokeilin kahta tapaa: nollalla korvaamista sekä tietoaineistosta kokonaan pois jättämistä. [10.]

Tiedon oikeellisuuden kannalta ja mallin hyvän oppimisen varmistamiseksi puut- tuvia arvoja sisältävien otosten pois pudottaminen tuntui intuitiivisesti parhaalta vaihtoehdolta. Käytännössä kuitenkin johtuen tietoaineiston suhteellisen pie- nestä koosta sekä vähäisestä positiivisen kohdemuuttujan arvon sisältävien otosten määrän takia pois pudottaminen ei osoittautunut kovinkaan hyväksi vaihtoehdoksi.

Alun perin aineisto sisälsi 5109 tapausta ja poispudottamisen jälkeen tapauksia olisi ollut jäljellä 4908. Tietoaineistosta olisi siis menetetty noin 4 %. Menetys ei prosentuaalisesti olisi ollut kovinkaan merkittävä, mutta tarkastelun tuloksena selvisi, että moni positiivisen kohdemuuttujan arvon sisältävä tapaus olisi jäänyt pois, jos puuttuvat arvot sisältävät otokset olisi vain jätetty huomiotta. Kohde- muuttujan positiivisia arvoja sisältäviä otoksia oli tietoaineistossa alun perin 249 kappaletta ja pois pudottamisen jälkeen niitä olisi ollut jäljellä enää 209. Tässä tapauksessa siis positiivisen arvon sisältäviä otoksia olisi menetetty noin 16 %.

Tilanteessa, jossa alun perinkin positiivisia tapauksia on hyvin rajallinen määrä, näin iso menetys tuntui liian merkittävältä.

Todettuani, että arvojen pois pudottaminen ei tässä tapauksessa ollut kovin- kaan hyvä vaihtoehto, päädyin korvaamaan puuttuvat arvot nollalla. On kuiten- kin tärkeää ottaa huomioon, että en olisi voinut toimia näin, jos puuttuvat arvot olisivat kuuluneet jollekin binääriselle muuttujalle.

(17)

Kuvasta 4 voidaan havaita, että puuttuvia arvoja on ainoastaan muuttujalle nu- mero 9, eli muuttujalle, joka ilmoittaa henkilön painoindeksin (BMI).

Kuva 4. Kuvaus tietoaineiston muuttujien tyypistä ja määrästä.

Ilmaisulla ”non-null” tarkoitetaan sitä, että muuttujalla on jokin arvo, ja jos ”non- null” muuttujia on 5109 eli yhtä monta kuin tietoaineistossa on tapauksia, voi- daan todeta muuttujan arvoja olevan oikea määrä. Jos arvo poikkeaa tietoai- neiston tapausten määrästä, näiden erotuksen perusteella voidaan päätellä puuttuvien arvojen määrä. Tässä tapauksessa voidaan siis laskea, että puuttu- via arvoja on 201 kappaletta.

4.3 Havaintoja tietoaineistosta

Osa tietoaineiston muuttujista jakautuu tasaisesti muuttujien eri arvojen välillä, mutta osassa jakauma on hyvinkin epätasapainoinen. Lisäksi numeeristen arvo- jen minimit, maksimit ja keskiarvot ovat merkittävässä roolissa, kun pohditaan muuttujien arvojen ja aivohalvauksen riskitekijöiden yhteneväisyyksiä.

(18)

Tietoaineistossa naisia on noin 3000 kappaletta. Naisten osuus tietoaineistossa on siis noin 60 %. Lukumäärällisesti naisia on noin puolet enemmän kuin mie- hiä, kun miesten lukumäärä on hieman yli 2000. Amerikan aivohalvausyhdistyk- sen (engl. American Stroke Association) mukaan naisilla on korkeampi riski saada aivohalvaus kuin miehillä. Tätä selittää muun muassa raskaudesta mah- dollisesti seuraava kohonnut verenpaine. Toinen syy korkeammalle riskille on naisten korkeampi elinajanodote miehiin verrattuna, koska aivohalvaus on ylei- sempää vanhenemisen myötä. [11.]

Tietoaineiston keskiarvoinen ikä on 43 vuotta. Kuten jo aiemmin on todettu, kor- kea ikä on yksi aivohalvauksen riskitekijöistä. Lapsien, eli alle 18-vuotiaiden, osuus aineistosta on noin 17 %. Aivohalvaus lapsilla on erittäin harvinainen.

Vuosittain maailmanlaajuisesti vain noin kaksi lasta 100 000:sta saa aivohal- vauksen [12]. Vanhojen ihmisten, yli 65-vuotiaiden, osuus aineistosta on noin 19 %. Ikäjakauma on siis tietoaineistossa suhteellisen tasainen (kuva 5).

Kuva 5. Histogrammi tietoaineiston ikäjakaumasta.

(19)

Henkilöitä, joilla on kohonnut verenpaine, löytyy tietoaineistosta vain 498 kappa- letta. Tällaisia tapauksia on siis alle 10 %. Kohonnut verenpaine on European Cardiology Review (ECR) -sivustolla julkaistun artikkelin mukaan aivohalvauk- sen yleisimpiä riskitekijöitä [13]. Tietoaineistoa tarkasteltaessa voidaan siis ha- vaita, että kohonneen verenpaineen positiivisia arvoja on vähän, mikä puoles- taan on osasyynä vähäiseen aivohalvausten määrään.

Positiivisten arvojen osuus tietoaineistossa sydänsairauksien suhteen on suh- teellisen vähäinen. Noin 5 %:lla aineistosta on jokin sydänsairaus. Tämä on toi- nen selittävä tekijä aivohalvauksen positiivisten tapausten pienelle lukumää- rälle, sillä sydänsairaudet kuuluvat myös aivohalvauksen riskitekijöihin.

Tietoaineistosta suurin osa, noin 67 %:n osuus, on joskus ollut tai on nykyään avioliitossa. Verywell Health -sivustolla julkaistussa artikkelissa viitataan Ruot- sissa tehtyyn tutkimukseen, jonka mukaan riski aivohalvaukseen kasvaa muuta- man vuoden ajaksi avioliiton päättyessä. Artikkelissa myös todetaan, että aivo- halvauksen riskin kasvamisen kannalta ei ole merkitystä, onko avioliitto päätty- nyt joko avioeroon tai puolison kuolemaan. Aivohalvauksen riskin kasvamista avioliiton päättymisen jälkeen selitetään artikkelissa muun muassa sillä, että avioliiton päättyessä on mahdollisesti enemmän surullisuutta tai ahdistunei- suutta. Artikkelissa on myös maininta onnettoman avioliiton vaikutuksesta aivo- halvauksen riskitekijänä. Tämä perustuu Coloradossa tehtyyn tutkimukseen, jossa havaittiin aivohalvauksen riskin kasvavan onnettomassa avioliitossa elä- villä naisilla. [14.]

Työn tyypin perusteella jaettuna tietoaineisto jakaantuu seuraavasti: yksityisellä puolella työskentelee noin 57 %, itsensä työllistävät noin 16 %, noin 13 % hoi- taa lapsia palkkatöiden sijaan, kunnallisella tai valtiolla on töissä noin 13 % ja töissä koskaan käymättömiä on alle 1 % verran.

Tietoaineiston henkilöiden asumisen jakautuminen on erittäin tasainen. Aineis- ton henkilöistä noin 51 % asuu kaupungeissa ja noin 49 % asuu maaseudulla.

(20)

Journal of the American Heart Association -verkkosivuilla julkaistussa artikke- lissa todetaan, että tutkimuksissa on havaittu kasvanut riski aivohalvaukselle maaseudulla asuvilla kaupungeissa asuviin verrattuna. Syitä riskin kohoami- seen ei kuitenkaan osattu sen tarkemmin selittää. Tutkimus tehtiin Pohjois- Amerikassa. [15.]

Keskiarvoisen veren glukoositason arvot vaihtelevat tietoaineistossa huomatta- vasti. Arvot sijoittuvat välille 55,12–271,74 mg/dL mediaanin ollessa 91,88 mg/dL ja keskiarvon ollessa 106,14 mg/dL. Kuvassa on nähtävillä veren glukoo- sitason arvojen jakautuminen aineistossa (kuva 6).

Kuva 6. Histogrammi veren keskiarvoisen glukoositason arvojen jakautumisesta tietoaineistossa.

Veren glukoositason mediaaniarvo on normaalilla tasolla sen jäädessä alle 100 mg/dL [8]. Keskiarvo kuitenkin ylittää normaalin tason, ja tästä johtuen voidaan

(21)

todeta tietoaineiston sisältävän huomattavan määrän ihmisiä, joilla on joko dia- betes tai sen esiaste. Diabeteksen ollessa yksi merkittävimmistä aivohalvauk- sen riskitekijöistä korkeat veren glukoositason arvot tietoaineistossa ovat mer- kittäviä.

Painoindeksin arvot tietoaineistossa ovat välillä 10,3–97,6. Painoindeksin kes- kiarvo on 27,76. Tämä tarkoittaa siis, että keskiarvoisesti tietoaineiston henkilö on vähintään hieman ylipainoinen normaalin painoindeksin ollessa välillä 18,5–

25. Painoindeksin arvojen jakautuminen näkyvillä kuvassa 7.

Kuva 7. Histogrammi painoindeksin arvojen jakautumisesta tietoaineistossa.

Tietoaineiston tapauksista alle puolet ovat sellaisia, jossa painoindeksin arvo si- joittuu normaalille välille. Voidaan siis todeta, että suurin osa arvoista on sellai- sia, joilla todetaan olevan suurempi riski aivohalvaukseen lihavuuden myötä. Ar- voja tutkailtaessa voidaan myös havaita tietoaineiston sisältävän muutamia erit- täin korkeita arvoja. Esimerkiksi tietoaineiston maksimi on 97,6. Maksimiarvo on

(22)

huomattavan korkea, sillä sairaalloisen lihavuuden raja ylittyy 40:ssä [9]. Tieto- aineiston maksimiarvo on siis yli tuplasti suurempi kuin sairaalloisen lihavuuden raja.

Tietoaineiston henkilöistä noin 37 % on sellaisia, jotka eivät ole koskaan poltta- neet tupakkaa. Henkilöitä, jotka polttavat nykyään tai ovat joskus polttaneet, löy- tyy aineistosta yhteensä noin 33 %. Loput 30 % ovat tuntemattomia tupakoinnin osalta. Merkittävästä osasta aineistoa voi siis olla hankala tehdä päätelmiä tu- pakoinnin perusteella, koska se on kuitenkin merkittävä riskitekijä aivohalvauk- sen kannalta.

5 Käytetyt teknologiat

5.1 Python

Toteutin insinöörityön Python-ohjelmointikieltä käyttäen. Python on syntaksil- taan yksinkertainen kieli, ja se tarjoaa mahdollisuuksia moneen erilaiseen tar- koitukseen. Kolme yleistä ohjelmoinnin kohdetta, joissa Python-kieli on käy- tössä, ovat web-kehitys, tietojenkäsittelytieteet sekä skriptien luominen eli tehtä- vien automatisoiminen [16]. Pythonin ero moniin muihin ohjelmointikieliin verrat- tuna on esimerkiksi se, että siinä ei välimerkkinä käytetä puolipistettä vaan koo- dirivit erotetaan toisistaan rivivaihdoilla. Pythonin funktioiden kutsut ovat usein lähellä luonnollista kieltä ja näin ollen intuitiivisesti helpommin pääteltävissä kuin esimerkiksi usein on Java-kielessä.

Nykyaikana Python-kielen yksi suosituista käyttötarkoituksista on tietojenkäsitte- lytieteen (engl. Data Science) parissa työskennellessä. Python soveltuu hyvin tietoaineistojen käsittelyyn, analysoimiseen sekä koneoppimisen ongelmien rat- kaisuun.

Python ohjelmointikielellä voidaan ohjelmoida usean eri ohjelmointiparadigman mukaan. Ohjelmointiparadigmalla tarkoitetaan ajattelutapaa ja tyyliä käsitellä ohjelmaa ja lähestyä ratkaistavia ohjelmoinnin tehtäviä. Ohjelmointiparadigmat

(23)

eivät ole toisiaan poissulkevia vaan ohjelmointikieli voi toimia usean paradig- man mukaan samanaikaisesti. Python-ohjelmointikieltä voidaan käyttää olio-oh- jelmoinnissa, funktionaalisessa ohjelmoinnissa sekä proseduraalisessa ohjel- moinnissa. [17; 18.]

Olio-ohjelmoinnissa ohjelma jakautuu erilaisiin luokkiin, ja luokkiin määritellään niille tarvittavat metodit, jotka määrittelevät, mihin kaikkeen ohjelman toimintaan luokka voi osallistua. Proseduraalisessa ohjelmoinnissa ohjelma rakentuu lopul- lisen tavoitteen perusteella. Tämä tavoite pyritään saavuttamaan pieni askel kerrallaan. Funktionaalisessa ohjelmoinnissa pyritään ohjelman toimintaa to- teuttamaan matemaattisten funktioiden avulla. [19; 20.]

5.2 Python-kirjastot

Insinöörityön toteutuksessa hyödynnettyjen Python-kirjastojen käyttötarkoitus ja keskinäinen suhde on havainnollistettu seuraavassa kuvassa 8.

(24)

Kuva 8. Insinöörityössä käytetyt Python-kirjastot.

5.2.1 Pandas

Pandas on Python-kielelle tehty kirjasto, joka tarjoaa monipuolisesti työkaluja tiedonkäsittelyyn. Usein Pandas-kirjastoa käytettäessä tietoaineistosta tehdään DataFrame-objekti, jossa tieto on taulukon muodossa. DataFrame-objekti voi- daan pandasin avulla tehdä esimerkiksi CSV-tiedostosta tai lukemalla JSON- dataa. Pandas-raaka-aineiston lukemista ja DataFrame-objektiksi muuttamista varten metodit read_csv() ja read_json(). Pandasin avulla on myös mahdollista esimerkiksi tarkastella käsiteltävänä olevaa tietoaineistoa ja selvittää tärkeitä ar- voja, kuten keskiarvo, moodi, mediaani, minimi tai maksimi. Pandas myös tar- joaa tapoja käsitellä puuttuvaa tietoa tietoaineistossa, tiedon korvaamisen tai tietorivien pudottamisen avulla. [21.]

Insinöörityössä käyttämäni tietoaineisto on CSV-tiedosto ja pandasin avulla tein siitä DataFrame-objektin, jonka jälkeen kirjastoa hyödyntämällä oli mahdollista

(25)

tarkastella tietoaineistoa ja tehdä tarvittavia toimenpiteitä puuttuvan tiedon kanssa. Tietoaineisto oli alun perin järjestyksessä, jossa kaikki positiivisen koh- demuuttujan sisältävät rivit olivat alkupäässä ja näiden jälkeen vasta kaikki ne- gatiiviset tapaukset. Ongelmien välttämiseksi myöhemmissä vaiheissa, kuten tietoaineiston jakamisessa koulutus- ja testaamisaineistoihin sekä mallin koulut- tamisessa, hyödynsin sample()-metodia, joka palauttaa tietoaineiston rivejä en- nalta määrätyn määrän satunnaisessa järjestyksessä. Tällä tavoin toimimalla saatiin varmistettua positiivisten tapausten esiintymisen satunnaisuus tietoai- neistossa.

Aluksi yritin puuttuvia arvoja sisältävien rivien pudottamista hyödyntäen

dropna()-metodia. Kuten aiemmin jo raportissa totesin, havaitsin, että tiedon pu- dottamisella oli negatiivinen vaikutus myöhemmin neuroverkkomallia koulutetta- essa, sillä pudottamalla menetettiin paljon positiivisen kohdemuuttujan arvon si- sältäviä rivejä. Toinen lähestymistapa käsitellä puuttuvia arvoja oli siis näiden arvojen täyttäminen. Puuttuvien arvojen täyttämisen toteutin käyttämällä fillna()- metodia parametrin arvolla ”0”. Näin puuttuvien arvojen tilalle tietoaineistoon saatiin arvo ”0”.

5.2.2 Matplotlib

Matplotlib on Python-kirjasto, joka tarjoaa työkalut datan visualisoimista varten erilaisten kuvaajien muodossa. Hyödynsin matplotlib-kirjastoa insinöörityössäni muun muassa havainnollistamaan tietoaineiston eri arvojen jakautumista sekä esittämään neuroverkkomallin oppimisen etenemistä. Erilaisia kuvaajia, joita matplotlibin avulla voi tehdä, ovat esimerkiksi erilaiset pylväs- ja ympyrädia- grammit, viivakaaviot sekä funktioiden kuvaajien esitykset.

Kuvaajien tekeminen matplotlib-kirjaston avulla tapahtuu käyttämällä plot()-me- todia. Metodille annetaan parametriksi muuttuja/muuttujat, joista kuvaaja halu- taan tehdä. Metodille voidaan myös kertoa, minkä tyylinen kuvaaja halutaan saada aikaan tai määritellä kuvaajan ominaisuuksia tarkemmin. Kuvaajan kokoa on myös mahdollista säädellä muuttamalla figsize-parametrin arvoa.

(26)

5.2.3 Scikit-learn

Scikit-learn on Python-kielelle tehty kirjasto, joka on tarkoitettu tiedonkäsittelyyn erityisesti koneoppimisen näkökulmasta. Scikit-learn-kirjastoa on mahdollista hyödyntää esimerkiksi monissa eri tyylisissä koneoppimisen ongelmissa ja sillä voidaan luoda eri ongelmatyyppien vaatimia malleja ennustamaan lopputulosta.

Scikit-learn-kirjastoa voidaan hyödyntää esimerkiksi luokittelu-, regressio- sekä klusterointiongelmissa. Kirjastosta löytyy myös monipuolisesti työkalut tiedon esikäsittelemiseen ja tarkastelemiseen. [22.]

Insinöörityössä hyödynsin scikit-learn-kirjastoa tietoaineiston esikäsittelyssä sekä tietoaineiston jakamisessa koulutus- ja validointiaineistoon. Tietoaineiston esikäsittelyssä hyödynsin train_test_split()-metodia sekä preprocessing.scale()- metodia.

Train_test_split()-metodilla tietoaineisto saadaan jaettua koulutus- ja validointi- aineistoon. Koulutusaineistoa hyödynnetään neuroverkkomallin kouluttamisessa ja validointiaineistolla testataan mallin suoriutumista ennustamisen tarkkuuden osalta koulutuskierrosten välillä. Train_test_split()-metodille annetaan paramet- reinä tietoaineisto, joka halutaan jakaa, sekä haluttu suhde jakamiseen. Jakami- sen suhteen määrittely tapahtuu antamalla arvo joko parametrille ”test_size” tai

”train_size”. Parametrin arvon tulee olla välillä 0–1. Arvo ”0” tarkoittaa 0 % ai- neistosta ja arvo ”1” tarkoittaa 100 % aineistosta. Insinöörityön toteutuksessa annoin metodin parametrille ”test_size” arvon 0,3 jolloin siis 30 % aineistosta on varattu validointiin ja 70 % jää neuroverkkomallin kouluttamista varten. Tietoai- neiston sekoittaminen olisi myös ollut mahdollista toteuttaa tässä vaiheessa an- tamalla parametrille ”shuffle” arvo ”True”, mutta olin sekoittanut tietoaineiston jo aiemmin. [23.]

Tietoaineiston jakamisen jälkeen hyödynsin tietoaineiston standardoimista var- ten preprocessing.scale()-metodia. Tietoaineiston muuttujien skaalaaminen on tärkeää, sillä ilman tätä eri muuttujien vaihteluvälit saattavat erota toisistaan huomattavasti. Esimerkiksi muuttujan ”work-type” arvot ovat välillä 0–4, kun

(27)

taas muuttujan ”avg_glucose_level” arvot ovat välillä 55,12–271,74. Muuttujien skaalaamatta jättäminen vaikuttaa negatiivisesti neuroverkkomallin kouluttami- seen joko hidastaen oppimista tai tehden etenemisestä epävakaata [24]. Insi- nöörityötä tehdessäni tein aluksi virheen ja skaalasin koko tietoaineiston ennen kuin se oli jaettu erikseen kouluttamista ja validointia varten. Tämä johti niin kut- suttuun tiedon vuotamiseen (engl. data leak), joka tarkoittaa, että mallin koulut- tamiseen ei vaikuta pelkästään koulutusaineisto vaan vaikutteita tulee myös muualta [25]. Tämä johtui käytännössä siitä, että aineistoa skaalatessa uusien arvojen laskemiseen hyödynnetään kaikkia aineiston arvoja ja näin ollen, jos ai- neistoa ei ole vielä jaettu, tulevat validointiaineiston arvot vaikuttavat siihen, mil- laisia uusia arvoja koulutusaineistoon tulee. Tämän virheen korjatakseni jaoin aineiston ensin, jonka jälkeen skaalasin erikseen koulutus- ja validointiaineiston.

5.2.4 TensorFlow.keras

TensorFlow-kirjasto on tehty hyödynnettäväksi monipuolisesti erityyppisissä ko- neoppimisen ongelmissa. TensorFlow on käytettävissä usealla ohjelmointikie- lellä. Siitä löytyvät toteutukset Java-, Python-, C++- sekä JavaScript-kielille.

TensorFlow pitää sisällään Keras-moduulin, joka on toteutus erillisestä Keras- kirjastosta [26]. Keras on tehty erityisesti neuroverkkojen parissa työskentelyyn ja se on toteutettu Python-ohjelmointikielellä [27]. Kirjaston avulla voidaan luoda, kouluttaa ja arvioida neuroverkkomalleja. Kirjasto tarjoaa myös työkaluja tietoaineiston esikäsittelyyn esimerkiksi luonnollisen kielen ja kuvien parissa työskentelyyn.

Insinöörityön toteutuksessa hyödynsin Keras-moduulia neuroverkkomallien luo- miseen, kouluttamiseen ja sekä ennustustarkkuuden arviointiin. Ennustustark- kuutta arvioin objektin ”history” avulla. Objektiin tallentuu mallin ennustamisen tarkkuus koulutus- sekä validointiaineiston suhteen ja ennustusten virhe jokai- sella koulutuskierroksella.

Neuroverkkomallien luominen tapahtuu joko käyttämällä mallin konstruktoria, eli mallista olion luovaa metodia, jolle määritellään malliin haluttavat kerrokset, tai

(28)

luomalla ensin tyhjä malli, jolle voidaan myöhemmin lisätä kerroksia add()-meto- dia käyttäen. Mallia luodessa tulee myös päättää, millainen malli halutaan luoda. Insinöörityön toteutuksessa käytetyt mallit on tehty käyttäen Sequential()- metodia. Sequential()-metodilla luoduissa malleissa tieto kulkee mallin läpi ede- ten kerroksesta toiseen järjestelmällisesti.

5.3 Jupyter Notebook

Jupyter Notebook on avoimen lähdekoodin web-sovellus, joka on tarkoitettu monipuolisten, koodia sisältävien, dokumenttien tekemiseen. Jupyter Notebook -sovellusta ei ole tehty niinkään perinteiseen ohjelmointiin, vaan enemmänkin tiedon käsittelyyn ja koneoppimisen ongelmien ratkaisemiseen. Jupyter No- tebookilla tehtyihin tiedostoihin on mahdollista sisällyttää koodia, datan visuali- sointia kuvaajien tai taulukoiden muodossa sekä ohjelman toimintaa tai ratkais- tavaa ongelmaa selittäviä tekstipätkiä. Jupyterin verkkosivuilla kerrotaan Jupy- ter Notebookin olevan yhteensopiva Chrome-, Safari- ja Firefox-selaimilla. Jupy- ter Notebookin kerrotaan myös tukevan yli 40 ohjelmointikieltä. [28.]

Jupyter Notebookilla tehtyjen ohjelmien toteutukset verrattuna perinteisellä teks- tieditorilla tehtyihin toteutuksiin eroavat siten, että ohjelman koodi voi olla jaet- tuna lohkoihin ja koodin ajaminen tapahtuu lohko kerrallaan (kuva 9).

(29)

Kuva 9. Esimerkki koodilohkoista.

Lohkojen vasemmassa yläkulmassa oleva numero kertoo, monentenako lohko suoritetaan ajon aikana. Esimerkkikuvan tapauksessa (kuva 8) lohko 1 suorite- taan siis kolmantenatoista. Lohkon 1 suorittamisen jälkeen seuraavat järjestyk- sessä lohkot 2 ja 3. Lohkossa 1 tietoaineisto jaetaan kouluttamis- ja validointiai- neistoihin sekä skaalataan aineistot. Lohkossa 2 täsmennetään validointiaineis- ton tapausten määrä sekä selvitetään positiivisten tapausten osuus validointiai- neistossa. Lohkossa 3 lasketaan ja tulostetaan prosenttimuotoinen esitys posi- tiivisten tapausten määrästä.

Ohjelman lohkoissa ajamisen etuna on muun muassa se, että ohjelmaan voi- daan tehdä muutoksia ja kokeilla uuden tavan toimintaa ilman, että koko ohjel- maa tarvitsee ajaa uudestaan alusta loppuun. Näin voidaan helposti vaikkapa muuttaa jonkin yksittäisen tulostamisen formaattia tai verrata erilaisten arvojen vaikuttamista neuroverkkomallien suoriutumiseen.

Lohkojen väliin on mahdollista lisätä myöhemmin uusia lohkoja tarpeen mu- kaan. Näin voidaan esimerkiksi tehdä ensin toimiva ohjelma ja lisätä lohkojen

(30)

väliin tekstipätkiä kuvaamaan ohjelman toiminnallisuuksia tai kertomaan tar- peellista tietoa vaikkapa ohjelmassa käytetyistä muuttujista. Uudet lohkot voivat myös sisältää ohjelmakoodia ja lisätä jotakin toiminnallisuutta tai niiden avulla voidaan tehdä tarkistuksia vaikkapa tietoaineistoon liittyen, kuten insinöörityön toteutuksessa on tehty. Koodia sisältävien lohkojen välissä olevia tekstilohkoja ei tarvitse suorittaa joka kerta ohjelmaa ajaessa vaan niiden yli hypätään (kuva 10).

Kuva 10. Esimerkki tekstilohkosta.

Tekstilohkojen tekstiä voidaan muotoilla käyttämällä ”Markdown”-merkintäkieltä.

Leipätekstiä voi kirjoittaa lohkoon suoraan tai muotoilla sitä jakamalla tekstiä kappale elementteihin (engl. paragraph). Otsikoita voi tehdä käyttämällä ”#”- merkkiä. Otsikoita voi tehdä usean tasoisia ja taso määräytyy ”#”-merkkien määrästä. Ensimmäisen tason otsikoilla on yksi ”#”-merkki, toisen tason kaksi ja niin edelleen. Kuvassa 10 otsikko ”Attributes” on kolmannen tason otsikko, sen

(31)

raaka kirjoitusasu on siis muotoa ”### Attributes”. Markdownilla on myös mah- dollista tehdä esimerkiksi järjestettyjä- (engl. ordered list) ja järjestämättömiä lis- toja (engl. unordered list), taulukoita sekä linkkejä tekstin sekaan lisättäväksi.

[29.]

6 Neuroverkkomallit

Kokeilin insinöörityön toteutuksessa useaa, yli kymmentä, rakenteeltaan eri- laista mallia. Lopullista ennustustulosten vertailua varten jätin kaksi mallia. En- simmäinen malli on erittäin yksinkertainen rakenteeltaan ja toinen malli on en- simmäiseen verrattuna paljon monimutkaisempi. Kummatkin mallit ovat peräk- käismalleja (engl. sequential model), eli mallissa kulkeva tieto etenee aina ker- roksesta seuraavaan ja eteneminen tapahtuu lineaarisesti. Malleissa olevat pii- lokerrokset ovat tiheitä kerroksia (engl. dense layer), eli jokaisesta edellisen ker- roksen neuronista on yhteys (synapsi) jokaiseen seuraavan kerroksen neuro- niin.

Kummassakin neuroverkkomallissa on hyödynnetty häipymäkerrosta (engl. dro- pout layer). Häipymäkerros toimii siten, että se ikään kuin sammuttaa ennalta määritellyn määrän neuroneita jokaisella koulutuskierroksella. Näin ollen siis sa- tunnaisesti valitut neuronit eivät ole mukana jokaisella koulutuskierroksella, vaan ne saattavat olla epäaktiivisina. Häipymäkerroksen avulla pyritään vähen- tämään ylisovittamista (engl. over-fitting). Ylisovittaminen on sitä, kun mallin neuronien painojen ja vakioiden arvot optimoituvat ennustamaan koulutusai- neiston tapauksia mahdollisimman hyvin mutta tämän seurauksena muiden ta- pausten, esimerkiksi validointi- tai testiaineiston tapauksessa, heikkenee huo- mattavasti. Tätä selittää muun muassa se, että mallin kouluttamiseen käytetty koulutusaineisto ei välttämättä aina vastaa maailman tilannetta tai mukaile luon- nollisesti esiintyviä jakaumia luotettavasti. Esimerkiksi jos koulutusaineisto sisäl- täisi vain henkilöitä, joiden ikä on tasan 65 vuotta, saattaisi mallin olla hankala

(32)

ennustaa luotettavasti henkilöistä, joiden ikä poikkeaisi tästä aineistossa esiinty- västä iästä.

Kummankin neuroverkkomallin syötekerroksen ja piilokerrosten aktivaatiofunk- tiona on käytetty ReLu-askelfunktiota (ReLu ja sigmoidi aktivaatiofunktiot esi- telty kappaleessa 3.2). Ulostulokerroksen aktivaatiofunktiona on käytetty loo- gista funktiota, eli sigmoidia. Ulostulokerroksessa sigmoidin käyttäminen johtuu siitä, että mallin antama lopullinen tulos halutaan numeroarvona nollan ja yhden välillä. Tässä tapauksessa nolla tarkoittaa ”ei aivohalvausta” ja yksi tarkoittaa

”aivohalvaus”. Mallin tuottama desimaaliluku nollan ja yhden välillä ilmaisee siis tavallaan todennäköisyyttä jompaankumpaan tulokseen.

Yksinkertaisen mallin rakenne on seuraavanlainen (kuva 11).

Kuva 11. Yksinkertaisen neuroverkkomallin rakenne.

Yksinkertainen malli siis pitää sisällään syötekerroksen, yhden piilokerroksen, häipymäkerroksen sekä ulostulokerroksen. Piilokerroksella on 64 neuronia. Häi- vekerrokselle on annettu parametriksi arvo 0,2; tämä siis tarkoittaa, että 20 % arvoista ei osallistu meneillään olevaan koulutuskierrokseen. Koulutettavia pa- rametreja, synapsien painoja ja vakiotermejä, on mallilla yhteensä 879 kappa- letta. Koulutettavien parametrien määrä saadaan laskemalla summa kaikkien kerrosten synapsien painojen ja vakiotermien (engl. bias) määrästä. Esimerkiksi

(33)

kuvassa 11 olevan mallin syötekerroksessa on 10 neuronia ja piilokerroksessa on 64 neuronia. Tämän tiedon avulla voidaan laskea, että piilokerroksen ja syö- tekerroksen välillä on 10 * 64 synapsia, eli 640 synapsia, ja jokaisella synapsilla on oma paino. Lisäksi jokaisella kerroksen neuronilla on oma vakiotermi, joten vakiotermejä on 64 kappaletta. Näin ollen koulutettavia parametrejä piilokerrok- sella on yhteensä 640 synapsin painoa + 64 vakiotermiä eli 704 kappaletta.

Monimutkaisen neuroverkkomallin rakenne on esitelty kuvassa 12.

Kuva 12. Monimutkaisen neuroverkkomallin rakenne.

Monimutkainen neuroverkkomalli koostuu syötekerroksesta, kolmesta piiloker- roksesta, häipymäkerroksesta sekä ulostulokerroksesta. Ensimmäisessä piilo- kerroksessa on 256 neuronia, toisessa on 128 neuronia ja kolmannessa on 64 neuronia. Monimutkaisen mallin piilokerroksissa on siis yhteensä 448 neuronia, kun yksinkertaisessa neuroverkkomallissa piilokerroksen neutroneita on vain 64 kappaletta. Monimutkaisen neuroverkkomallin häipymäkerroksen parametrin ar- vona on lukuarvo 0,1; eli jokaisella koulutuskierroksella neuroneista 10 % ei osallistu toimintaan. Koulutettavia parametrejä monimutkaisessa mallissa on yh- teensä 44 143 kappaletta. Koulutettavien parametrien kokonaislukumäärä moni-

(34)

mutkaisessa mallissa on noin 5022 % verrattuna yksinkertaiseen malliin. Moni- mutkaisessa mallissa koulutettavia parametreja on siis yli 50-kertaisesti yksin- kertaiseen nähden. Koulutettavien parametrien määrä vaikuttaa esimerkiksi sii- hen, kuinka kauan mallin kouluttamisessa kestää. Mitä enemmän parametreja on, sitä raskaampaa laskeminen on ja sitä kauemmin aikaa se vie. Kun malli on monimutkaisempi ja se sisältää useampia kerroksia ja runsaasti neuroneita, voisi olettaa mallin olevan kykenevä ennustamaan aineiston muuttujien arvojen perusteella paremmin kuin yksinkertainen malli. Näin ei kuitenkaan aina ole juuri ylisovittamisesta johtuen.

Neuroverkkomalleja luodessa niille myös määritellään optimoija (engl. optimi- zer) sekä virhefunktio (engl. loss). TensorFlow.keras-moduuli tarjoaa monia eri optimoijia esimerkiksi RMSpropin, Adamin, Adadeltan ja Ftrl:n [27]. Kummassa- kin insinöörityön toteutuksen neuroverkkomallissa on käytetty RMSprop-opti- moijaa. Optimoijan tehtävänä on laskea mallille uusia arvoja synapsien painoille ja vakioarvoille. Optimoijasta riippuen vaihtelee hieman se, millä tavoin uudet arvot lasketaan. Virhefunktiota valittaessa tulee ottaa huomioon, millaisen on- gelman ratkaisemiseen malli on tehty. Esimerkiksi samaa virhefunktiota ei ole mahdollista hyödyntää regressio- ja luokitteluongelmissa. Kummassakin neuro- verkkomallissa on käytetty ”binary_crossentropy” -virhefunktiota sillä se on tar- koitettu hyödynnettäväksi binäärisen ennustamisen ongelmissa eli tapauksissa, joissa ennustuksella on kaksi mahdollista lopputulemaa. Virhefunktiota hyödyn- netään mallin kouluttamisessa siten, että sen arvoa pyritään minimoimaan mal- lia kouluttamalla. Mitä pienempi on virhefunktion arvo, sitä lähempänä mallin ennustukset ovat oikeita arvoja.

7 Tulokset

Neuroverkkomallien ennustustuloksien arvioimisen ja mallien keskinäisen ver- tailun kannalta oleellisia tarkkailtavia parametreja ovat virhefunktion arvo (engl.

loss) sekä ennustusten tarkkuus suhteessa tietoaineiston todellisiin arvoihin (engl. accuracy). Virhefunktion arvoa ja ennustustarkkuutta arvioidaan erikseen

(35)

koulutusaineiston ja validointiaineiston suhteen. Näin toimimalla pyritään simu- loimaan mallin hyödyllisyyttä todellisen aineiston ennustamisessa eikä pelkäs- tään koulutusaineiston tapauksiin mukautumisessa. Usein neuroverkkomallien arvioimisessa hyvä tapa arvioida malleja olisi jakaa tietoaineisto kolmeen osaan: koulutus-, validointi- ja testiaineistoon. Testiaineisto olisi aineisto, joka olisi kokonaan irrallaan mallin kouluttamisen vaiheista. Insinöörityön toteutuksen kannalta tämä ei kuitenkaan ollut mahdollista tietoaineiston puutteista johtuen.

Mikäli tietoaineisto olisi ollut laajempi tai edes tasaisemmin jakautunut kohde- muuttujan arvojen suhteen, olisi ollut mahdollista jakaa aineisto kolmeen osaan.

Yksinkertaisen neuroverkkomallin virhefunktion arvolla on laskeva trendi (kuva 13). Sen arvo siis pienenee koulutuskierrosten edetessä.

Kuva 13. Kuvaaja yksinkertaisen neuroverkkomallin virhefunktion arvoista.

Kuvaajasta voidaan havaita virhefunktion arvojen pienenevän niin koulutus- kuin validointiaineiston suhteen koulutuskierroksia eteenpäin mentäessä. Tämä

(36)

tarkoittaa siis, että mallin ennustusten ja todellisten arvojen välinen virhe vähe- nee koulutusprosessin edetessä.

Monimutkaisen neuroverkkomallin virhefunktion arvojen kuvaajasta (kuva 14), voidaan havaita, että virhefunktion arvo ei ole laskenut yhtä menestyksekkäästi kuin yksinkertaisen mallin tapauksessa.

Kuva 14. Kuvaaja monimutkaisen neuroverkkomallin virhefunktion arvoista.

Monimutkaisen neuroverkkomallin virhefunktion arvo laskee koulutusaineiston suhteen koulutusprosessin aikana, mutta validointiaineiston suhteen virhefunk- tion arvo ei ole koko ajan laskussa, vaan jossain kohtaa se lähtee nousuun ja saa jopa suurempia arvoja kuin alun perin. Tästä voidaan päätellä mallin kärsi- neen ylioppimisesta, neuronien painot ja vakiotermit ovat siis mukautuneet lii- kaa ennustamaan koulutusaineiston arvoja oikein ja tästä seurauksena neuro- verkkomalli ei ennusta koulutusaineiston ulkopuolisia tapauksia, tässä tapauk- sessa validointiaineistoa luotettavasti.

(37)

Yksinkertaisen neuroverkkomallin avulla saavutettiin parhaimmillaan 95,63 % tarkkuus ennustustuloksille validointiaineiston suhteen (kuva 15).

Kuva 15. Kuvaaja yksinkertaisen neuroverkkomallin ennustusten tarkkuudesta.

Yksinkertainen malli saavuttaa parhaan ennustustarkkuutensa koulutus- ja vali- dointiaineiston suhteen aikaisin koulutusprosessin aikana eikä tarkkuus vaihtele suuresti koulutuskierrosten edetessä. Voidaan siis melko suurella varmuudella todeta, että koulutuskierrosten lisääminen ei vaikuta positiivisesti ennustustark- kuuteen.

Monimutkaisella neuroverkkomallilla saavutetut ennustustulokset vaihtelevat melko paljon koulutuskierrosten välillä. Tämä on nähtävillä mallin ennustustark- kuutta havainnollistavasta kuvaajasta (kuva 16).

(38)

Kuva 16. Kuvaaja monimutkaisen neuroverkkomallin ennustusten tarkkuudesta.

Ennustustarkkuus validointiaineiston suhteen on parhaimmillaan 95,69 %. Joil- lakin koulutuskierroksilla monimutkainen malli siis ennusti yksinkertaista mallia 0,06 % paremmin. Ero ei ole kovinkaan merkittävä ja monimutkaista mallia ei näiden satunnaisten parempien tulosten perusteella voida pitää parempana kuin yksinkertainen malli. Kuvaajia tarkastelemalla (kuva 16) voidaan havaita, että ennustustarkkuus koulutusaineiston myötä paranee pikkuhiljaa koulutus- prosessin edetessä. Validointiaineiston ennustamisen suhteen kuitenkin on ha- vaittavissa, että mallin ennustustarkkuus vaihtelee suuresti koulutuskierroksesta toiseen. Huonoimmillaan ennustustarkkuus on 94 % validointiaineiston suhteen, ennustustarkkuus on siis koulutusprosessin lopussa huonompi kuin koulutus- prosessin ensimmäisten kierrosten aikana.

Kummankin neuroverkkomallin ennustamisen tarkkuus jättää toivomisen varaa.

Vaikka yli 95 % ennustustarkkuus kuulostaa vaikuttavalta, tulee kuitenkin ottaa huomioon, että tietoaineiston kohdemuuttujan arvojen jakauman suhteesta joh- tuen voidaan saavuttaa noin 95 % ennustustarkkuus pelkästään sanomalla, että

(39)

kaikkien tapausten kohdemuuttujan arvo on negatiivinen. Yksi suurimmista syistä siihen, miksi malleilla ei pystytty saavuttamaan parempia ennustustulok- sia on muun muassa se, että aineisto sisältää liian vähän kohdemuuttujan posi- tiivia arvoja sisältäviä tapauksia. Toinen hankaloittava tekijä on tietysti se, että vaikka tietoaineistossa on paljon tapauksia, joilla on monia riskitekijöitä aivohal- vaukseen, kuten korkea veren glukoositaso, ylipaino ja tupakointi, eivät tämän- laiset tapaukset olleet kuitenkaan yleisesti aineistossa saaneet aivohalvausta.

Ongelmana mallin kouluttamisen kannalta on myös se, että ei voida ottaa huo- mioon näiden tapausten mahdollisesti sairastuvan aivohalvaukseen myöhem- min, vaikka vielä sellaista ei ole ollut.

8 Yhteenveto

Insinöörityön tarkoituksena oli luoda neuroverkkomalli ennustamaan aivohal- vausta tietoaineistosta aineiston muuttujien arvojen perusteella. Lopullista en- nustamistarkkuuden arvioimista varten hyödynnettiin kahta neuroverkkomallia.

Tässä työssä esiteltiin aivohalvausta, aivohalvauksen suurimpia riskitekijöitä sekä käytössä ollutta tietoaineistoa verraten aineiston muuttujien arvoja riskite- kijöihin. Työssä paneuduttiin myös neuroverkkojen toimintaan sekä nykyaikai- siin teknologioihin, joita hyödynnetään tiedonkäsittelyssä varsinkin koneoppimi- sen näkökulmasta.

Insinöörityö alkoi tietoaineistoon perehtymisellä ja aineiston esikäsittelemisellä.

Aineiston esikäsittelyn jälkeen luotiin neuroverkkomallit, joiden suoriutumista ar- vioitiin tarkkailemalla näiden mallien ennustamisen tarkkuutta ja virhefunktion arvoa. Työssä käytiin myös läpi neuroverkkomalleilla saavutettuja ennustustu- loksia sekä pohdittiin, miten puutteet tietoaineistossa mahdollisesti vaikuttivat malleilla saavutettuihin ennustustuloksiin.

Insinöörityön tuloksena saatiin aikaan kaksi rakenteeltaan erilaista neuroverkko- mallia, toinen yksinkertainen ja toinen huomattavasti monimutkaisempi. Näiden mallien ennustustarkkuutta ja virhefunktion arvoa tutkailtaessa ja vertailtaessa

(40)

havaittiin yksinkertaisen mallin ennustavan arvoja monimutkaista mallia luotetta- vammin, sillä monimutkainen malli kärsi ylisovittamisesta. Ylisovittaminen ha- vaittiin tutkailemalla virhefunktion arvon muutoksia koulutus- ja validointiaineis- ton suhteen.

(41)

Lähteet

1 Atula, Sari. 2019. Aivohalvaus (aivoinfarkti ja aivoverenvuoto). Verkkoai- neisto. <https://www.terveyskirjasto.fi/dlk00001>. 17.2.2019. Luettu 30.3.2021.

2 Aivohalvaus (stroke). Verkkoaineisto. <https://thl.fi/fi/tutkimus-ja-kehittami- nen/tutkimukset-ja-hankkeet/perfect/osahankkeet/aivohalvaus-stroke>.

Päivitetty 9.2.2017. Luettu 30.3.2021.

3 Suvilehto, Jyry. 2020. Syvät Neuroverkot. Verkkoaineisto.

<https://www.csc.fi/web/blog/post/-/blogs/syvat-neuroverk-1>. Luettu 30.3.2021.

4 Neuroverkot. Verkkoaineisto. <https://fi.wikipedia.org/wiki/Neuroverkot>.

Päivitetty 3.1.2021. Luettu 30.3.2021.

5 Sivarajkumar, Sonish. 2019. ReLu – Most popular Activation Function for Deep Neural Networks. Verkkoaineisto. <https://medium.com/@sonish.si- varajkumar/relu-most-popular-activation-function-for-deep-neural-net- works-10160af37dda>. Luettu 1.4.2021.

6 Tuominen, Heli. Johdatus tekoälyn taustalla olevaan matematiikkaan.

Verkkoaineisto. <https://tim.jyu.fi/view/143092#vastavirta>. Päivitetty 1.4.2021. Luettu 3.4.2021.

7 fedesoriano (nimimerkki). Stroke Prediction Dataset. Verkkoaineisto.

<https://www.kaggle.com/fedesoriano/stroke-prediction-dataset>. Päivi- tetty 26.1.2021. Luettu 1.4.2021.

8 Diabetes. Verkkoaineisto. <https://www.mayoclinic.org/diseases-conditi- ons/diabetes/diagnosis-treatment/drc-20371451>. Luettu 2.4.2021.

9 Mustajoki, Pertti. 2020. Painoindeksi (BMI). Verkkoaineisto.

<https://www.terveyskirjasto.fi/dlk01001>. Luettu 2.4.2021.

10 Maladkar, Kishan. 2018. 5 Ways To Handle Missing Values In Machine Learning Datasets. Verkkoaineisto. <https://analyticsindiamag.com/5- ways-handle-missing-values-machine-learning-datasets/>. Luettu 2.4.2021.

11 Women Have a Higher Risk of Stroke. Verkkoaineisto.

<https://www.stroke.org/en/about-stroke/stroke-risk-factors/women-have- a-higher-risk-of-stroke>. Päivitetty 5.12.2018. Luettu 6.4.2021.

12 Stroke can occur in children. Verkkoaineisto. <https://www.better- health.vic.gov.au/health/ConditionsAndTreatments/stroke-can-occur-in- children>. Luettu 6.4.2021.

(42)

13 Wajngarten, Mauricio; Silva, Sampaio, Gisele. 2019. Hypertension and Stroke: Update on Treatment. Verkkoaineisto. <https://www.ecrjour- nal.com/articles/hypertension-and-stroke-update-treatment>. Luettu 6.4.2021.

14 Moawad, Heidi. 2021. How Marriage Affects Your Chances of a Stroke.

Verkkoaineisto. <https://www.verywellhealth.com/your-marriage-affects- your-chances-of-having-a-stroke-3145876>. Luettu 6.4.2021.

15 Kapral, Moira; Austin, Peter; Jeyakumar, Geerthana; Hall, Ruth; Chu, Anna; Khan, Anam; Jin, Albert; Martin, Cally; Manuel, Doug; Silver, Frank;

Swartz, Richard; Tu, Jack. 2019. Rural-Urban Differences in Stroke Risk Factors, Incidence, and Mortality in People With and Without Prior Stroke.

Verkkoaineisto. <https://www.ahajournals.org/doi/10.1161/CIRCOUT- COMES.118.004973>. Luettu 6.4.2021.

16 YK Sugi (nimimerkki). What exactly can you do with Python? Here are Py- thon’s 3 main applications. 2018. Verkkoaineisto. <https://www.freecode- camp.org/news/what-can-you-do-with-python-the-3-main-applications- 518db9a68a78/>. Luettu 7.4.2021.

17 Ohjelmointiparadigma. Verkkoaineisto. <https://fi.wikipedia.org/wiki/Ohjel- mointiparadigma>. Päivitetty 24.3.2021. Luettu 7.4.2021.

18 Python Introduction. Verkkoaineisto. <https://www.w3schools.com/pyt- hon/python_intro.asp>. Luettu 7.4.2021.

19 Ohjelmoinnin MOOC 2019. Ohjelmointiparadigmoja. Verkkoaineisto.

<https://ohjelmointi-19.mooc.fi/osa-7/1-ohjelmointiparadigmoja>. Luettu 7.4.2021.

20 Heinonen, Matti. 1996. Funktionaalinen ohjelmointi. Verkkoaineisto.

<http://www.mit.jyu.fi/opiskelu/seminaarit/ohjelmistotekniikka/funktion/>.

Luettu 7.4.2021.

21 Pandas Introduction. Verkkoaineisto. <https://www.w3schools.com/pyt- hon/pandas/pandas_intro.asp>. Luettu 8.4.2021.

22 Machine Learning in Python. Verkkoaineisto. <https://scikit-learn.org/sta- ble/>. Luettu 9.4.2021.

23 sklearn.model_selection.train_test_split. Verkkoaineisto. <https://scikit- learn.org/stable/modules/generated/sklearn.model_selec-

tion.train_test_split.html>. Luettu 9.4.2021.

24 Brownlee, Jason. 2019. How to use Data Scaling Improve Learning Model Stability and Performance. Verkkoaineisto. <https://machinelearningmas- tery.com/how-to-improve-neural-network-stability-and-modeling-perfor- mance-with-data-scaling/>. Päivitetty 25.8.2020. Luettu 9.4.2021.

(43)

25 Brownlee, Jason. 2016. Data Leakage in Machine Learning. Verkkoai- neisto. <https://machinelearningmastery.com/data-leakage-machine-lear- ning/>. Päivitetty 15.8.2020. Luettu 9.4.2021.

26 Module: tf.keras. Verkkoaineisto. <https://www.ten-

sorflow.org/api_docs/python/tf/keras>. Päivitetty 27.3.2021. Luettu 10.4.2021.

27 About Keras. Verkkoaineisto. <https://keras.io/about/>. Luettu 10.4.2021.

28 Project Jupyter. Verkkoaineisto. <https://jupyter.org/>. Päivitetty 2.4.2021.

Luettu 11.4.2021.

29 Pritchard, Adam. Markdown Cheatsheet. Verkkoaineisto.

<https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet>.

Päivitetty 29.5.2017. Luettu 12.4.2021.

Viittaukset

LIITTYVÄT TIEDOSTOT

Näin ollen yhdis- tetyllä funktiolla ei ole raja-arvoa origossa eikä yhdis- tetyn funktion raja-arvoa koskeva otaksuma ainakaan tässä tapauksessa päde.. Voisi tietenkin ajatella,

– Jos kyselyn kohteiden poiminnassa on käytetty satunnaisotantaa, kyselyn tuloksiin sisältyvälle epävarmuudelle ja satunnaisuudelle voidaan muodostaa tilastollinen malli,

Näiden tu- losten perusteella äänennopeuden avulla voidaan havaita tablettien välillä olevat erot her- kemmin kuin myötöpaineen arvojen avulla.. Myötöpaineen

Tuloksista (kuva 57 ja kuva 58) voidaan havaita, että vaipan lämmöneristävyydellä ei ole oleellista vaikutusta energiankulu- tukseen, mutta sen sijaan hallin rata-alueen

Saman työprosessimallin avulla työ voidaan suorittaa tai työmenetelmät voidaan esimerkiksi esitellä muille.. Työprosessista teh- dyn mallin avulla työskenneltäessä voidaan

Jos lapsen vanhemmalla tai vanhemmilla on diagnosoitu lukemisen vaikeus, ja lähisuvussa on myös esiintynyt vastaavia hankaluuksia lukemisen oppimisessa, on näillä ns..

Kun tarkastellaan Tammisen ja Nilsson Hakkalan arviota koko vientiin liittyvästä kotimaisesta arvonlisäykses- tä, sen kehitys vuoden 2008 jälkeen näyttää jotakuinkin yhtä

Eksploratiivisessa tutkimuksessa niin Cronbachin alfan kuin yhteisreliabiliteetin arvojen on ylitettävä 0,60 raja, jotta ulkoisen mallin reliabiliteettia voidaan pitää