
{"id":227,"date":"2026-03-26T17:03:22","date_gmt":"2026-03-26T17:03:22","guid":{"rendered":"https:\/\/www.projektiox.fi\/?p=227"},"modified":"2026-03-26T17:27:12","modified_gmt":"2026-03-26T17:27:12","slug":"koneoppimismallit-jalkapallo-ottelun-tuloksen-ennustamisessa-random-forest-ja-extreme-gradient-boost","status":"publish","type":"post","link":"https:\/\/www.projektiox.fi\/index.php\/2026\/03\/26\/koneoppimismallit-jalkapallo-ottelun-tuloksen-ennustamisessa-random-forest-ja-extreme-gradient-boost\/","title":{"rendered":"Koneoppimismallit jalkapallo-ottelun tuloksen ennustamisessa &#8211; Random forest ja extreme gradient boost"},"content":{"rendered":"\n<p><strong>Tavoite: <\/strong>Luodaan koneoppimisalgoritmien avulla malli, joka tuottaa ennusteen todenn\u00e4k\u00f6isyyksin\u00e4 jalkapallo-ottelun lopputuloksesta (kotijoukkueen voitto, tasapeli, vierasjoukkueen voitto). Kohde rajattu on Englannin valioliigan ottelukohtaiseen dataan ja ennustamiseen. Algoritmeiksi valittiin ns. p\u00e4\u00e4t\u00f6spuumallit random forest ja extreme gradient boost. Laskentaty\u00f6kaluina on Python ja Scikit-learn kirjastot sek\u00e4 Optuna hyperparametrien optimointiin.<\/p>\n\n\n\n<p><strong>Data<\/strong><\/p>\n\n\n\n<p>Pohjadata poimittiin Googlen kaggle-yhteis\u00f6palvelussa julkaistusta projektista ja datasetist\u00e4: Kamran Ali &#8211; Football Match Data Analysis (<a href=\"https:\/\/www.kaggle.com\/code\/whisperingkahuna\/football-match-data-analysis\">Football Match Data Analysis<\/a>). Aineisto sis\u00e4lt\u00e4\u00e4 eurooppalaisten jalkapallo-sarjojen ottelukohtaisia tilastotietoja vuosilta 2000-2025. T\u00e4ss\u00e4 projektissa aineisto rajattiin Englannin valioliigapeleihin vuosilta 2010-2025. Alkuper\u00e4isess\u00e4 aineistossa oli 48 muuttujaa, joista valittiin ydinmuuttujat jatkoanalyysiin.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"354\" height=\"1024\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table1-354x1024.png\" alt=\"\" class=\"wp-image-232\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table1-354x1024.png 354w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table1-104x300.png 104w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table1-531x1536.png 531w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table1.png 598w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"1024\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table2-486x1024.png\" alt=\"\" class=\"wp-image-233\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table2-486x1024.png 486w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table2-142x300.png 142w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table2.png 599w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Data-aineisto sis\u00e4lt\u00e4\u00e4 joukkueiden Elo-pistearvot l\u00e4hell\u00e4 otteluiden ajankohtaa. Elo-pistearvo kuvaa joukkueen tasoa ja suoriutumista muita joukkueita vastaan. Form-luvut ovat joukkueiden voittamia pisteit\u00e4 liukuvana summana viimeisist\u00e4 kolmesta tai viidest\u00e4 ottelusta. N\u00e4iden lis\u00e4ksi datasta laskettiin liukuvia keskiarvoja viimeisist\u00e4 20 ottelusta voitettujen pisteiden, tehtyjen maalien, p\u00e4\u00e4stettyjen maalien ja laukausten suhteen. Muuttujien muodostamisessa huomioitiin lis\u00e4ksi joukkueiden positio otteluissa kotijoukkueena ja vierasjoukkueena. Lopulliseen mallien koulutus- ja testiaineistoon muodostettiin viel\u00e4 lis\u00e4muuttujia ydinmuuttujien erotuksista (&#8221;diff-features&#8221;). Ennustettava kohdemuuttuja FTResult (kotivoitto, tasapeli, vierasvoitto) koodattiin lukuarvoiksi (0, 1, 2). Datassa valmiina olevia vedonly\u00f6ntikertoimia verrattiin my\u00f6hemmin (evaluointivaihe) mallien tuottamiin todenn\u00e4k\u00f6isyysennusteisiin.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"1024\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table3-1-502x1024.png\" alt=\"\" class=\"wp-image-236\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table3-1-502x1024.png 502w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table3-1-147x300.png 147w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table3-1.png 599w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"442\" height=\"1024\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table4-442x1024.png\" alt=\"\" class=\"wp-image-235\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table4-442x1024.png 442w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table4-129x300.png 129w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/table4.png 599w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Data (X, y) jaettiin testi ja koulutusdatoiksi (X_train, X_test, y_train, y_test) suhteella 20\/80. Koulutusaineistossa oli 4651 tapausta, eli rivi\u00e4 ja testiaineistossa 1163.<\/p>\n\n\n\n<p><strong>Mallien koulutus ja testaus<\/strong><\/p>\n\n\n\n<p>Random forest algoritmilla koulutettu malli ennusti lopputuloksen testiaineistosta 0.53 tarkkuudella (accuracy). Kun mallin hyperparametrit optimoitiin Optunalla (<a href=\"https:\/\/optuna.org\/\">Optuna &#8211; A hyperparameter optimization framework<\/a>) tarkkuus kasvoi marginaalisesti 0.01 yksik\u00f6ll\u00e4 ja oli 0.54. Koeastelmia (trials) ajettiin 60 kertaa. Malli ennusti otteluiden kotivoittoja ja vierasvoittoja kohtalaisen hyvin, mutta tasapelej\u00e4 huonosti. T\u00e4m\u00e4 on odotettua, koska tasapelin todenn\u00e4k\u00f6isyys on useimmiten pienin ja mallin ennuste perustuu l\u00e4ht\u00f6kohtaisesti suurimmalle todenn\u00e4k\u00f6isyydelle. Ns. optimoitu malli keskittyi kokonaan ennustamaan koti-ja vierasvoittoja. Mallien osuvuus oli parempi ennusteista laskettuna (recall) verrattuna todellisiin tapahtumiin (precision). Mallit laitettiin my\u00f6s laskemaan ottelun lopputulos satunnaistamalla ennustetta (_rnd). Ennuste perustui t\u00e4ss\u00e4 tapauksessa mallien tuottamilla painotetuilla todenn\u00e4k\u00f6isyyksill\u00e4 arvottuun lopputulokseen. T\u00e4m\u00e4 nosti odotetusti tasapelien osumatarkkuutta, mutta laski kokonaistarkkuutta. &#8221;Tasapeliongelmaa&#8221; ei l\u00e4hdetty ratkaisemaan t\u00e4m\u00e4n pidemm\u00e4lle, koska harjoituksen ja mallien p\u00e4\u00e4tavoite oli vain tuottaa ennusteet todenn\u00e4k\u00f6isyyksist\u00e4 eri lopputuloksille.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"510\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report-1024x510.jpg\" alt=\"\" class=\"wp-image-243\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report-1024x510.jpg 1024w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report-300x149.jpg 300w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report-768x382.jpg 768w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report-1140x568.jpg 1140w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report.jpg 1215w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Extreme gradient boosting (XGboost) algoritmilla tuotettu malli ei tuonut juuri lis\u00e4arvoa verrattuna pelkk\u00e4\u00e4n random forest -malliin. XGboost k\u00e4ytt\u00e4\u00e4 my\u00f6s p\u00e4\u00e4t\u00f6spuumallia, mutta pyrkii korjaamaan mallin virheit\u00e4 rakentamalla uusia puita edellisten puiden virheiden pohjalta. XGboost tuotti osin marginaalisesti parempia evaluaatiolukuja esim. ennustettujen lopputulosten osalta (recall), mutta kokonaisuudessaan arvio oli hy\u00f6tyjen kannalta ristiriitainen verrattuna random forest -malliin.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"509\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2-1024x509.jpg\" alt=\"\" class=\"wp-image-244\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2-1024x509.jpg 1024w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2-300x149.jpg 300w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2-768x381.jpg 768w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2-1140x566.jpg 1140w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/classf_report2.jpg 1218w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Testi aineiston todellisia vedonly\u00f6ntikertoimista laskettuja todenn\u00e4k\u00f6isyyksi\u00e4 otteluiden lopputuloksista verrattiin mallien tuottamiin todenn\u00e4k\u00f6isyyksiin jakaumien muodossa. Alla olevat kuvat optimoidun XGboost-mallin ennusteilla.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"590\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_distrb.png\" alt=\"\" class=\"wp-image-242\" style=\"width:700px;height:auto\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_distrb.png 684w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_distrb-300x259.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure>\n\n\n\n<p>Jakaumat laskettiin my\u00f6s ennustettujen ja &#8221;todellisten&#8221; todenn\u00e4k\u00f6isyyksien erotuksesta. 90 % erotuksista sijoittui v\u00e4lille: Kotijoukkue \u00b1 0.11, tasapeli \u00b10.05 ja vierasjoukkue \u00b10.11<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"296\" src=\"http:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_diff_distrb2.png\" alt=\"\" class=\"wp-image-246\" srcset=\"https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_diff_distrb2.png 684w, https:\/\/www.projektiox.fi\/wp-content\/uploads\/2026\/03\/prob_diff_distrb2-300x130.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p class=\"post-excerpt\">Tavoite: Luodaan koneoppimisalgoritmien avulla malli, joka tuottaa ennusteen todenn\u00e4k\u00f6isyyksin\u00e4 jalkapallo-ottelun lopputuloksesta (kotijoukkueen voitto, tasapeli, vierasjoukkueen voitto). Kohde rajattu on Englannin&#8230;<\/p>\n","protected":false},"author":1,"featured_media":229,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,23,15,22,26,14,24,25],"tags":[],"class_list":["post-227","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytiikka","category-extreme-gradient-boost","category-jalkapallo","category-koneoppiminen","category-optuna","category-python","category-random-forest","category-scikit-learn"],"_links":{"self":[{"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/posts\/227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/comments?post=227"}],"version-history":[{"count":11,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/posts\/227\/revisions"}],"predecessor-version":[{"id":256,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/posts\/227\/revisions\/256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/media\/229"}],"wp:attachment":[{"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/media?parent=227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/categories?post=227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.projektiox.fi\/index.php\/wp-json\/wp\/v2\/tags?post=227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}