Blogisarjan edellisessä postauksessa visioitiin malli, joka laskisi ennusteen pyörän saapumisen todennäköisyydelle lyhyellä aikavälillä. Tämänkaltaiseen ongelmaan löytyy onneksi hyvin laajalti käytetty ja hyväksi havaittu yksinkertainen mallinnustapa, jolla saadaan nimenomaan kysymykseen vastaava luku: Logistinen regressio.
Logistinen regressio: perusteet
Logistisessa regressiossa mallinnetaan binääristä vastemuuttujaa, eli lukua, joka voi olla joko 1 tai 0. Vastemuuttujaa koitetaan mallintaa käyttämällä selittäviä muuttujia, jotka voivat olla muodoltaan numeerisia tai kategorisia. Esimerkkinä voi vaikkapa kuvitella jäätelökioskin, joka on auki riippuen täysin siitä, huvittaako sen omistajaa sinä päivänä. Pilvisinä arkipäivinä, kun lämpötila on ollut alle 23 astetta, jäätelökioski ei yleensä ole ollut auki. Sen sijaan aurinkoisina ja helteisinä viikonloppuina kioski on yleensä ollut auki. Tällaisessa mallissa vastemuuttuja olisi kioskin aukiolo (1 = auki, 0 = kiinni), selittävinä muuttujina taas viikonpäivä (kategorinen = maanantai, tiistai jne.) ja sääolosuhteet eli pilvisyys (tämän voi määritellä monella tavalla, mutta käytetään tässä yksinkertaista esimerkkiä eli 1 = aurinkoista, 0 = pilvistä) ja lämpötila (numeerinen muuttuja).
Logistinen malli laskee datan perusteella, missä suhteessa selittävät muuttujat vaikuttavat vasteeseen, ja antaa sitten ulos joukon estimaatteja, jotka yhdistämällä voidaan laskea niin kutsuttu riski (odds) aukiololle. Riski ilmaistaan tyypillisesti logaritmisessa muodossa, jonka saa nopealla laskutoimituksella muunnettua todennäköisyydeksi. Toisin sanottuna, jos malli todetaan toimivaksi, voidaan sen antamilla estimaateilla arvioida todennäköisyys jäätelökioskin aukiololle tiettynä päivänä, jos vain tiedetään sen päivän viikonpäivä, pilvisyys ja lämpötila.
Logistisen regressiomallin määrittely
Mutta palataanpa takaisin pyörien pariin. Vastemuuttuja on tässä tapauksessa melko helppoa määritellä: Tuleeko asemalle vähintään yksi pyörä lyhyen aikavälin (eli omalla pinnallani kahden minuutin) sisällä? Vastemuuttuja voidaan mallintaa datasta nopeasti järjestämällä rivit asema- ja aikajärjestykseen, ja laskemalla sen jälkeen erotus pyörien saatavuudesta. Jos pyörien määrä on kasvanut, asemalle on tullut pyöriä. Päinvastaisessa tapauksessa sieltä taas on poistunut pyöriä.
Tässä vaiheessa on aika jatkaa preppailua ja datan rikastusta, jossa hyödynnän sekä R:ää että Tableau Prepiä. Lopulta datasetti sisältää seuraavat muuttujat: Kellonaika, kuukausi, viikonpäivä, viikkonumero, asemien pyörämäärien positiiviset muutokset ja kahden minuutin tasolle aggregoitu aikasarja. Näitä hyödyntämällä saa todennäköisesti jo ihan pätevän mallin, mutta voisiko tähän yhdistää vielä jotain muuta dataa? Voisihan toki, nimittäin säätiedot! Säätiedot tarjoaa Ilmatieteen Laitos niin ikään avoimena datana, jotka voi ladata portaalista parilla klikkauksella.
Säätiedot tulevat Helsingin alueella Kaisaniemen asemalta, ja ne sisältävät lämpötilan, sateen määrän, pilvien määrän, ilmanpaineen, kosteuden ja tuulen nopeuden. Mittauksia on 10 minuutin välein. Lasketaan siis datasettiin 10 minuutin tasolle aggregoitu aikasarja, ja joinataan nämä kaksi toisiinsa.

Eli tässä vaiheessa mallilla on siis käytettävissä:
- Vastemuuttuja: Asemalle on tullut pyöriä 2 minuutin sisällä, tai ei ole (= vastemuuttuja 1 tai 0).
- Aikatiedot: Kellonaika tunteina, viikonpäivä, kahden minuutin tasolle aggregoitu data.
- Säätiedot: Lämpötila, sade, pilvisyys ja kaikkea muuta kivaa.
Alustava malli ja sen arviointi
Tässä vaiheessa voidaan jo laskea alustava malli, ja katsoa miltä homma näyttää. Ja sehän näyttää ihan hyvältä: malli, joka käyttää inputeinaan muuttujia ”sade”, ”lämpötila”, ”viikonpäivä”, ”kellonaika” sekä kellonajan ja viikonpäivän välistä interaktiota. Interaktio on mukana mallissa, koska käytännössä viikonpäivä ja kellonaika vaikuttavat myös yhdessä – esimerkiksi lauantain kello 11 on eri asia kuin maanantain kello 11. Koska dataa on kahden minuutin tasolla n. 20 miljoonaa riviä, otetaan datasta tässä vaiheessa asemien mukaan stratifioitu 1.5%:n prosentin näyte. Mallin estimaatit näyttävät seuraavilta:
- Jäännösdevianssi on 9234 yksikköä pienempi kuin nolladevianssi, kun vapausasteet pienenevät 169 yksikköä.
- Suurin osa mallin estimaateista on virheen ja z-arvon perusteella luotettavia. Alla olevat visuaalit havainnollistavat. Väri indikoi p-arvoa 0.05 alfalla; estimaatit on listattu pystypäin ja interaktiot horisontaalisesti:
Arvioista nähdään, että pääosin estimaatit vaikuttavat luotettavilta. Sateen estimaatin virhe tosin oli suuri. Sitä ei kuitenkaan mallista kannata tässä vaiheessa pudottaa, koska sade on tänä kesänä ollut melko vähäistä, joten todennäköisesti sateisia aikoja ei 1.5% näytteeseen vain osunut tarpeeksi.
Pelkkä normaali logistinen regressio interaktiotermeillä on toki mielenkiintoinen, mutta miten sitä voisi soveltaa käytännössä? Tällä hetkellä arvojen ennustaminen mallin pohjalta olisi hyvin monimutkaista, koska termejä on niin paljon. Tämän lisäksi itse ennusteiden laskeminen voisi laskennalliselta kannalta olla myös raskasta ja monimutkaista.
Ja vielä se suurin ongelma: Tällä hetkellä malli ennustaa haluttua todennäköisyyttä kaikille asemille yhdessä. Visualisointi ei siis olisi lainkaan mielenkiintoinen kartalla, koska kaikilla asemilla olisi aina sama ennuste. Seuraavassa tekstissä sukelletaankin syvemmälle asemakohtaisten ennusteiden laskemiseen.
Blogisarjan muut osat:
- Osa 1: Kuinka loihtia älyä kaupunkipyörien avoimesta datasta?
- Osa 2: Visuaalisella analyysillä kiinni dataan
- Osa 4: Karvalakkimallista jotain hienostuneempaa
- Osa 5: Monitasoinen logistinen regressio
- Osa 6: Monitasoisen logistisen regression hyödyntäminen Tableaussa
- Osa 7: Mitä opittiin, ja kuinka sitä voisi soveltaa?
