23.10.2017

Koneoppiminen vaatii osaamista

Tässä taannoin meille tuli projekti, jossa asiakas oli tehnyt koneoppimisharjoituksen (ennustemallinnus) erään toisen kumppanin kanssa. Asiakas oli skeptinen tulosten suhteen ja halusi ns. toisen mielipiteen, mutta eri ohjelmistolla tehtynä. Joskaan senhän ei pitäisi vaikuttaa olennaisesti tuloksiin. Jo heti alkuvaiheessa huomattiin, että homma olikin alunperin mennyt pieleen väärin muodostetun opetus- ja testiaineiston vuoksi.  Alkuperäinen tekijä ei tullut huomioineeksi, että ko. aineistossa rivitkin korreloivat keskenään ajallisesti, jonka vuoksi perinteinen satunnaisotos ei toiminut järkevästi. Tulokset olivat siis kuralla, mutta onneksi eivät tuotantokäyttöön vietynä. Siellä vahingot olisi mitattu euroissa.

Virheiden tekeminen on helppoa

Kun tehdään koneoppimismalleja, niin moni asia voi mennä pieleen. Tätä ei tietenkään tulisi todeta tämän positiivisen pöhinän ja hypen huipulla. Joka tapauksessa, tässä pari esimerkkiä missä voi mennä Strömsöön ohitse.

Opetusdata on virheellisesti toteutettu.  Esimerkiksi, tehdään ennustemalli proteiinin käytöstä urheilijoilla ja kerätään opetusdata vain juoksija-foorumilta. Kun mallin tuloksia soveltaa muualla, esim. pakkotoisto-foorumin jäsenillä, niin se ei todennäköisesti toimi. Opetusdata ei ollut ns. edustava otos. Tämä oli trviaali esimerkki, mutta käytännössä näitä tilanteita voi olla vaikeaa tunnistaa.

Toinen esimerkki vaikka aikasarjojen käytöstä. Jos trendimäisiä aikasarjoja tuuppaa malleihin, niin niistähän saa keskenään hienoja selitysasteita ja korrelaatioita. Jotka ovat siis harhaa. Trendit pitäisi poistaa esim. erotuksilla. Kaikki tilastotieteilijät tietävät tämän, mutta asiaa ei välttämättä opeteta esim. “Analytiikka Softa XYZ:n” kurssilla.

Kolmas esimerkki. Ennustetaan asiakaspoistumaa perustuen historiadataan. Dataan on otettu mukaan asiakkaan viimeisin sopimustilanne. Tämähän toimii jos ko. asiakas ei enää palannut asiakkaaksi. Jos taas palasi ja otti toisen sopimuksen, niin homma menee keturalleen. Dataan on tullut tulevaisuudesta “vuoto”. Datan pitää siis kuvata tilannetta, joka asiakkaalla on ollut silloin, kun sen asiakkuutensa lopetti.

Kaiken kaikkiaan opetusdatan muodostuksessa voi tehdä lukuisia kämmejä, jotka voivat viedä myöhemmmiltä tuloksilta pohjan pois. Haastavaa tästä tekee se, että jos data on pielessä, niin mitkään parhaat käytännöt ja nerokkaat algoritmit eivät tilannetta jatkossa pelasta. 

Mallin ylisovitus (overfitting).  Skippaan tässä mallien overfittauksen helpon (teknisen) osuuden. Vakavampi overfittauksen muoto syntyy, kun käytössä on suhteellisen vähän dataa ja se on jaettu vain opetus- ja testiaineistoksi (ei siis erillistä validation datasettiä). Sitten valitaan jokin ML-algoritmi, sanotaanko vaikka RandomForest ja aletaan mallintaa iteratiivisesti – eli tarkastellaan testiaineiston tuloksia aina yhdessä opetusaineiston tulosten kanssa. Ja tätä tehdään, kunnes löytyy malli, joka toimii upeasti molemmilla dataseteillä.

Ongelma vaan on, että noin tehtynä mallia kehitettiin epäsuorasti testidatalla eikä se välttämättä yleistykään odotetulla tavalla. Luultavasti monet osakemarkkinoiden backtestaukset on sössitty juuri näin. On etsitty “väkisin” säännöt, jotka toimivat historiadatan kanssa.

Virheiden merkitys, nollasta miljooniin..

Miten iso merkitys tuollaisilla virheillä voi olla?

Otetaan yksi esimerkki tilanteesta, jossa merkitys on vähäinen. Eli yritys N tekee puhelinkampanjoita ja soittelee täysin satunnaisesti ihmisille. Jos tähän tekisi ennustemallin, joka ei toimisi, niin tulos tuskin huonontuisi tuosta satunnaissoittelusta. Toki menisi aikaa ja rahaa turhan mallin kehitykseen, mutta business ei kärsisi.

Vahinkoa sen sijaan syntyy jos vaikka yritys X muuttaa tuotteiden hinnoittelua virheelliseen malliin perustuen, ja kysyntä tippuu 10%:ia ensimmäisen kuukauden aikana.

Tai että yritys Y muuttaa ostoprosessejaan perustuen koneoppimiseen, mutta virheellisen datan vuoksi tuli tilattua Teddy-karhuja 100 konttia liikaa. Ne jaetaan sitten seuraavana jouluna yhteistyökumppaneille tai ilmaisen muoviämpärin täytteenä.

Virheet saattavat siis tulla kalliiksi. Siksi onkin järkevää pilotoida mallien toimivuutta oikeassa ympäristössä, mutta rajatusti. Jos tuotannossa tulevat tulokset eivät vastaa mallinnuksen aikaisia tuloksia, niin sitten kannattaa selvitellä syyt siihen.

Osaamisen merkitys

Osaamisen merkitystä on vaikeaa ylikorostaa tällä osa-alueella. Sen voisi oikeastaan jakaa kolmeen osaan.

  1. Ohjelmistojen käyttäminen. Ohjelmistoja on helppo oppia käyttämään, mutta se on vasta lähtötaso. Sama kuin viivoittimen käyttö arkkitehdille. Väittäisin  että pätevän data-analyytikon ammattitaidosta vain 10-20%:ia on ohjelmistojen (esim. R, Python, Azure ML, Watson, RapidMiner) käyttöön liittyvää.
  2. Koneoppimisen eri osa-alueiden riittävän syvällinen osaaminen (data, training/test/validation, ennuste- ja klusterointimenetelmät, ylioppiminen, ristiinvalidointi, muuttujien valinta, parametrien optimointi, muuttujien normalisointi, standardointi, .. jne…)
  3. Toistojen määrä – mitä enemmän taustalla on erilaisilla dataseteillä ja menetelmillä ratkottuja ongelmia, sitä parempi tuntuma hommaan on. Onneksi tässä ei tarvitse aina odottaa uutta projektia, vaan harjoitella voi monenlaisella datalla (esim. http://archive.ics.uci.edu/ml/index.php).

Meidän omissa koulutuksissa opetetaan lähinnä perusteita eikä kenellekään jaeta “tekoälymestarin” hattua 1-2 päivän kurssin jälkeen. Mutta siellä saa kuitenkin tuntuman siitä, että mitä koneoppimisen ratkaisuissa pitää huomioida, millaisia ongelmia niillä voi ratkoa ja pääsee tietysti itsekin tekemään vähän malleja. Useimmille tämä taso riittävä, koska he haluavat vain ymmärtää asiaa paremmin – eivät tulla “tekoälymestareiksi”.

Mutta on joukkoon sattunut niitäkin, joilla lamppu on syttynyt. Heille ollaan suositeltu Courseran Machine Learning kurssia. Se on on online-kurssi, sisältää hyvän opetuksen ja materiaalit eikä maksa mitään. Miinuksena tietysti tässä kiireisessä maailmassa on, että sehän kestää jopa viikkoja..

 

Share
Contact Person

Blog writer

Mika Laukkanen

Vincit Bilot

Bilot & Vincit have joined forces!

See where the story continues 

You have Successfully Subscribed!

Vincit Bilot

Bilot & Vincit have joined forces!

See where the story continues 

You have Successfully Subscribed!