Ylisovittaminen ja kuinka sen kanssa voi tulla toimeen

 

Mika Laukkanen sivusi aiemmin blogikirjoituksessaan ylisovittamista (http://www.louhia.fi/2017/10/23/koneoppiminen-vaatii-osaamista/). Ajattelin että tästä aiheesta voisi kirjoittaa vähän laajemminkin, koska se on yksi isoimmista ennustavaan analytiikkaan liittyvistä haasteista.

 

Over-fitting vaanii joka nurkan takana

Ylisovittaminen eli over-fitting tarkoittaa yksinkertaisesti sitä, että malli sopii dataan liian hyvin. Joku voisi tässä kysyä, että miten niin liian hyvin? Eikö hyvä ”istuvuus” ole nimenomaan tavoite?

No kyllähän se on, mutta tässä pitää silti olla tarkkana. Ongelma on nimittäin se, että kun ennustemalli opetetaan historiadatalla, voi malli sopia täydellisesti dataan (eli ennustaa vasteen ilman virhettä), mutta ennustaa silti hyvin huonosti uusia havaintoja.

Mistä tämä sitten johtuu?
No siitä, että mallin opettamiseen käytetty data ei edusta kattavasti laajempaa havaintopopulaatiota. Tämä taas voi johtua joko datassa olevasta satunnaiskohinasta, aineiston suhteellisen pienestä koosta, tai siitä että eri luokkamuuttujien tasojen välisiä kombinaatioita on paljon, mikä pienentää efektiivistä otoskokoa.

Koska oikeassa datassa on aina epätarkkuuksia ja aineistojen koko sekä ominaisuudet taas voivat vaihdella melkoisesti tilanteesta riippuen, on analyytikon syytä olla aina varuillaan.

Se ketään ei vie väkisin, saa kukin valita

Vaikka ylisovittaminen on yleinen vaara, ei hätää, sen estämiseksi on hyviä standardiratkaisuja.

Holdout menetelmä
Analyytikolla pitäisi olla ihan selkärangassa, että kun lähdetään tekemään ennustemallia, data jaetaan (yleensä) satunnaisotannalla kahteen (tai useampaan) osaan.

Suurin osa datasta käytetään mallin opettamiseen ja lopulla havainnoilla testataan, kuinka hyvin malli pystyy yleistämään opetusdatan ulkopuolelle.

Käytän tässä esimerkkinä saksalaista luotonantoaineistoa (https://archive.ics.uci.edu/ml/datasets/statlog+(german+credit+data), joka käsittää taustatietoa 1000:sta velallisesta sekä tiedon siitä onko velan hoito laiminlyöty vai ei (default = vastemuuttuja).

Jaan aineiston satunnaisesti niin, että opetusdata kattaa 70% riveistä ja käytän tätä osadataa random forest luokittelijan opettamiseen (loput 30% säästetään mallin testaukseen).

Saadun luokittelijan tarkkuus on erinomainen; tarkkuus = 100 % ja AUC = 1.0. Toisin sanoen, malli pystyy täydellisesti erottelemaan ”huonot” luotonottajat ”hyvistä”.

Jos tilanne olisi se, että olisin käyttänyt koko aineiston mallin opettamiseen ja tyytyväisesti vienyt loistavan mallin tuotantoon — sehän osasi täydellisesti erotella ns. jyvät akanoista, olisin tehnyt pahan virheen. Nimittäin, kun mallia käytetään ennustamaan testidatan vastemuuttujaa, on tulos selvästi kehnompi: tarkkuus = 75%, AUC = 0.80.

Eli kun mallille näytetään dataa mitä se ei ole aiemmin ”nähnyt”, ei yksilöitä kyetäkään enää luokittelemaan yhtä tarkasti. Tämä on tyyppiesimerkki ylisovittamisesta.

Ristiin validointi
Vaikka yllä kuvattu menetelmä paljastaa ylisovittamisen, on riskinä kuitenkin iterointi testidataa vastaan — eli testataan jokaisen mallin hyvyys erikseen testidatalla, josta Mika aiemmin varoittikin.

Suositeltavampaa onkin, että opetusdata pilkotaan sisäisesti useaan eri opetus- ja testidataan ja toistetaan yllä kuvattu prosessi kullekin ositukselle. Tätä menetelmää kutsutaan ristiin validoinniksi (CV = cross validation).

Tekemällä kominkertaisen CV:n yllä käytetyllä opetusdatalla, saadaan opetusdatan ennustetarkkuudeksi 76% (AUC = 0.78). Tätä realistisempaa tarkkuutta (joka vastaa itse asiassa hyvin sitä mikä saatiin testidatalle) voidaankin sitten verrata eri mallien antamaan tarkkuuteen, ilman että opitaan samalla epäsuorasti testidatasta.

 

Kaidalla tiellä, poissa kiusauksista

Vaikka käyttämääni random forest luokittelijaa pidetäänkin yleisesti varsin vahvana menetelmänä, tässä kohtaa ongelmaksi nousee aineiston pienuus.

Liian pieni aineisto koituu helposti edistyneiden koneoppimisalgoritmien kohtaloksi juuri siksi että ne toimivat hyvin isoilla aineistoilla (esim. neuroverkko toimii kyseisellä aineistolla suurin piirtein yhtä huonosti).

Analyytikon ei siksi ole syytä ylenkatsoa yksinkertaisempia menetelmiä, joiden pitäisi oikeastaan muodostaa vertailukohta edistyneemmille menetelmille.

Esimerkiksi, naïvi Byes luokittelija (joka käytännössä laskee vain ehdollisia todennäköisyyksiä datasta) antaa koko opetusdatalle vähintäänkin yhtä hyvän ennustetarkkuuden kuin ristiin validoitu random forest (tarkkuus = 75%, AUC = 0.80) ja ylioppii varsin maltillisesti (testidatalla: tarkkuus = 71%, AUC = 0.73).

Jopa tavallinen logistinen regressio pärjää vertailussa varsin hyvin (opetusdata: tarkkuus = 75%, AUC = 0.77), eikä juurikaan yliopi (testidata: tarkkuus = 71%, AUC = 0.75). Näillekin menetelmille on toki todellisuudessa hyvä tehdä CV, varmuuden vuoksi. Eihän näiden mallien ennustetarkkuus toki päätä huimaa, mutta pessimisti ei tässäkään kohtaa pety; tuotannossa ylioptimistinen ennuste vasta korpeaakin.

Kolmen eri ennustemallin ROC-käyrät. Opetus- ja testidata on kuvattu eri väreillä. Katkoviiva kuvaa ennustetta, joka on yhtä hyvä kuin arvaaminen.

 

 

Pidä mieli avoinna ja paita puhtaana

Mitäkö opimme tästä harjoituksesta?
Ainakin kaksi asiaa:
(1) älä hätiköi ja (2) KISS (Keep It Simple Stupid).

Molemmat pointit ovat varsin oleellisia. Kun miettii tarkkaan mitä on tekemässä, eikä lähde tekemään jotain ongelmaan sopimatonta, välttyy helpommin aika monelta muultakin sudenkuopalta kuin ylisovittamiselta.

Joten ei muuta kuin Marko Haavistoa ja Poutahaukkoja hyräillen kohti uusia pettymyksiä.

Vastaa

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

Yhteydenotto

Mikäli olet kiinnostunut yrityskohtaisista palveluista tai sinulla kysyttävää palvelujemme sisällöstä, niin ota yhteyttä oheisella lomakkeella tai soita Mikalle numeroon 040 845 8432.