Tavoite: Luodaan koneoppimisalgoritmien avulla malli, joka tuottaa ennusteen todennäköisyyksinä jalkapallo-ottelun lopputuloksesta (kotijoukkueen voitto, tasapeli, vierasjoukkueen voitto). Kohde rajattu on Englannin valioliigan ottelukohtaiseen dataan ja ennustamiseen. Algoritmeiksi valittiin ns. päätöspuumallit random forest ja extreme gradient boost. Laskentatyökaluina on Python ja Scikit-learn kirjastot sekä Optuna hyperparametrien optimointiin.

Data

Pohjadata poimittiin Googlen kaggle-yhteisöpalvelussa julkaistusta projektista ja datasetistä: Kamran Ali – Football Match Data Analysis (Football Match Data Analysis). Aineisto sisältää eurooppalaisten jalkapallo-sarjojen ottelukohtaisia tilastotietoja vuosilta 2000-2025. Tässä projektissa aineisto rajattiin Englannin valioliigapeleihin vuosilta 2010-2025. Alkuperäisessä aineistossa oli 48 muuttujaa, joista valittiin ydinmuuttujat jatkoanalyysiin.

Data-aineisto sisältää joukkueiden Elo-pistearvot lähellä otteluiden ajankohtaa. Elo-pistearvo kuvaa joukkueen tasoa ja suoriutumista muita joukkueita vastaan. Form-luvut ovat joukkueiden voittamia pisteitä liukuvana summana viimeisistä kolmesta tai viidestä ottelusta. Näiden lisäksi datasta laskettiin liukuvia keskiarvoja viimeisistä 20 ottelusta voitettujen pisteiden, tehtyjen maalien, päästettyjen maalien ja laukausten suhteen. Muuttujien muodostamisessa huomioitiin lisäksi joukkueiden positio otteluissa kotijoukkueena ja vierasjoukkueena. Lopulliseen mallien koulutus- ja testiaineistoon muodostettiin vielä lisämuuttujia ydinmuuttujien erotuksista (”diff-features”). Ennustettava kohdemuuttuja FTResult (kotivoitto, tasapeli, vierasvoitto) koodattiin lukuarvoiksi (0, 1, 2). Datassa valmiina olevia vedonlyöntikertoimia verrattiin myöhemmin (evaluointivaihe) mallien tuottamiin todennäköisyysennusteisiin.

Data (X, y) jaettiin testi ja koulutusdatoiksi (X_train, X_test, y_train, y_test) suhteella 20/80. Koulutusaineistossa oli 4651 tapausta, eli riviä ja testiaineistossa 1163.

Mallien koulutus ja testaus

Random forest algoritmilla koulutettu malli ennusti lopputuloksen testiaineistosta 0.53 tarkkuudella (accuracy). Kun mallin hyperparametrit optimoitiin Optunalla (Optuna – A hyperparameter optimization framework) tarkkuus kasvoi marginaalisesti 0.01 yksiköllä ja oli 0.54. Koeastelmia (trials) ajettiin 60 kertaa. Malli ennusti otteluiden kotivoittoja ja vierasvoittoja kohtalaisen hyvin, mutta tasapelejä huonosti. Tämä on odotettua, koska tasapelin todennäköisyys on useimmiten pienin ja mallin ennuste perustuu lähtökohtaisesti suurimmalle todennäköisyydelle. Ns. optimoitu malli keskittyi kokonaan ennustamaan koti-ja vierasvoittoja. Mallien osuvuus oli parempi ennusteista laskettuna (recall) verrattuna todellisiin tapahtumiin (precision). Mallit laitettiin myös laskemaan ottelun lopputulos satunnaistamalla ennustetta (_rnd). Ennuste perustui tässä tapauksessa mallien tuottamilla painotetuilla todennäköisyyksillä arvottuun lopputulokseen. Tämä nosti odotetusti tasapelien osumatarkkuutta, mutta laski kokonaistarkkuutta. ”Tasapeliongelmaa” ei lähdetty ratkaisemaan tämän pidemmälle, koska harjoituksen ja mallien päätavoite oli vain tuottaa ennusteet todennäköisyyksistä eri lopputuloksille.

Extreme gradient boosting (XGboost) algoritmilla tuotettu malli ei tuonut juuri lisäarvoa verrattuna pelkkään random forest -malliin. XGboost käyttää myös päätöspuumallia, mutta pyrkii korjaamaan mallin virheitä rakentamalla uusia puita edellisten puiden virheiden pohjalta. XGboost tuotti osin marginaalisesti parempia evaluaatiolukuja esim. ennustettujen lopputulosten osalta (recall), mutta kokonaisuudessaan arvio oli hyötyjen kannalta ristiriitainen verrattuna random forest -malliin.

Testi aineiston todellisia vedonlyöntikertoimista laskettuja todennäköisyyksiä otteluiden lopputuloksista verrattiin mallien tuottamiin todennäköisyyksiin jakaumien muodossa. Alla olevat kuvat optimoidun XGboost-mallin ennusteilla.

Jakaumat laskettiin myös ennustettujen ja ”todellisten” todennäköisyyksien erotuksesta. 90 % erotuksista sijoittui välille: Kotijoukkue ± 0.11, tasapeli ±0.05 ja vierasjoukkue ±0.11