Tässä artikkelissa kerron, että miten avoimen lähdekoodin tekoälykiihdytintä sovelletaan business ongelman ratkaisussa.
Artikkelin rakenne on seuraava:
- Mikä on AI-JACK?
- Business ongelma
- AI-JACK:in käyttö
- Tulokset
- Miksi käyttää AI-JACK:ia?
Mikä on AI-JACK?
Lyhyesti AI-JACK on koneoppimiskiihdytin, josta on olemassa kaksi eri versiota. Tässä artikkelissa käsitelty versio on ns. R-versio (beeta). Toinen versio AI-JACK:sta on Pythonilla toteutettu ja integroitu Azure-Databricks ympäristöön.
AI-JACK:in R-versio on julkaistu open-source versiona Githubissa. Mahdollisesti julkaisemme myös Python version myöhemmin, mikäli ratkaisulle vaikuttaa olevan kysyntää ja kiinnostusta.
Idea
Idea AI-JACK:in taustalla on, että minimoidaan koneoppimiseen käytettävä koodaustyö lähes kokonaan ja tehdään tuotannollistaminen helpoksi isollekin määrälle koneoppimismalleja.
Yksinkertaisimmillaan AI-JACK:in käyttö on silloin, kun käyttäjä antaa ns. parametritiedostoon muutamia tietoja esim. datasta, sovellettavista koneoppimismalleista tai vaikka hyperparametrien etsintäehdoista. Koodaustaitoja ei tässä tarvita lainkaan. Itse asiassa, en osaa itsekään koodata R:llä, mutta kohta näette miten R-version käyttö sujuu.
Nyt joku voisi sanoa, että “jälleen uusi black-box ratkaisu”, mutta näin ei todellakaan ole. Osaava käyttäjä voi muokata AI-JACK:in juuri sellaiseksi kun haluaa ja lisäksi esim. kaikki mallien tulokset ja versiot tallentuvat automaattisesti.
Tällä hetkellä julkaistu R-versio sisältää koneoppimismielessä seuraavat ominaisuudet:
- Luokitteluongelmien ratkaisu. Oletuksena kaksiluokkainen vaste. Parhaillaan selvitetään moniluokkaisen vasteen toimivuutta. Luokitteluongelmia ovat mm. ostaa/ei osta tai “mikä diagnoosi” tyyppiset tilanteet.
- Regressio-ongelmien ratkaisu, esim. tilauskannan ennustaminen tai hinnoittelu. Vastemuuttuja on numeerinen.
- Klusterointi, esim. asiakassegmentoinnin tekemiseksi
- Poikkeamien havaitseminen (anomaly detection) on osittain kesken
Roadmapilla on myös harkinnassa lisätä aikasarjametodit osaksi ratkaisua. Koska tämän on avoimen lähdekoodin ratkaisu, niin sinäkin voit osallistua kehitystyöhön. Liity jäsenksi Githubissa 🙂
Alla olevassa kuvassa on hahmotettu AI-JACK:in käyttöä. Tarkempia tietoja Gitistä.

Business ongelma
Valitsin tähän artikkeliin business ongelmaksi löytää potentiaaliset asiakkaat, joille kannattaa tehdä kylmäsoitto? Tämähän on tunnetusti kaikkien myynnissä olevien suosikkityötä.
Tarkemmin ottaen kysymys on autovakuutusten myynnistä asiakaskunnalle, josta on jo kohtalaisesti taustatietoa. Tarkemmat speksit ongelmasta löytyy täältä https://www.kaggle.com/kondla/carinsurance.
Nyt on siis tavoitteena ennustaa keille asiakkaille kannattaisi soittaa, jotta tulisi mahdollisimman vähän huteja. Lisäksi olisi hyvä saada informaatiota, että mitkä tekijät vaikuttavat autovakuutusten ostamiseen

AI-JACK:in käyttö
AI-JACK:in käyttö kannattaa aloittaa lukemalla ohjeet ja toimimalla niiden mukaisesti. Ne löytyvät täältä https://github.com/Bilot/AI-jack-opensource-R.
Hyppään nyt tuon asennusvaiheen ohitse ja siirryn dataan. Mainittakoon kuitenkin, että asennuksen jälkeen sinulla pitäisi näkyä seuraava hakemistorakenne.

Datan käsittely
Datan käsittely on käytännössä aina tapauskohtaista, joten AI-JACK:ille tuotatava data tulee olla esikäsiteltyä ja soveltuvaa koneoppimismallien ruuaksi. AI-JACK:in kannalta tässä kannattaa huomioida mm. seuraavat asiat:
- Datassa pitää olla id-sarake, joka yksilöi kunkin rivin
- Datassa oleva test_train_val-sarakkeen avulla voit kertoa, että mitä osuutta datasta haluat käyttää opetukseen, testakseen ja validointiin. Ilman arvoja tässä AI-JACK tekee jakamiset satunnaisotoksin.
Jos käyttää tiedostoja, kuten tässä esimerkissä (csv), niin ne tallennetaan source-model kansioon. Sinne tulee myös tallentaa tekstitiedosto, joka kertoo datatiedoston sarakenimet ja tyypit. Githubista löytyy esimerkkejä.

Yllä olevassa kuvassa on tässä esimerkissä käytettyä dataa. Punaisella pohjalla AI-JACK:in tarvitsemat metatiedot, sinisellä pohjalla selittävät muuttujat ja vihreällä vastemuuttuja, eli onko aiemmin ostanut autovakuutuksen (1/0).
Datasetin “validation” osuudessa ei ole vastemuuttujan arvoja, joten tässä tapauksessa se simuloi uusia asiakkaita, joille soittoja haluttaisiin tehdä.
Parametrien syöttö
Control-kansiossa on tiedosto config_model.R, joka on ainoa tiedosto jota tarvitsee muokata tässä harjoituksessa.

Tässä ote ko. tiedostosta. Olen kertonut siinä projektin polun, vastemuuttujan nimen datasetissä, mallin nimen (car – jonka avulla AI-JACK osaa etsiä myös oikean datatiedoston), id-muuttujan (huom! isoilla/pienillä kirjaimilla on merkitystä), test_train_val jakomuuttujan datasetissä ja onko vastemuuttuja kategorinen vai numeerinen.
Tämän lisäksi voisin muokata mm. mitä koneoppimismalleja haluan suorittaa tässä ajossa ja millaisia hyperparametrihakuja ne tekevät. Alla esimerkkinä screenshotit.

Annan kuitenkin palaa ihan default-asetuksilla, eli en muuta mitään. Käytännössä tulee siis ajettua varsin monta erilaista koneoppimismallia samalla kertaa. Tämä siis ihan esimerkin vuoksi miten AI-JACK toimii, oikeassa elämässä tulisi käyttää harkintaa menetelmien valinnassa.
Mallien ajamisen voi suorittaa komentoriviltä. Aluksi pitää mennä projektihakemistoon ja sitten suorittaa komento Rscript control/main_model.R. Mikäli et ole määritellyt Windows ympäristössä mistä Rscript löytyy, niin sen polku pitää määritellä Windowsin “environment variables” kohdan kautta.

Mallin ajaminen tuottaa komentokehoitteen ikkunaan mm. seuraanvanlaista infoa. Tässä tapauksessa deep learning malli osoittautui parhaaksi, kun vertailtiin malleja testidatasettien avulla.
Tulokset
Mallinnuksen tulokset, mallit, niiden parametrit ja versiot tallentuvat output_model-kansion alla oleviin alikansioihin. Katsotaanpa esimerkiksi results-kansiosta löytää tietoa.
Mitkä tekijät vaikuttavat eniten autovakuutuksen hankintaan?

Result-kansiossa oleva column_importance.csv kertoo tärkeimmät muuttujat ennusteen onnistumisen kannalta. Esimerkiksi tässä esimerkissä niitä ovat johtava asema työssä, on aiemmin ottanut autolainan tai on eläkkeellä.
Kannattaa huomata, että ko. tiedostoon tallentuu kaikkien ajettujen mallien tulokset. Eli jos tekisit vaikkapa viisi erilaista ennustemallia aivan eri aiheista, niin niiden tulokset olisivat tässä tiedostossa (tärkempien selittävien muuttujien osalta).
Accuracy.csv tiedostosta taas löydät mallikohtaiset AUC-lukemat eri dataseteille (training, testing, validation), joka auttaa arvioimaan mallin toimivuutta ja yli/alioppimista.
Toki tuolla on muutakin metadataa (esim. ajojen onnistumiseen liittyvää) tallessa mitä tässä ei ole esitelty, mutta toivottavasti idea aukesi näilläkin esimerkeillä.
Validation.csv tiedostossa on ennustemallin antamat ennusteet (ostaako autovakuutuksen) potentiaalisille uusille asiakkaille. Eli kenelle kannattaa tehdä kylmä soitto.

Oheinen taulukko on esimerkki lopputuloksista, eli score on ennustemallin tuottama ennuste (todennäköisyys ostaa autovakuutus). Nyt myyjille vaan lista top 250 asiakkaasta, jolle soittaa.
Miksi käyttää AI-JACK:ia?
Kuten varmaan huomasitte, niin AI-JACK:in käyttö on verrattain helppoa. Käytännössä tein datasetin valmiiksi ja säädin muutaman asetuksen parametritiedostoon, ja loppu tapahtuikin automatisoidusti.
Mikäli vain testailee koneoppimista eri datasettien kanssa, niin se onnistuu varsin mutkattomasti omilla räätälikoodeillakin – ilman tekoälykiihdyttimiä. Toisaalta, mikäli aikoo rakentaa tuotantoratkaisuja, joissa tärkeää on mm.:
- koodin hallinta ja ylläpito (1 versio vs. 1001 versiota)
- iteraatioiden vähentäminen (koodausvirheet)
- ratkaisun tuotannollistaminen (esim. tulokset API:n kautta)
- ajojen ja mallien historian tallennus
Niin näissä tapauksissa AI-JACK:in kaltaisesta kiihdyttimestä on merkittävä apu. Kannattaa myös huomata, että voit muokata AI-JACK:ista juuri sellaisen kuin itse tarvitset.
Huom! AI-JACK (R-versio) on siis ladattavissa Githubista. Mikäli aihe kiinnostaa, niin olet tervetullut kehittelemään tätä pidemmälle.