Omdat het fijn is om te doen en het interlandbreak is, heb ik me verder verdiept in statistische methodes om voetbalcompetities te voorspellen. Tot nog toe gebruikte ik een heel rudimentaire methode om kansen te bepalen op winst/gelijkspel/verlies in elke match. Na wat wetenschappelijke literatuur door te nemen, heb ik gekozen voor Poisson-modellering, zoals origineel voorgesteld door Maher (1982) en verder uitgewerkt in, bv. Karlis en Ntzoufras (2003), Ley et al. (2019) en Van Eetvelde et al. (2020).
Voor zij die graag wat bijleren, heb ik geprobeerd dit zo duidelijk mogelijk uit te leggen in begrijpelijke taal. ’t Is een langere uitleg voor de geinteresseerden, maar ik hoop dat enkelingen toch iets bijleren 😉
Voor de anderen, de TL;DR: ik heb een beter model gemaakt en daarmee een aantal voorspellingen en analyses verfijnd.
Poisson-modellering
In de analyse en voorspelling van voetbalmatchen (wat bv. gebruikt wordt door gokcenters om ‘odds’ toe te kennen) worden verschillende machine learning en statistische methodes gebruikt. Een van de beste methodes tot nog toe, werkt op basis van Poisson-modellen om het aantal doelpunten in een wedstrijd te modelleren. Andere modellen gebruiken bv. ELO-ratings (uit schaak), xG, …
De Poisson-verdeling modelleert het aantal voorvallen gedurende een bepaalde tijd en geeft de kans aan op 0, 1, 2, 3, … voorvallen binnen die tijdsduur. Typische voorbeelden zijn het aantal telefoontjes die je per dag krijgt, het aantal auto-ongevallen per year, … Nu blijkt dat de Poisson-verdeling ook gebruikt kan worden om de kans te bepalen dat een voetbalteam 0, 1, 2, 3, … doelpunten maakt in een wedstrijd. Dit gebruiken we als basis voor de Poisson-modellering.
Elk team heeft een bepaalde sterkte
In Poisson-modellering voor voetbalwedstrijden gebruiken we, o.a., 1 sterkte-parameter per team en een ‘thuisvoordeel’-parameter (een bonus voor het thuisspelende team). Deze sterkte-parameters gebruiken we dan om het aantal doelpunten in een wedstrijd van Team A (thuis) tegen Team B (uit) te bepalen, wat via de Poisson-verdeling afhangt van de sterkte-parameters. Het aantal doelpunten dat Team A (thuis) scoort hangt dan af van sterkte(Team A)+thuisvoordeel-sterkte(Team B), terwijl dat voor Team B (uit) afhangt van sterkte(Team B)-sterkte(Team A)-thuisvoordeel. Je kan de sterkte-parameter aanpassen voor elke speeldag, bv. als Vossen of Lemoine geblesseerd is, je weinig rust hebt gehad, …
Die sterkte-parameters en de ‘thuisvoordeel’-parameter kunnen we bepalen aan de hand van alle reeds gespeelde wedstrijden in de competitie (noot: er zijn ook nog andere parameters die bv. wedstrijdomstandigheden etc modelleren). Daarbij houden we rekening met de vormcurve door wedstrijden die langer geleden zijn minder hard mee de parameters te laten bepalen. (voor zij die graag op zoek gaan naar meer info: ik heb uiteindelijk independent Poisson modelling with time depreciation using half time = 15 match days gebruikt. Ik heb getest op verschillen met de inflated bivariate Poisson distribution, maar vond geen effecten van meer nadruk op gelijkspel te leggen, noch de interactie-term. Vraag zeker om meer uitleg als je dat wil!)
Na 26 speeldagen, hebben we bv. de sterkte-parameters in de figuur (A) hieronder voor de teams in de Challenger Pro League. Het zijn trouwens zo’n sterkte-parameters en analyses die ook gebruikt worden om de FIFA-ranking voor landen op te stellen (hoewel het systeem van FIFA-ranking ‘dommer’ is dan wat we hier gebruiken (Ley et al. (2019)).
Merk bv. op dat RWDM hier maar op de 4e plaats belandt, terwijl Essevee op de eerste plaats staat. Dit komt oa. doordat RWDM veel matchen met 1-0 heeft gewonnen en het op die manier de odds weet te verslaan. Je kan je afvragen of dat blijft duren 😉. Efficient is het wel namelijk.
We het model verder uitbreiden door in plaats van 1 sterkte-parameter per team te zoeken, een attacking en defending parameter te bepalen. Deze kwantificeren de aanvals- en verdedigingskracht van elk team (zie figuur (B) hieronder). Hier kan je duidelijk zien dat RWDM de beste verdediging heeft, terwijl Essevee de beste aanval heeft. Deze analyse toont duidelijk dat er werk aan de winkel is in de verdediging (iets wat we uiteraard allemaal zien)!
We kunnen deze sterkte-parameter ook doorheen de competitie analyseren, wat in figuur (C) getoond wordt. Dit komt dus niet overeen met het klassement, met wel met de sterkte per team. Je kan hier wel een aantal trends in zien, zoals de neergang van Lommel SK. Ook blijkt dat eigenlijk Frans-Borains een van de zwakste teams van de competitie is, maar dat ze een maximaal aantal punten uit hun doelpunten hebben kunnen halen.
Voorspellen van de uitslag van een wedstrijd
We kunnen nu de kans op elke score van een wedstrijd bepalen aan de hand van de gevonden parameters en het Poisson-model. In figuur (D) vinden jullie bv. de kansen op elke score voor Essevee – RSCA futures. Nu kunnen we ook bepalen hoe goed het model werkt op alle vorige wedstrijden en kan ik het vergelijken met mijn vorig model. Daarvoor gebruik ik volgende techniek: vanaf speeldag 4 bepaal ik telkens de parameters van het model op alle tot dan toe gespeelde speeldagen en voorspel ik de kansen voor alle wedstrijden van de volgende 4 speeldagen. Dit doe ik telkens opnieuw voor elke nieuwe speeldag.
De performantie van het model kunnen we meten op verschillende manieren. De gemakkelijkste begrijpbare manier, maar ook domste manier, is de winst/gelijkspel/verlies-accuraatheid, nl. van hoeveel wedstrijden heeft het model de juiste uitslag (winst/gelijkspel/verlies) voorspeld. Als ik mijn kat willekeurig zou laten kiezen, dan zou die accuraatheid 33% zijn. Dit is een redelijk domme manier om de performantie te meten, omdat het geen rekening houdt met de kansen. Stel dat het model zegt 50% kans winst, 10% kans verlies, 40% kans gelijkspel, en het echte uitslag was een gelijkspel, dan houd je hier geen rekening met het feit dat het model wel degelijk een vrij grote kans op gelijkspel had voorspeld. Daarom gebruiken ze in de literatuur de ‘rank probability score (RPS)’, dat daar wel rekening mee houdt.
In figuur (E) zien jullie de vergelijking met mijn oude, domme model, en het Poisson-model. Het Poisson-model doet duidelijk beter, en is ook substantieel beter dan mijn (nochtans slimme) kat, die willekeurige voorspellingen zou doen.
Voorspellen van de competitie
Nu kunnen, gelijkaardig aan voorheen, dit model gebruiken om het verloop van de competitie te simuleren aan de hand van Monte-Carlo simulaties. Dat wil zeggen dat we op basis van het gevonden Poisson-model 100 000 keer alle komende matchen kunnen simuleren obv de kansen. Stel dat Essevee 62.95% kans heeft om te winnen tegen RSCA Futures, dan zal in die 100 000 simulaties, Essevee 62 950 keer 3 punten erbij krijgen. Zo krijgen we 100 000 verschillende eindstanden en kunnen we kijken wat onze kans op kampioen/directe promotie is (figuur (F)). Het Poisson model is dus duidelijk wat optimistischer dan mijn oud dom model 😉.
Op basis hiervan kunnen we ook het verloop van de competitie analyseren, door na elke speeldag de eindstand te voorspellen. Zo toont figuur (G) doorheen de tijd onze kans op kampioen/directe promotie en figuur (H) het aantal punten dat we nodig hebben.
Ziezo, voor zij die het tot hier gehaald hebben: dikke proficiat! Ik hoop dat je wat slimmer bent geworden en verwelkom graag elke mogelijke vraag! Ik houd jullie verder op de hoogte.
Tot slot: merk op dat ik hier geen gok-advies geef. Gokken = verliezen, op lange termijn winnen enkel gokbedrijven. Info en hulp vind je op gokhulp.be