Aihearkisto: Mallinna

Tilastollisia ja matemaattisia malleja

Koneoppiminen ja scikit-learn -kirjasto

Pythonia käytettäessä useimmat koneoppimisen mallit löytyvät sklearn (scikit-learn) -kirjastosta. Tästä artikkelista opit  sklearn-kirjaston mallien käytön perusperiaatteet.

Mallien käyttö sujuu seuraavien vaiheiden kautta:

  • Valmistele data.
  • Tuo malli.
  • Sovita malli dataan.
  • Arvioi mallin sopivuutta dataan.
  • Ennusta mallin avulla.

Valmistele data

Käytettävään dataan täytyy tutustua huolellisesti etukäteen. Erityisesti kannattaa kiinnittää huomiota seuraaviin:

  • Puuttuvat arvot: Useimmat mallit eivät siedä puuttuvia muuttujien arvoja. Puuttuvia arvoja sisältävät rivit pitää joka poistaa tai korvata puuttuvat arvot tarkoituksenmukaisella tavalla.

Ohjatun (supervised) oppimisen malleissa tarvitset kaksi dataframea:

  • Selittävien muuttujien arvot (feature-matriisi , x-muuttujat). Selittävien muuttujien dataframen nimeksi voit antaa esimerkiksi X.
  • Selitettävän/ennustettavan muuttujan arvot (target, labels, y-muuttuja). Selitettävän muuttujan dataframen nimeksi voit antaa esimerksi y.

Ohjaamattomissa (unsupervised) malleissa tarvitset ainoastaan feature-matriisin.

Tuo malli

Tuo malli sklearn-kirjastosta. Esimerkiksi lineaarisen regressiomallin tuot seuraavasti:

from sklearn.linear_model import LinearRegression

Sovita malli dataan

Sovita malli dataan fit-funktiolla ja tallenna syntyvä olio muuttujan arvoksi. Esimerkiksi seuraavassa sovitetaan lineaarinen regressio dataan X (selittävien muuttujien dataframe) ja y (ennustettavan muuttujan arvot).

malli = LinearRegression().fit(X, y)

Syntynyt olio (malli)  sisältää monenlaista tietoa mallista. Monissa netistä ja kirjallisuudesta löytyvissä esimerkeissä edellinen tehdään kahdessa vaiheessa:

malli = LinearRegression()
malli.fit(X, y)

Tuloksena syntynyt malli-olio on sama muodostettiinpa se kummalla tavalla tahansa.
Mallia voidaan tuunata erilaisilla lisäparametreilla. Mahdolliset lisäparametrit kirjoitetaan sulkujen sisään. Esimerkiksi seuraavassa muodostetaan lineaarinen regressiomalli, johon ei otetan mukaan lainkaan vakiotermiä (intercept).

malli = LinearRegression(fit_intercept = False).fit(X, y)

Mallien tuunaus lisäparametreilla edellyttää mallien hyvää tuntemusta.

Arvioi mallin sopivuutta

Sopivuuden arviointiin on monia menetelmiä. Voit esimerkiksi tulostaa selityskertoimen arvon komennolla malli.score(X, y). Selityskerroin ilmoittaa kuinka monta prosenttia selitettävän muuttujan vaihtelusta malli selittää.

Ennusta mallin avulla

Ennakoivassa analytiikassa keskeisin vaihe on tietenkin ennusteiden laskeminen uudelle datalle. Jos dataframe X_uusi sisältää uusia selittävän muuttujan arvoja, niin saat ennusteet komennolla:

malli.predict(X_uusi)

Lisätietoa

Lisätietoa koneoppimisen koodiesimerkeistä https://tilastoapu.wordpress.com/python/

Data-analytiikka Pythonilla

Päivitetty 15.11.2019.

Data-analytiikka antaa vastauksia kysymyksiin

Data-analytiikka on tavoitteellista toimintaa: tavoitteena on vastata kysymyksiin. Data-analytiikan avulla vastataan monenlaisiin kysymyksiin:

  • Minkälainen ikäjakauma asiakkaillamme on?
  • Mihin toimintamme osa-alueisiin asiakkaamme ovat tyytymättömiä?
  • Onko asiakkaan iällä yhteyttä asiakastyytyväisyyteen?
  • Miten yrityksen työilmapiiri on muuttunut viimevuodesta?
  • Ketkä asiakkaistamme ovat vaarassa siirtyä kilpailijalle?
  • Keille tuotteen markkinointikampanja kannattaa suunnata?
  • Mikä mainosvaihtoehdoista tehoaa parhaiten kohderyhmään?
  • Mitä oheistuotteita verkkokaupasta ostaneella kannattaa tarjota?
  • Mikä on tuotteen ennustettu kysyntä ensi kuussa?
  • Liittyykö vakuutuskorvaushakemukseen vakuutuspetos?
  • Millä todennäköisyydellä laina-asiakas ei pysty maksamaan lainaansa takaisin?

Data

Tavoitteiden (kysymykset, joihin halutaan vastata) asettamisen jälkeen pitää selvittää minkälaista dataa tarvitaan. Data voi olla esimerkiksi:

  • Yrityksen tietokannoista löytyvää dataa (esimerkiksi CRM- ja ERP-järjestelmistä).
  • Erilaisten tiedontuottajien tarjoamaa ilmaista tai maksullista dataa.
  • Varta vasten kyselytutkimuksella tai kokeellisella tutkimuksella kerättyä dataa.
  • Erilaisten sensorien/mittalaitteiden mittaamaa dataa.

Blogissani rajoitun rakenteelliseen eli strukturoituun dataan. Rakenteellinen data on sellaista, joka voidaan tallentaa taulukkomuotoon. Yleisiä data-analytiikkaan sopivia tiedostomuotoja ovat pilkkueroteltu tekstimuoto (.csv) ja Excel-muoto (.xls tai .xlsx). Tietokannoista data haetaan kyselyiden (sql kyselykieli) avulla. Nettikyselyohjelmista datan saa yleensä ulos pilkkuerotellussa tekstimuodossa tai Excel-muodossa.

Kun sopiva data on olemassa, niin datasta saadaan vastauksia kysymyksiin seuraavien vaiheiden kautta:

  • Datan valmistelu
  • Kuvaileva analytiikka
  • Selittävä analytiikka; selittävään analytiikkaan liittyy usein tilastollisen merkitsevyyden testaaminen: tilastollinen merkitsevyys kertoo, millä varmuudella otoksessa havaittuja eroja ja riippuvuuksia voidaan yleistää isompaan perusjoukkoon, josta otos on otettu.
  • Ennakoiva analytiikka; tämä tarkoittaa yleensä koneoppimisen mallien hyödyntämistä.

Datan valmistelu

Datan valmistelulla tarkoitan datojen yhdistelyä, dataan tutustumista, datan siivoamista ja datan muunnoksia.

Datan valmistelu voi olla data-analytiikan aikaa vievin vaihe. Ensimmäiseksi kannattaa varmistaa datan taulukkomuotoisuus: muuttujien nimet / kenttien nimet / sarakeotsikot ovat ensimmäisellä rivillä, datassa ei ole tarpeettomia tyhjiä rivejä tai sarakkeita, kuhunkin tilastoyksikköön/havaintoyksikköön liittyvät tiedot ovat yhdellä rivillä. Datan valmistelu voi sisältää muiden muassa seuraavia:

  • Eri lähteistä peräisin olevien datojen yhdistely.
  • Muuttujien uudelleen nimeäminen: jatkotoimet sujuvat sutjakkaammin, jos nimet ovat lyhyitä ja helposti tunnistettavia.
  • Desimaalipilkkujen tarkistaminen: vaikka Suomessa desimaalipilkkuna käytetään pilkkua, niin Pythonissa täytyy käyttää pistettä.
  • Päivämäärien muuntaminen päivämääriksi tunnistettavaan muotoon.
  • Mittayksiköiden tarkistaminen ja tarvittavien muunnosten tekeminen.
  • Puuttuvien arvojen käsittely: poistetaanko puuttuvia arvoja sisältävät rivit, korvataanko puuttuvat arvot jollain, miten puuttuvia arvoja merkitään?
  • Uusien muuttujien laskeminen: esimerkiksi summamuuttuja useasta mielipidemuuttujasta, tilauksen hinta tilausmäärän ja yksikköhinnan avulla jne.
  • Arvojen luokittelu ja uudelleenkoodaaminen: esimerkiksi ikäluokat iän arvoista.

Kuvaileva analytiikka

Datan kuvailu voi sisältää seuraavia:

  • Lukumäärä- ja prosenttiyhteenvetojen laskeminen (frekvenssitaulukot).
  • Tilastollisten tunnuslukujen laskeminen (keskiarvo, keskihajonta, viiden luvun yhteenveto).
  • Prosenttimuutosten laskeminen aikasarjoille.
  • Aikasarjojen tarkastelu viivakaavioina.
  • Liukuvien keskiarvojen esittäminen aikasarjojen yhteydessä.

Kuvailun tuloksia kannattaa visualisoida ja havainnollistaa hyvin viimeistellyillä taulukoilla ja kaavioilla.

Selittävä analytiikka ja tilastollinen merkitsevyys

Selittävä analytiikka voi sisältää seuraavia:

  • Tilastollisten tunnuslukujen vertailua eri ryhmissä.
  • Kategoristen muuttujien riippuvuuden tarkastelua ristiintaulukoimalla.
  • Määrällisten muuttujien välisten korrelaatioiden tarkastelua.
  • Havaittujen erojen ja riippuvuuksien tilastollisen merkitsevyyden tarkastelua.

Jos käytetty data on otos isommasta perusjoukosta, niin tulokset kuvaavat otosta. Jos tarkoituksena on arvioida koko perusjoukkoa, niin otoksessa havaittujen erojen ja riippuvuuksien tilastollinen merkitsevyys kertoo, millä varmuudella eroja ja riippuvuuksia voidaan yleistää otoksesta perusjoukkoon.

Ennakoiva analytiikka ja koneoppiminen

Koneoppimisen malleilla voidaan luokitella (asiakkaat luottoriski-asiakkaisiin ja muihin, vakuutuskorvaushakemukset selviin tapauksiin ja petokselta haiskahtaviin, sähköpostiviestit roskapostiin ja kunnollisiin viesteihin jne.) ja ennakoida määrällisen muuttujan arvoja (käytetyn auton hinta, tuleva kysyntä jne.). Koneoppiminen perustuu siihen, että kone oppii käytettävän mallin parametrit olemassa olevasta datasta ja tämän jälkeen mallia voidaan soveltaa uuteen dataan.

Koneoppimisalgoritmit voidaan luokitella  seuraavasti (suomennokset eivät ole vakiintuneita):

  • Supervised learning (ohjattu oppiminen): Algoritmi opetetaan opetusdatalla (training data). Esimerkiksi roskapostisuodatin opetetaan sähköpostidatalla, jossa on erilaisia tietoja kustakin sähköpostiviestistä sekä tieto siitä oliko sähköpostiviesti roskapostia. Tämän datan perusteella muodostuu malli, jota käyttäen tulevista sähköpostiviesteistä voidaan tunnistaa roskapostiviestit.
  • Unsupervised learning (ohjaamaton oppiminen): Esimerkiksi asiakkaiden jakaminen asiakassegmentteihin.
  • Reinforcement learning (vahvistusoppiminen): Algoritmi suorittaa toimia ja saa niistä palautetta palkkioiden ja rangaistuksen muodoissa. Algoritmi oppii saamistaan palkkioista ja rangaistuksista. Vahvistettua oppimista käytetään esimerkiksi robotiikassa.

Seuraavassa jaotellaan ohjattu ja ohjaamaton oppiminen edelleen alatyyppeihin:

kone1

Ohjattu oppiminen

Label tarkoittaa ennakoitavaa asiaa (selitettävää muuttujaa).

Diskreetti label

Jos ennakoitava asia on diskreetti (epäjatkuva), niin kyseeseen tulevat luokittelua suorittavat algoritmit, esimerkiksi logistinen regressio tai päätöspuut.

Esimerkkejä, joissa on diskreetti label:

  • Roskapostisuodatin: Label on tieto siitä, onko sähköpostiviesti roskapostia vai ei?
  • Lääketieteellinen diagnoosi: Label on tieto siitä, onko tutkitulla potilaalla tietty sairaus vai ei?
  • Vakuutuspetosten tunnistaminen: Label on tieto siitä, liittyykö korvaushakemukseen petos vai ei?

Jatkuva label

Jos ennakoitava asia on jatkuva, niin kyseeseen tulevat regressiomallit ja aikasarjaennustamisen menetelmät. Esimerkkejä, joissa on jatkuva label:

  • Vanhan osakehuoneiston hinnan arviointi: Label on asunnon hinta.
  • Kysynnän ennustaminen aikaisemman kysynnän perusteella: Label on kysyntä.

Ohjaamaton oppiminen

Ohjaamattomassa oppimisessa ei ole labelia (selitettävää/ennakoitavaa muuttujaa). Ohjaamattoman oppimisen algoritmi muodostaa mallin suoraan datasta. Esimerkkinä asiakassegmenttien määrittäminen asiakasdatan pohjalta. Paljon käytetty algoritmi on k-means clustering.

Jos datassa on paljon muuttujia, jotka mittaavat osittain samoja asioita, niin dimensionality reduction -tyyppisillä algoritmeilla voidaan pienentää muuttujien määrää yhdistämällä niitä kimpuiksi. Tunnetuin algoritmi tähän tarkoitukseen on pääkomponenttianalyysi.

Data-analytiikkaa Pythonilla

Jos aiot käyttää Pythonia data-analytiikassa, niin aloita asentamalla Anaconda.

 

Logistinen regressio 2

Päivitetty 5.6.2014

Tämä artikkeli on jatkoa artikkeliin Logistinen regressio.

Askeltava (Stepwise) menetelmä

Selittäviä muuttujia ei pidä ottaa logistiseen regressiomalliin enempää kuin on tarpeellista. Paras tilanne on, jos tiedän mukaan otettavat selittävät muuttujat aiempien aineistojen tai teorian kautta. Jos aiempaa tietoa tai teoriaa ei ole, niin voin käyttää apuna askeltavaa (Stepwise) menetelmää.

SPSS tarjoaa askellukseen Forward– ja Backward-menetelmiä.

Forward-menetelmässä SPSS aloittaa mallista, joka sisältää pelkästään vakiotermin. SPSS lisää malliin selittäviä muuttujia yksi kerrallaan. Lisättävä muuttuja on se, joka lisää eniten mallin selitysvoimaa. Uuden muuttujan lisäämisen jälkeen SPSS tarkistaa, pitäisikö jokin malliin jo lisätyistä muuttujista poistaa. Forward LR -menetelmässä poistamisen kriteerinä käytetään log-likelihoodia. Jos muuttujan poistaminen ei muuta merkitsevästi mallin log-likelihoodia, niin SPSS poistaa muuttujan mallista. Muuttujien lisääminen lopetetaan, kun mikään uusi muuttuja ei enää merkittävästi paranna mallin selitysvoimaa.

Backward-menetelmässä otetaan ensimmäiseen malliin mukaan kaikki ehdokkaat. Tämän jälkeen selittäviä muuttujia poistetaan mallista yksi kerrallaan. Backward LR -menetelmässä poistamisen kriteerinä käytetään log-likelihoodia. Jos muuttujan poistaminen ei muuta merkitsevästi mallin log-likelihoodia, niin SPSS poistaa muuttujan mallista. Muuttujien poistaminen lopetetaan, kun minkä tahansa muuttujan poistaminen heikentää merkittävästi mallin selitysvoimaa.

Käytännössä Forward– ja Backward-menetelmien tuottamat mallit usein poikkeavat toisistaan. Menetelmän ja lopullisen mallin valinnassa kannattaa käyttää tapauskohtaista harkintaa.

Esimerkki

Käytän seuraavassa SPSS-muotoista aineistoa logit2.sav. Aineiston lähde ja tarkempi kuvaus: http://logisticregressionanalysis.com/303-what-a-logistic-regression-data-set-looks-like-an-example/

Suoritan laskennan SPSS:llä:

  • Valitsen Analyze – Regression – Binary Logistic.
  • Siirrän selitettävän muuttujan Dependent-ruutuun.
  • Siirrän selittävät muuttujat Covariates-ruutuun.
  • Valitsen Method-alasvetovalikosta menetelmän; tässä esimerkissä Forward LR.
  • Valitsen OK.

logit4

SPSS:n tulosteissa otsikon Block 0 alla on tiedot mallista, jossa on mukana pelkästään vakiotermi. Askeltavan menetelmän vaiheet ja lopullisen mallin löydän otsikon Block 1 alta.

Omnibus-taulukon Model-rivin Chi-square-sarake kertoo kuinka paljon -2 Log likelihood (-2 Log likelihoodista lisää artikkelissa Log likelihood) on muuttunut verrattuna edeltävään malliin. Tämä muutos noudattaa khiin neliö -jakaumaa, jonka perusteella saadaan muutoksen merkitsevyys (Sig.). Esimerkissämme jokainen malliin lisätyistä viidestä selittävästä muuttujasta on parantanut mallia merkitsevästi (Sig.<0,001).

logit5

Variables in the Equation -taulukosta näen malliin lisätyt muuttujat.

logit6

Osa aineistosta testiaineistona

Data mining -tyyppisessä analyysissä analysoidaan usein isoja aineistoja. Ison aineiston tapauksessa mallin sopivuutta voidaan testata laskemalla malli osalle aineistosta ja testaamalla kuinka hyvin malli sopii lopulle aineistolle. Tätä varten voin lisätä SPSS-aineistoon ylimääräisen muuttujan, joka erottelee aineiston kahteen osaan:

  • osa, jonka perusteella lasketaan malli
  • osa, jolla testataan lasketun mallin sopivuutta.

Voin lisätä ylimääräisen muuttujan SPSS:n Transform – Compute Variable -toiminnolla:

  • Valitsen Transform – Compute Variable.
  • Kirjoitan uudelle muuttujalle nimen Target Variable -ruutuun.
  • Kirjoitan Numeric Expression -ruutuun funktion RV.BERNOULLI(0.5).
  • Valitsen OK.

Näin laskettu uusi muuttuja saa satunnaisesti arvoja 0 ja 1 siten, että puolet on nollia ja puolet ykkösiä. Voin lisätä tämän muuttujan Logistic Regression -määrittelyikkunassa Selection Variable -ruutuun (olen antanut muuttujalle nimeksi Random). SPSS:lle täytyy kertoa Rule-painikkeella, mille muuttujan arvoille lasketaan logistinen regressio. Seuraavassa olen laskemassa logistista regressiota niiden rivien pohjalta, joissa Random-muuttujan arvo on 1.

logit7

Tulosteiden joukossa on muiden muassa Classification Table, josta näen kuinka hyvin malli ennustaa Buy-muuttujan arvoja. Lopullisessa mallissa (Step 4) malli ennustaa ostaneista (Buy=1) 75 % oikein. Aineiston toisessa puolikkaassa malli ennustaa ostaneista (Buy=1) 80,5 % oikein. Ainakin tässä mielessä malli näyttäisi toimivan hyvin.

logit8

Jos kokeilet yllä kuvattua esimerkkiaineistolla, niin voit hyvinkin päätyä erilaiseen malliin, koska aineisto voi olla eri tavalla jaettu kahteen osaan.

Kaiken kaikkiaan on kiusallista ja hämmentävää, koska samalla aineistolla voin päätyä eri menetelmillä erilaisiin malleihin. Mallin valinnassa täytyy käyttää tilannekohtaista harkintaa.

 

 

 

Logistinen regressio

Päivitetty 5.6.2014

Mistä on kyse?

Esimerkki. Lomaosakkeita myyvä yritys tarjoaa huippuhalvan viikonlopun kylpylässä lomaosakkeen esittelyyn osallistuville. Tarjous kannattaa kohdistaa henkilöille, joiden todennäköisyys lomaosakkeen ostoon on tavanomaista suurempi. Aiempien esittelyiden ja toteutuneiden kauppojen perusteella voidaan laatia malli, jolla lasketaan taustatietojen perusteella henkilön todennäköisyys lomaosakkeen ostoon.

Esimerkki. Luottoriskin arvioimiseksi pankin on hyvä tietää kuinka todennäköisesti luotonottajalle tulee maksuhäiriöitä. Aiempien maksuhäiriöiden perusteella voidaan laatia malli, jolla lasketaan taustatietojen perusteella luotonottajan todennäköisyys maksuhäiriöille.

Esimerkki. Lääkäri diagnosoi sairauden. Aiempien potilaiden potilastietojen perusteella voidaan laatia malli, jolla lasketaan potilaan parantumisen todennäköisyys.

Edellä kuvatuissa esimerkeissä voidaan käyttää todennäköisyyden arviointiin logistista regressiota. Logistista regressiota voidaan käyttää, jos ennustettavana on kategorinen muuttuja: ostaa tai ei osta, tulee maksuhäiriöitä tai ei tule, paranee tai ei parane. Selittävinä muuttujina voi olla sekä määrällisiä että kategorisia muuttujia.

Ilman käsitteiden odds ja logit ymmärtämistä logistista regressiota ei voi ymmärtää, joten aloitan niistä.

Odds

Odds-käsitteelle ei valitettavasti ole vakiintunutta suomennosta. Monet sanakirjat antavat suomennokseksi todennäköisyys, mutta odds on tarkkaan ottaen todennäköisyyksien suhde. Suomennoksia veto, vedonlyöntisuhde ja riski näkyy käytettävän. Minä käytän seuraavassa sekaannuksien välttämiseksi englanninkielistä termiä odds.

Jos tapahtuman todennäköisyys on p, niin odds tapahtuman puolesta:

odds = p / (1-p)

Jos odds on tiedossa, niin yllä olevasta kaavasta voin ratkaista todennäköisyyden:

p = odds / (odds+1)

Esimerkki. Nopanheitossa todennäköisyys saadaa kuutonen on yksi kuudesta (1/6) ja todennäköisyys olla saamatta kuutosta on viisi kuudesta (5/6). Odds on todennäköisyyksien suhde:

  • Odds kuutosen puolesta = (1/6)/(5/6)=1/5=0,2
  • Odds kuutosta vastaan = (5/6)/(1/6)=5

Logit

Edellisen nopanheittoesimerkin odds 0,2 kuutosen puolesta ja 5 kuutosta vastaan kuvaavat samaa tilannetta eri näkökulmista. Tämä ilmenee jännästi, jos otan logaritmit:

  • ln(0,2) ≈ -1,609
  • ln(5) ≈ 1,609

Jatketaan nopanheitolla ja tarkastellaan todennäköisyyttä saada parillinen silmäluku. Todennäköisyys on 1/2 ja odds on (1/2)/(1/2)=1. Tässä tapauksessa logaritmi on ln(1)=0.

ln(odds) on niin hyödyllinen, että sille on annettu oma nimi logit:

logit = ln (odds)

Logitilla on muiden muassa seuraavat ominaisuudet:

  • Jos todennäköisyys on 50 %, niin logit = 0.
  • Jos todennäköisyys on alle 50 %, logit on negatiivinen. Logit on sitä enemmän negatiivinen mitä pienempi todennäköisyys.
  • Jos todennäköisyys on yli 50 %, niin logit on positiivinen. Logit on sitä enemmän positiivinen mitä isompi todennäköisyys.

Jatkoa ajatellen on hyvä oppia miten logitista päästään takaisin oddsiin. Tässä tarvitaan luonnollisen logaritmin käänteistoimitusta (e on luonnollisen logaritmin kantaluku eli Neperin luku):

odds=eln(odds)=elogit

Edellä jo totesin, että oddsista saadaa todennäköisyys laskemalla odds/(odds+1). Yhdistämällä tämä tulos äskeiseen, saadaan muunnoskaava logitista todennäköisyyteen:

p = elogit/(1+elogit)

Logistinen regressio

Seuraavassa esimerkkinä käytettävä aineisto SPSS-muodossa logit1.sav (aukeaa vain SPSS:llä) ja Excel-muodossa logit1.xlsx. Kiinnostuksen kohteena on Buy (1=osti, 2=ei ostanut). Seuraavassa on näkyvillä aineiston ensimmäiset rivit:

likelihood1

Selittävinä muuttujina ovat income (tulot), isfemale (1=nainen, 0=mies) ja ismarried (1=naimisissa, 0=naimaton). Otetaan tavoitteeksi laatia malli, jonka avulla voidaan ennustaa oston todennäköisyys muuttujien income, isfemale ja ismarried perusteella.

Logistinen regressiomalli on lineaarinen regressiomalli, jossa selitettävänä muuttujana on logit (todennäköisyyttä ei sellaisenaan saada sovitettua lineaariseen malliin). Esimerkkiaineiston tapauksessa pyrimme muodostamaan mallin

logit = b0+b1*income + b2*isfemale + b3*ismarried

Mallin parametrit (b0, b1, b2, b3) määritetään maximum likelihood eli suurimman uskottavuuden -menetelmällä. Mallin käyttäjän ei välttämättä tarvitse ymmärtää maximum likelihood -menetelmän yksityiskohtia, mutta seuraavat perusideat on hyvä tuntea:

  • Parametreille annetaan arvauksena alkuarvot.
  • Lasketaan todennäköisyys sille, että havaittu data saataisiin näillä parametrien arvoilla.
  • Korjataan parametreja siten että päästään parempaan tulokseen.
  • Korjauksia tehdään, kunnes päästään parhaaseen mahdolliseen tulokseen. Paras mahdollinen tulos on se, johon liittyy suurin mahdollinen todennäköisyys sille, että havaittu data saataisiin valituilla parametrien arvoilla.

Esimerkkiaineisto maximum likelihood -menetelmä antaa malliksi:

logit = -12,033 + 0,00016742*income + 1,3653*isfemale + 1,3804*ismarried

Esimerkiksi 50000 ansaitsevan naimattoman naisen logit:

logit = -12,033 + 0,00016742*50000+1,3653*1+1,3804*0 ≈ -2,2967

Edellä jo opimme, että logit voidaan muuntaa todennäköisyydeksi p = elogit/(1+elogit). Näin esimerkiksi 50000 ansaitsevan naimattoman naisen todennäköisyys ostolle:

p = e-2,2967/(1+e-2,2967) ≈ 0,09 = 9 %

SPSS ja logistinen regressio

Voin suorittaa laskennan SPSS:llä seuraavasti:

  • Valitsen Analyze – Regression – Binary Logistic.
  • Siirrän selitettävän muuttujan Dependent-ruutuun.
  • Siirrän selittävät muuttujat Covariates-ruutuun.

logisticregression1

SPSS:n tulosteissa on kaksi mallia. Otsikon Block 0 alta löydän tiedot mallista, jossa on ainoastaan vakiotermi b0, mutta ei lainkaan selittäviä muuttujia. Tämä malli on mukana vertailun vuoksi.

logisticregression2

Tulosteesta voin lukea, että vakiotermi on -1,478. Tämä tarkoittaa mallia logit=-1,478. Tällöin todennäköisyys p = e-1,478/(1+e-1,478) ≈ 0,1857. Tämä on sama kuin aineistossa niiden osuus, jotka ovat ostaneet (125/673≈0,1857). Pelkästään vakiotermin sisältävä malli siis antaa ostamisen todennäköisyydeksi ostaneiden osuuden. Koska ostaneiden osuus on alle 50 %, niin mallin mukaan ennuste on aina ”ei osta”. Tällainen ennuste osuu kohdalleen 81,4 prosentissa tapauksista (548/673≈0,814).

Varsinaisen selittäviä muuttujia sisältävän mallin tiedot löydän otsikon Block 1 alta. Ensiksi arvioin mallin hyvyyttä verrattuna malliin, jossa on vain vaikiotermi. Hyvyyttä voin arvioida Omnibus-taulukon Model-riviltä. Chi-square-sarake kertoo kuinka paljon -2 Log likelihood (-2 Log likelihoodista lisää artikkelissa Log likelihood) on muuttunut verrattuna pelkästään vakiotermin sisältävään malliin. Tämä muutos noudattaa khiin neliö -jakaumaa, jonka perusteella saadaan muutoksen merkitsevyys (Sig.). Esimerkissämme selittävät muuttujat sisältävä malli on merkitsevästi parempi (Sig.<0,001) kuin pelkästään vakiotermin sisältävä malli.

logit3

Model Summary -taulukosta löydän -2 Log likelihood -arvon lisäksi kaksi R2-arvoa (lisätietoa artikkelissa Log likelihood), jotka yrittävät jäljitellä lineaarisen regressiomallin selityskerrointa. Näiden lisäksi on esitetty monia muita tapoja laskea R2-arvo. Yksimielisyyttä parhaasta laskentatavasta ei ole, minkä vuoksi R2-arvojen käyttö ja tulkinta on hankalaa. Aina kuitenkin pätee seuraava: mitä lähempänä R2-arvo on ykköstä sitä parempi.

Classification-taulukosta selviää, että malli ennustaa 95,8 % ei ostaneista oikein ja 84,8 % ostaneista oikein. Tässä mielessä malli vaikuttaa onnistuneelta.

logit2

Variables in the Equation -taulukko sisältää regressiokertoimet. Income-kerroin (B) ,000 ei tarkoita, että tuloilla ei olisi mitään vaikutusta ostamiseen. Jos lisään desimaalien määrää kyseisessä solussa, niin huomaan kertoimen poikkeavan nollasta.

logit1

Varmistan aina, että regressiokertoimet poikkeavat merkitsevästi nollasta. Tämä selviää Wald’in testimuuttujan avulla. Wald’in testimuuttuja saadaan jakamalla kerroin B keskivirheellään S.E. ja korottamalla tulos toiseen potenssiin. Wald’in testimuuttujan tiedetään noudattavan khiin neliö -jakaumaa, jonka perusteella merkitsevyys (Sig.) voidaan laskea. Esimerkissämme kaikki kertoimet poikkeavat merkitsevästi nollasta (Sig.<0,001), joten kaikki selittävät muuttujat voidaan tämän perusteella pitää mallissa mukana.

Malli on siis esimerkkimme tapauksessa (olen ottanut desimaaleja hieman enemmän Variables in the Equation -taulukossa oli näkyvillä):

logit = -12,033 + 0,00016742* income + 1,3653*isfemale + 1,3804*ismarried

Mallin parametrit (kertoimet) voidaan tulkita kuten lineaarisessa mallissa yleensäkin. Esimerkiksi income-kerroin 0,00016742 kertoo, että yhden euron lisäys tuloihin merkitsee 0,00016742 kasvua logitissa. Tämä ei kuitenkaan ole kovinkaan käyttökelpoinen tieto, koska logit on hieman hankala käsite ymmärrettäväksi.

Variables in the Equation -taulukossa on hieman helpommin tulkittavat muunnetut kertoimet Exp(B)-sarakkeessa. Exp(B)-sarakkeen kertoimet kertovat kuinka moninkertaisksi odds muuttuu, kun selittävä muuttuja kasvaa yhdellä yksiköllä.

  • Jos tulot kasvat yhdellä eurolla, niin odds kasvaa 1,0001674 kertaiseksi.
  • Naisilla odds on 3,917-kertainen miehiin verrattuna.
  • Naimisissa olevilla odds on 3,976-kertainen naimattomiin verrattuna.

Selittävien muuttujien valinta

Oma kysymyksensä on selittävien muuttujien valinta, jos ehdolla on paljon mahdollisia selittäviä muuttujia. Tästä lisää artikkelissa Logistinen regressio 2.

Log-likelihood

Päivitetty 25.5.2014

Tämä artikkeli täydentää artikkelia Logistinen regressio.

Logistisen regressiomallin laskenta ja sopivuuden arviointi perustuu log-likelihood -lukuun. Yritän tässä artikkelissa valottaa log-likelihood -luvun taustaa ja laskentaa.

Suurimman uskottavuuden menetelmä ja likelihood

Logistisen regressiomallin parametrit/kertoimet määritetään maximum likelihood eli suurimman uskottavuuden menetelmällä:

  • Parametreille annetaan arvauksena alkuarvot.
  • Lasketaan todennäköisyys (likelihood) sille, että havaittu data saataisiin näillä parametrien arvoilla.
  • Korjataan parametreja siten että päästään parempaan tulokseen (suurempi likelihood).
  • Korjauksia tehdään, kunnes päästään parhaaseen mahdolliseen tulokseen. Paras mahdollinen tulos on se, johon liittyy suurin mahdollinen todennäköisyys (maximum likelihood) sille, että havaittu data saataisiin valituilla parametreilla.

Likelihood’in laskenta

Käytän seuraavassa esimerkissä Excel-aineistoa logit1.xlsx, jonka alkuosan näet seuraavassa:

likelihood1

Artikkelissa Logistinen regressio olen esittänyt, miten tälle aineistolle lasketaan logistinen regressiomalli SPSS:llä. Esitän seuraavassa, miten likelihood ja log-likelihood lasketaan SPSS:n laskemalle regressiomallille. Laskennan olen suorittanut Excel-taulukkoon käyttäen SPSS:n antamia mallin parametreja, jotka olen kopioinut Exceliin. Excel käyttää koko ajan laskennassa 15 merkitsevän numeron tarkkuutta. Seuraavassa esittämäni laskelmat näyttävät vain pyöristettyjä likiarvoja.

Ensimmäisen vastaajan logit tulee suoraan regressiomallin yhtälöstä:

logit = -12,033 + 0,00016742*24000+1,3653*1+1,3804*0 ≈ -6,649

Logitista saadaan odds=elogit=e-6,649≈0,00129493

Ostamisen todennäköisyys on probability=odds/(1+odds)≈0,00129326

Likelihood on ostamisen todennäköisyys, jos kyseinen vastaaja on ostanut. Muussa tapauksessa likelihood saadaan vähentämällä ostamisen todennäköisyys ykkösestä. Ensimmäisen vastaajan tapauksessa

likelihood≈1-0,00129326≈0,99870674

Todennäköisyys, että kaikki havainnot ennustetaan oikein saadaan (todennäköisyyksien kertolaskusääntö) kertomalla likelihood’it keskenään. Isompien aineistojen tapauksessa tällainen kertolasku ei onnistu edes tietokoneelta. Niinpä onkin matemaattisesti mielekästä siirtyä tarkastelemaan likelihood’in logaritmia. Logaritmien käyttö mahdollistaa kertolaskun korvaamisen yhteenlaskulla, koska logaritmien laskusääntöjen mukaan tulon logaritmi saadaan logaritmien summana. Näin päästään log-likelihood -lukuun.

log-likelihood≈ln(0,99870674)≈-0,001294096

Muiden vastaajien log-likelihood lasketaan samalla periaatteella.

Likelihood on todennäköisyys, joten se saa arvoja väliltä [0,1]. Tästä seuraa, että log-likelihood saa negatiivisia arvoja tai arvon 0, jos likelihood=1. Mitä lähempänä nollaa log-likelihood on, sitä sopivampi malli.

SPSS:n ja myös muiden tilasto-ohjelmien tulosteissa ilmoitetaan log-likelihood kerrottuna luvulla -2. Tätä merkitään usein -2LL. Mitä pienempi -2LL on, sitä sopivampi malli on kyseessä.

Luvulla -2 kertominen tehdään, koska näin saadaan arvo, jonka muutoksen (verrattuna toiseen malliin) tiedetään noudattavan khiin neliö -jakaumaa. Khiin neliö -jakaumasta saadaan merkitsevyystaso (Sig.), jonka avulla voidaan arvioida mallin paremmuutta toiseen malliin verrattuna. Yleensä mallia pidetään merkitsevästi toista mallia parempana, jos Sig.<0,05.

Pseudo-selityskerroin

Logistisen regressiomallin selityskertoimen (R2) laskemiseksi on esitetty useita vaihtoehtoisia tapoja. Useimpien tapojen perustana on likelihood. Selityskertoimet eivät ole tulkinnallisesti yhtä konkreettisia kuin lineaarisen regression selityskerroin, joka ilmaisee kuinka suuren osan selitettävän muuttujan valihtelusta malli selittää. Logistisen regressiomallin selityskertoimia onkin tapana kutsua pseudo-selityskertoimiksi. SPSS esittää tulosteissaan Cox & Snell ja Nagelkerke -selityskertoimet:

likelihood2

Cox & Snell – selityskertoimen ongelma on, että se ei voi koskaan saavuttaa arvoa 1. Nagelkerke -selityskerroin on Cox & Snell -kertoimen korjattu versio, joka laajentaa mahdollisen arvoalueen arvoon 1 asti. Kertoimien laskentakaavat löydät esimerkiksi osoitteesta http://www.ats.ucla.edu/stat/mult_pkg/faq/general/Psuedo_RSquareds.htm. Kertoimien arvoille ei ole mitään täsmällistä tulkintaa. Kuitenkin aina pätee: mitä lähempänä R2-arvo on ykköstä sitä parempi.

Lineaarinen malli

Päivitetty 21.11.2016

Kahden määrällisen muuttujan riippuvuutta voin tarkastella hajontakaavion avulla. Lisäksi voin laskea lineaarisen (suoraviivaisen) riippuvuuden voimakkuutta mittaavan korrelaatiokertoimen. Lisätietoja artikkelissani Korrelaatio ja sen merkitsevyys.

Jos haluan selvittää tarkemmin riippuvuuden luonnetta tai hyödyntää riippuvuutta ennustamistarkoituksiin, niin voin mallintaa riippuvuutta lineaarisen mallin avulla.

Suoran yhtälö

Riippuvuudesta voin rakentaa matemaattisen mallin. Kahden muuttujan riippuvuutta kuvaava matemaattinen malli on lauseke, jonka avulla voin laskea toisen muuttujan arvoja ensimmäisen muuttujan arvojen perusteella. Jos muuttujien välinen riippuvuus on suoraviivainen eli lineaarinen, niin käytän mallina suoraa. Lineaarisesta mallista käytetään yleisesti nimeä lineaarinen regressiomalli ja mallina käytettävää suoraa kutsutaan regressiosuoraksi.

Suoraa voin kuvata lausekkeella y = bx + c. Lauseke kertoo miten saan laskettua y:n, kun tunnen x:n.

  • Termiä c kutsutaan vakiotermiksi. Vakiotermi kertoo, missä kohdassa suora leikkaa y-akselia (tämän näen asettamalla x:lle arvon 0, jolloin lausekkeesta jää jäljelle y=c).
  • Termiä b kutsutaan kulmakertoimeksi. Kulmakerroin ilmoittaa minkä verran y muuttuu, kun x kasvaa yhdellä yksiköllä. Laskevaan suoraan liittyy negatiivinen kulmakerroin ja nousevaan suoraan positiivinen kulmakerroin.

Esimerkki. Oletetaan, että konsultti perii palkkiota paikalle saapumisesta 100 euroa ja jokaiselta tehdyltä työtunnilta 80 euroa. Tällöin voin mallintaa konsultin kokonaispalkkiota lausekkeella y=80x+100, missä x on työtuntien määrä. Kyseisessä suoran yhtälössä

  • vakioterminä on 100 ja se ilmoittaa y:n arvon, kun x=0 (eli esimerkissämme palkkio ilman varsinaisia työtunteja)
  • kulmakerroin 80 ilmoittaa palkkion muutoksen, kun työtunnit lisääntyvät yhdellä.

Mallin lisääminen Excelin hajontakaavioon

Voin lisätä Excelin hajontakaavioon riippuvuutta kuvaavan mallin kuvaajan, lausekkeen ja selityskertoimen:

  1. Valitsen Design-välilehdeltä Add Chart Element – Trendline – More Trendline Options (Lisää kaavion osa – Suuntaviiva – Lisää suuntaviivavaihtoehtoja).
  2. Valitsen malliksi Linear (Lineaarinen).
  3. Valitsen tulostettavaksi mallin kaavan Display Equation on Chart (Näytä kaava kaaviossa).
  4. Valitsen tulostettavaksi mallin selityskertoimen kohdasta Display R-squared Value on Chart (Näytä korrelaatiokertoimen arvo kaaviossa). Huomaa, että Excelin suomenkielisissä versioissa puhutaan virheellisesti korrelaatiokertoimesta vaikka kyseessä on korrelaatiokertoimen neliö eli selityskerroin.

Yllä olevaan kuvioon olen lisännyt mainoskulujen ja myynnin välisen mallin. Löydät esimerkin Excel-tiedostosta regressio1.xlsx. Voin tulkita mallia seuraavasti:

  • Kulmakertoimesta 52,568 voin päätellä, että tuhat euroa mainoskuluissa merkitsee keskimäärin 52568 euroa myynnissä.
  • Vakiotermi 46,486 taas ilmoittaa myynnin olevan 46486 euroa, jos mainoskuluja ei ole lainkaan. Tässä tapauksessa vakiotermin antama tieto ei ole käyttökelpoinen eikä luotettava, koska mainoskulujen arvo 0 sijaitsee selvästi havaintoalueen ulkopuolella. Yleensäkään mallin käyttöaluetta ei voi laajentaa kovin paljon havaintoalueen ulkopuolelle.

Mallin avulla voin laskea esimerkiksi seuraavat ennusteet:

  • Jos mainontaan aiotaan käyttää 900 euroa, niin mallin mukainen myyntiennuste on 52,568*0,9+46,486≈93,8 eli 93 800 euroa.
  • Jos tavoitteena on 90 000 euron myynti, niin mallin mukaan mainontaan pitäisi käyttää (90-46,486)/52,568≈0,83 eli 830 euroa.

Käytännössä ennusteet kannattaa laskea Excelin FORECAST (ENNUSTE) -funktiolla, jolloin vältät kulmakertoimeen ja vakiotermiin liittyvät pyöristysvirheet. Katso tarkemmat tiedot Excel-tiedostosta regressio1.xlsx.

Selityskerroin

Äskeisessä esimerkissä selityskerroin on 0,7664 eli 76,64%. Tämä tulkitsen seuraavasti: 76,64% myynnin vaihtelusta voidaan selittää mainoskulujen vaihtelulla. Mallin tarkoituksena on selittää y:n arvojen vaihtelua x:n arvojen vaihtelulla. Selityskertoimella mitataan kuinka hyvin tässä onnistutaan.

Tarkastelen seuraavaksi, mihin selityskertoimen laskenta perustuu. Kunkin havainnon y-arvon kokonaispoikkeama y-arvojen keskiarvosta koostuu kahdesta osasta: mallin selittämästä poikkeamasta ja poikkeamasta, jota malli ei selitä. Seuraavassa kuviossa havaintopisteen kokonaispoikkeama on jaettu mallin selittämään poikkeamaan ja selittämättä jäävään poikkeamaan.

Jos merkitsen mallin selittämien poikkeamien neliöiden summaa SSR (sum of squares due to regression) ja selittämättömien poikkeamien neliöiden summaa SSE (sum of squares due to error), niin kokonaispoikkeamien neliöiden summa SST (total sum of squares) jakaantuu kahteen komponenttiin

SST = SSR + SSE

Selityskerroin on mallin selittämän vaihtelun osuus kokonaisvaihtelusta eli SSR/SST

Lineaarisessa mallissa voin laskea selityskertoimen  myös korrelaatiokertoimen neliönä. Regressiosuoran laskentamenetelmä liittyy sekin neliösummiin. Suora lasketaan pienimmän neliösumman menetelmää käyttäen. Kaikkien mahdollisten pistejoukon läpi kulkevien suorien joukosta valitaan se, jonka kohdalla neliösumma SSE (vaihtelu, jota malli ei selitä) saa pienimmän mahdollisen arvon.

Excelin funktioita

=FORECAST(x;tunnetut y;tunnetut x) -funktiolla (ENNUSTE) voin kätevästi laskea lineaariseen malliin liittyviä ennusteita. Funktio laskee x-arvoon liittyvän y-arvon regressiosuoran yhtälöä käyttäen (taustalla Excel laskee tunnettujen y:n arvojen ja tunnettujen x-arvojen perusteella regressiosuoran yhtälön).

=INTERCEPT(tunnetut y;tunnetut x) -funktiolla (LEIKKAUSPISTE) voin laskea regressiosuoran vakiotermin.

=SLOPE(tunnetut y;tunnetut x) -funktiolla (KULMAKERROIN) voin laskea regressiosuoran kulmakertoimen.

Mallin käyttäminen ennustamiseen

Mallin sopivuus

Mallin avulla voidaan ennustaa y, kun x tunnetaan tai x, kun y tunnetaan. Mallin soveltuvuus ennustamiseen riippuu selittämättömän vaihtelun osuudesta. Hajontakaaviosta voin arvioida selittämättömän, epäsäännöllisen vaihtelun suuruutta ja yli päätään mallin sopivuutta havaintoaineistoon. Mitä enemmän havainnot ”pomppivat” mallin molemmin puolin sitä enemmän ennusteeseen sisältyy epävarmuutta.

Poikkeavat havainnot

Mallit ovat herkkiä poikkeaville arvoille. Jos kuviosta erottuu selvästi muista poikkeavia havaintoja, niin niihin ei pidä suhtautua huolettomasti. Lue lisää artikkelistani Poikkeavat arvot.

Mallin käyttöalue

Havaintoaineistoa on käytettävissä vain tietyiltä muuttujan arvoilta ja mallin pätevyyttä voidaan arvioida vain havaintoalueella. Havaintoalueen ulkopuolella olevien muuttujan arvojen kohdalla en voi tietää, onko malli pätevä. Tämän vuoksi mallia ei ole perusteltua käyttää havaintoalueen ulkopuolella.

Seuraavaksi

Jos olet kiinnostunut malleista, joissa on useampia selittäviä muuttujia, niin kannattaa tutustua monisteeseeni Lineaariset regressiomallit.