Voorspellingen
Analyse

Bouw je eigen voetbalvoorspellingsmodel

Auteur: Hendrik van Leeuwen
Bouw je eigen voetbalvoorspellingsmodel

De data die je nodig hebt, een Poisson-model stap voor stap opgebouwd tot een volledig scoregrid, de correcties die de moeite waard zijn, walk-forward backtesten zonder vooruitkijkbias, en de rekenkunde die zegt wanneer een model de uren niet waard is.

Een voetbalvoorspellingsmodel is een procedure die wedstrijdgeschiedenis omzet in een kans voor elke uitslag, en vanuit dat grid in een prijs voor elke markt op het wedformulier. De kern ervan is één verdeling en twee getallen per wedstrijd — hoeveel doelpunten elke ploeg naar verwachting zal scoren. Alles wat volgt is datahygiëne, correcties en testen, en daar gaan de meeste zelfgemaakte modellen stilletjes de fout in.

Samengevat.
  • Je hebt wedstrijdresultaten op wedstrijdniveau nodig met data en locaties, geen seizoensgemiddelden. Twaalf thuis- en twaalf uitwedstrijden per club is het werkbare minimum.
  • Het basismodel is Poisson: twee verwachte-doelpuntencijfers leveren een grid van uitslagen, en 1X2, totalen en BTS zijn allemaal sommen van cellen in dat grid.
  • Bij de uitgewerkte wedstrijd geeft het grid 51,4% thuis, 24,5% gelijk, 24,1% uit — eerlijke prijzen van 1,95, 4,08 en 4,14.
  • Backtest walk-forward of helemaal niet: elk cijfer dat over het hele seizoen is berekend, bevat de uitslag van de wedstrijd die je prijst.
  • De benchmark is niet winst, maar de markt: als je kansen niet beter zijn dan die op het wedformulier, redt geen inzetschema ze.

Wat het model moet verslaan

De vergelijking is niet je model tegen de werkelijkheid, maar tegen de prijs. Een 1X2-formulier telt doorgaans op tot ongeveer 105%, dus de opslag is ruwweg vijf punten verdeeld over de uitkomsten — de berekening staat in de gids over bookmarges.

Dat stelt de lat. Om de moeite waard te zijn om op te wedden, moet je kans de markt verslaan met meer dan de marge op de kant die je steunt. Ongeveer even goed zijn als het formulier is een echte prestatie en levert toch gestaag verlies op.

De data die je echt nodig hebt

Begin met de kleinste tabel die het model ondersteunt: elke extra kolom is iets extra om schoon te houden.

VeldWaarom nodigVeelgemaakte fout
Datum en tijd van aftrapOrdent de data voor testen en weging op recentheidSorteren op speelronde in plaats van datum na uitstel
Thuis- en uitclubSplits elk cijfer per locatieNaamswijzigingen en dubbele spellingen die twee clubs creëren
Doelpunten per ploegDe enige verplichte uitvoervariabele van het modelNoteren van verlenging- of strafschoppendoelpunten in bekerwedstrijden
CompetitieCompetitie- en bekerwedstrijden gedragen zich andersMengen van een nationale competitie met Europese wedstrijden
Schoten en verwachte doelpunten, indien beschikbaarEen minder ruisende input dan doelpunten zelfMengen van cijfers van twee aanbieders met verschillende definities
De prijs die je had kunnen nemenMaakt van een voorspelling een testbare weddenschapDe prijs van vandaag opslaan en doen alsof die toen beschikbaar was

Twee seizoenen van één divisie is genoeg om op te bouwen en nog één om tegen te testen. Doelpunten zijn ruisrijk — een ploeg kan goed spelen en met 0-1 verliezen — daarom helpen op kans gebaseerde inputs zodra de basisversie werkt: zie verwachte doelpunten uitgelegd en de bredere lijst van statistieken die uitslagen voorspellen.

Het kernmodel in drie stappen

Stap één — het eigen niveau van de competitie. Stel dat de divisie 240 wedstrijden heeft gespeeld met 612 doelpunten: 2,55 per wedstrijd. Thuisploegen scoorden 336 ervan en uitploegen 276, dus de thuisbasis is 336 ÷ 240 = 1,40 en de uitbasis 276 ÷ 240 = 1,15. Die twee getallen bevatten al het thuisvoordeel, gemeten in plaats van aangenomen.

Stap twee — vier ratio's. Voor de thuisclub: deel doelpunten gescoord per thuiswedstrijd door 1,40 en doelpunten tegen per thuiswedstrijd door 1,15. Voor de bezoekers: deel doelpunten gescoord uit door 1,15 en doelpunten tegen uit door 1,40. Een rating van 1,00 betekent precies gemiddeld in die taak.

Stap drie — twee verwachte-doelpuntencijfers. Vermenigvuldig, nooit optellen. Stel dat de thuisploeg 1,30 scoort in aanval thuis en de bezoekers 0,91 in verdediging uit; het thuiscijfer is 1,40 × 1,30 × 0,91 = 1,65. Als de bezoekers 1,05 scoren in aanval uit en de thuisploeg 0,87 in verdediging thuis, dan is het uitcijfer 1,15 × 1,05 × 0,87 = 1,05.

Het scoregrid en wat eruit komt

Doelpuntenaantallen volgen een Poisson-vorm dicht genoeg om mee te prijzen: de kans op precies k doelpunten bij een verwachting van μ is e−μ × μk ÷ k faculteit, de formule uiteengezet in de gids over doelpuntenlijnen. Voor μ = 1,65 zijn de kansen van de thuisploeg op 0, 1, 2, 3 en 4 doelpunten 19,2%, 31,7%, 26,1%, 14,4% en 5,9%. Voor μ = 1,05 zijn die van de bezoekers 35,0%, 36,7%, 19,3%, 6,8% en 1,8%.

Vermenigvuldig elk thuiscijfer met elk uitcijfer en je hebt het grid. Waarden zijn percentages; rijen zijn thuisdoelpunten, kolommen uitdoelpunten.

Thuis / uit01234
06,727,063,701,300,34
111,0911,646,112,140,56
29,159,615,041,770,46
35,035,282,770,970,25
42,082,181,140,400,11

Deze vijfentwintig cellen beslaan 96,9% van de uitkomsten, dus reken door tot acht of tien doelpunten voordat je sommeert. Elke markt is dan een som van cellen: onder de diagonaal is een thuisoverwinning, de diagonaal een gelijkspel, erboven een uitoverwinning.

Het volledige grid optellen geeft 51,4% thuis, 24,5% gelijk en 24,1% uit. Eerlijke prijzen zijn de omgekeerden: 1 ÷ 0,514 = 1,95, 1 ÷ 0,245 = 4,08, 1 ÷ 0,241 = 4,14. Hetzelfde grid zegt dat beide teams scoren in 52,5% van de gevallen (eerlijk 1,90) en drie of meer doelpunten komen voor in 50,6% van de gevallen (eerlijk 1,97), dus één berekening prijst de hele wedstrijd.

Voorbeeld. Het wedformulier toont 1,85 / 3,60 / 4,40. Omzetten naar percentages geeft 54,1% + 27,8% + 22,7% = 104,6%, dus het boek heeft 4,6% opslag — de methode staat in quoteringen omzetten in kans. Tegen jouw grid is de thuisprijs duur: 0,514 × 1,85 − 1 = −4,9%, een pas. De uitprijs is dat niet: 0,241 × 4,40 − 1 = +6,0%, wat bij een inzet van € 5 neerkomt op € 0,30 aan verwachte waarde. Over veertig van zulke weddenschappen van € 5 — € 200 ingezet — is dat ongeveer € 12, aankomend in een zeer onregelmatige reeks.

Correcties die de moeite waard zijn, in volgorde

  1. Weging op recentheid. Een wedstrijd van afgelopen oktober moet niet even zwaar tellen als een van maart. Weeg elke wedstrijd met een vervalfactor — ongeveer elke dertig wedstrijden halveren is een verstandig begin — in plaats van een harde grens bij tien wedstrijden.
  2. Krimp voor kleine steekproeven. Een gepromoveerde club met zes wedstrijden mag geen 1,60 aanvalsrating hebben. Met k wedstrijden en een constante van 10, neem k ÷ (k + 10) van de ruwe rating en de rest van het competitiegemiddelde.
  3. De lage-scorecorrectie. Onafhankelijk Poisson onderschat licht 0-0 en 1-1 en overschat 1-0 en 0-1, omdat in een echte wedstrijd de twee scores niet onafhankelijk zijn. Die vier cellen bijstellen is de standaard eerste verfijning.
  4. Splitsing per competitie. Bekerwedstrijden, wedstrijden zonder belang en Europese wedstrijden gedragen zich anders: modelleer ze apart of sluit ze uit.
  5. Handmatige aanpassingen, spaarzaam. Een bevestigde afwezigheid van een eerste keus spits of keeper verdient een aanpassing. Twee aanpassingen per wedstrijd is een model met een helper; tien is een persoon die raadt met extra stappen.

Backtesten zonder vooruitkijkbias

Vooruitkijkbias is alle informatie in je test die je niet zou hebben gehad op het moment van wedden. Het is stil, het flatteert altijd, en het is de reden dat de meeste zelfgemaakte modellen er op historie uitstekend uitzien en live geld verliezen.

KortwegWat het lektEffect op het resultaat
Ratings gebouwd over het hele seizoenDe uitslag van de wedstrijd die wordt geprijsdFlat teert sterk; het model kent het antwoord half
Testen op dezelfde data die zijn gebruikt om drempels te kiezenJe eigen terugblik op welke regels werktenElke drempel lijkt optimaal
Slotkoersen gebruiken als de genomen prijsInformatie die na je weddenschap binnenkwamOverschat voorsprong, omdat slotkoersen scherper zijn
Wedstrijden met ontbrekende data weglatenMeestal de gestaakte en vreemde wedstrijdenVerwijdert precies de uitslagen die pijn doen
Sorteren op speelronde in plaats van aftraptijdVerplaatste wedstrijden die later worden gespeeldKlein maar systematisch, en altijd in jouw voordeel

De oplossing is walk-forward testen. Sorteer elke wedstrijd op aftraptijd; herbouw voor elke wedstrijd de ratings uit wedstrijden die ervoor zijn geëindigd, prijs het, noteer de weddenschap die de regel zou hebben geplaatst en de toen beschikbare prijs, en ga verder. Houd één seizoen onaangeroerd tot het model definitief is, en behandel het eerste resultaat ervan als het echte.

Belangrijk. Tel elke weddenschap die de regel genereert, inclusief de weddenschappen waar je jezelf uit had gepraat. Een backtest die stilletjes wedstrijden uitsluit, is geen test van het model maar van je geheugen, en dezelfde discipline geldt voor het logboek van je echte weddenschappen — zie je weddenschappen bijhouden.

Kalibratie: zijn de percentages eerlijk?

Winst is een trage en ruisrijke maat voor een model. Nauwkeurigheid is sneller: neem de kans die je gaf, trek 1 af als de gebeurtenis plaatsvond en 0 als dat niet gebeurde, en kwadrateer het verschil. Lager is beter, en je gemiddelde kan direct worden vergeleken met dat van de markt.

WedstrijdModelMarktUitslagModel fout²Markt fout²
155%50%Gewonnen0,20250,2500
240%45%Verloren0,16000,2025
362%58%Gewonnen0,14440,1764
430%35%Verloren0,09000,1225
548%52%Gewonnen0,27040,2304
625%22%Verloren0,06250,0484

Het model totaal is 0,9298 over zes wedstrijden, een gemiddelde van 0,155; de markt is 1,0302, een gemiddelde van 0,172. Bij deze handvol is het model nauwkeuriger — en zes wedstrijden beslissen niets, dat is het punt. Hoe lang een oordeel echt duurt, wordt uitgewerkt in variantie en steekproefgrootte.

Voer dezelfde maat ook per band uit. Als alles wat je op 60% waardeert ongeveer 60% van de tijd wint, is het model gekalibreerd; als de zelfverzekerde band consequent tekortschiet, worden de ratings opgerekt.

Wanneer een model de moeite niet waard is

Tel de uren eerlijk: veertig om een eerste versie te bouwen, daarna twee of drie per week om de data actueel te houden. Stel dat het twintig kwalificerende weddenschappen per week oplevert van € 5 met een echte 3% voorsprong. Dat is 20 × € 5 = € 100 omzet en € 3 per week aan verwachte waarde — ruwweg € 1 per uur onderhoud, nog vóór een enkele verliesmaand.

Drie dingen maken dat erger: markten die je niet kunt modelleren, waar je data dunner is dan die van de operator; competities onder zware professionele aandacht, waar de prijs al bevat wat jouw grid weet; en succes zelf, want een account dat de prijs blijft verslaan, krijgt zijn inzet beperkt — zie beperkte accounts.

Een model is de moeite waard om te bouwen als je een getal wilt om mee te redeneren in plaats van een gevoel, en kunt accepteren dat het belangrijkste product weigeringen zijn. Voor de output zonder het onderhoud brengt gestructureerde analyse van enkele wedstrijden je een groot eind — zie hoe analyseer je een wedstrijd en de divisies op de toernooipagina.

Veelgestelde vragen

Heb ik programmeervaardigheden nodig om dit te bouwen?

Niet voor de bovenstaande versie. Een spreadsheet met één rij per wedstrijd, vier ratings per club en een grid van vijfentwintig cellen doet alles wat hier wordt beschreven. Code wordt noodzakelijk voor walk-forward testen over meerdere seizoenen, omdat het handmatig herbouwen van ratings voor elke wedstrijd onpraktisch is.

Waarom wijkt het model zo vaak af van de markt?

Meestal omdat het informatie mist in plaats van waarde vindt. Afwezigheden, een trainerswissel, een neutraal veld en rouleren voor een bekerwedstrijd zitten allemaal in de prijs en geen ervan in het grid. Behandel een groot verschil als een aanleiding om de inputs te controleren, en sla over als je niet kunt verklaren waar het vandaan komt.

Moet ik verwachte doelpunten gebruiken in plaats van werkelijke doelpunten als input?

Zodra de basisversie werkt, ja. Doelpunten zijn een kleine steekproef van een ruisrijk proces en kanskwaliteit stabiliseert sneller, dus ratings gebouwd op verwachte doelpunten bewegen minder bij één freak-uitslag. Draai beide een seizoen en vergelijk hun kwadratische fouten voordat je overschakelt.

Hoeveel historie moeten de ratings gebruiken?

Ongeveer anderhalf seizoen met verval, in plaats van een vast venster. Te kort en één 4-0 herschrijft een rating; te lang en je beschrijft een selectie die niet meer bestaat. Krimp naar het competitiegemiddelde wanneer minder dan acht wedstrijden op de relevante locatie een cijfer ondersteunen.

Dit artikel is alleen voor informatieve doeleinden en is geen aansporing om te gokken. Wedden brengt het risico van geldverlies met zich mee — zet nooit meer in dan je je kunt veroorloven te verliezen. 18+. Als gokken niet langer entertainment is, lees dan onze gids voor verantwoord gokken en zoek hulp.
HV
Hendrik van Leeuwen
Voetbalexpert voor EFL Cup, Eerste Liga, WK, CL en Conference League

Hendrik van Leeuwen is een voetbalexpert met ruime ervaring in het analyseren van toernooien zoals de EFL Cup, Eerste Liga, het Wereldkampioenschap, de Champions League en de Conference League. Al jarenlang volgt hij deze competities op de voet, waarbij hij zich richt op vorm, opstellingen, statistieken zoals schoten en passing, en tactische keuzes van coaches. Zijn aanpak is analytisch en feitelijk, zonder overdreven voorspellingen, om lezers een gebalanceerd inzicht te geven in de wedstrijden.

Alle artikelen van de auteur →