Voorspellen aantal doelpunten voetbal: gebruik expected goals (xG)

Waarom je xG moet gebruiken bij het voorspellen van doelpunten

Als je het aantal doelpunten wilt voorspellen bij een voetbalwedstrijd, vertrouw je misschien op vorm, blessures of historische resultaten. Dat zijn nuttige signalen, maar expected goals (xG) geeft je een veel concretere maatstaf voor kwaliteit van kansen. xG beoordeelt elke kans op basis van hoe waarschijnlijk het is dat die kans resulteert in een doelpunt. Daardoor kijk je niet alleen naar het resultaat (wel of geen doelpunt), maar naar de onderliggende kwaliteit van het spel dat tot kansen leidt.

Door xG toe te passen kun je bijvoorbeeld snel herkennen of een team ‘pech’ heeft gehad (lage scoringsresultaten maar hoge xG) of juist geluk (veel goals uit weinig xG). Voor jou als voorspeller betekent dit: betere inschattingen op korte termijn, meer vertrouwen in trends en een objectieve manier om aanval- en verdedigingskwaliteit te vergelijken.

Wat is expected goals (xG) en hoe werkt het in de praktijk?

xG is een statistische waarde tussen 0 en 1 die aangeeft hoe groot de kans is dat een specifieke kans een doelpunt wordt. Een schot met een xG van 0,20 heeft dus een verwachte kans van 20% om te scoren. In een wedstrijd kun je alle individuele xG-waarden optellen om de verwachte doelpunten voor een team te krijgen. Dat totaal helpt je te voorspellen hoeveel doelpunten redelijk zijn gezien de kwaliteit van de kansen.

Welke variabelen bepalen een xG-waarde?

  • Afstand en positie van het schot ten opzichte van het doel.
  • Hoek van het schot: hoe scherper of makkelijker de hoek is.
  • Type kans: kopbal, schot met de voet, penalty of vrije trap.
  • Situatie: open spel, counter, rebound of assist-situatie.
  • Verdedigende druk en of de keeper goed gepositioneerd stond (afhankelijk van dataset).

Je zult merken dat verschillende data-aanbieders iets andere modellen gebruiken. Sommige modellen wegen bijvoorbeeld de positie van medespelers of de snelheid van de aanval mee; andere blijven bij basisvariabelen zoals afstand en schottype. Voor jouw voorspellingen is het belangrijk om te weten welke xG-bron je gebruikt en hoe consistent die is over tijd.

Wat je moet weten over interpretatie en beperkingen

Hoewel xG krachtig is, is het geen garantie. Variantie speelt een grote rol: keepers kunnen uitzonderlijke reddingen verrichten, en sommige spelers zijn uitzonderlijk effectief in afwerking. Ook zijn sommige wedstrijdsituaties (slecht veld, weersomstandigheden) niet altijd adequaat gecapteerd in het xG-getal. Verder is het zinvol om naar xG per 90 minuten, xG-conceded en de recente xG-trend te kijken in plaats van naar één enkele wedstrijdwaarde.

In de volgende sectie ga je stap-voor-stap leren hoe je xG-gegevens verzamelt, verwerkt en omzet in concrete voorspellingen voor het aantal doelpunten in aankomende wedstrijden.

Stap 1: xG-gegevens verzamelen en opschonen

Voordat je iets kunt voorspellen, heb je betrouwbare data nodig. Volg deze stappen om een bruikbare xG-dataset op te bouwen:

– Kies je bronnen: populaire aanbieders zijn StatsBomb, Opta, Wyscout en Understat. Sommige bieden API-toegang, andere exportmogelijkheden (CSV/JSON). Let op definities: wat telt als “shot”, en worden rebounds of penalties apart gelogd?
– Verzamel gebeurtenisdata per schot: wedstrijd, tijdstip, schutter, schotlocatie, schottype, xG-waarde, situatie (open spel, counter, rebound), en of het doelpunt werd gescoord. Voor verdediging: speleropstelling en keeperinformatie.
– Opschonen: verwijder dubbele regels, standaardiseer team- en spelernamen, converteer coördinaten naar één systeem. Beslis expliciet of je penalties meeneemt of uitsluit (penalties hebben hoge xG maar vervormen scoring-verwachtingen).
– Agregeren en normaliseren: bereken xG per 90 minuten, xG-conceded per 90 en xG-differential. Gebruik rolling vensters (bijv. 8–20 wedstrijden) en/of exponentiële gewichten (recente wedstrijden zwaarder) zodat je rekening houdt met vorm zonder kleine samples te oversensibiliseren.
– Splitsen naar context: maak aparte statistieken voor thuis/uit, vs. topteams, en na blessures of coachwissels. Markeer wedstrijden met afwijkende omstandigheden (slecht veld, extreme weersomstandigheden) als dat in de bron mogelijk is.

Zorg dat je dataset reproduceerbaar is: documenteer datums, filters en eventuele manuele correcties. Dat maakt latere kalibratie en foutanalyse veel eenvoudiger.

Stap 2: Van xG naar concrete scorevoorspellingen

Er zijn meerdere manieren om van xG naar een kansverdeling over doelpunten te komen. Hieronder de meest gebruikte en praktisch toepasbare methodes, inclusief aandachtspunten.

– Directe Poisson-aanpak: neem het gemiddelde xG per team voor een wedstrijd als lambda en modelleer goals ~ Poisson(lambda). Dit is simpel en snel, geschikt voor over/under voorspellingen. Nadeel: Poisson veronderstelt onafhankelijkheid en gelijke variatie, wat niet altijd klopt.
– Shot-level simulatie (aanbevolen voor nauwkeurigheid): simuleer elk geregistreerd schot als een Bernoulli-trial met de specifieke xG-waarde. Herhaal de simulatie (Monte Carlo, bijv. 10.000 iteraties) om een distributie van mogelijke uitslagen te krijgen. Dit model houdt rekening met de heterogeniteit van kansen.
– Bivariate of copula-modellen: om correlatie tussen teamscores (bijv. wanneer beide teams veel kansen creëren) te modelleren, kun je een bivariate Poisson of copula gebruiken. Handig voor correct-score kansen.
– Compensaties en aanpassingen: weeg in je verwachting huisvoordeel, afwezigheid van basisspelers (pas xG naar beneden/omhoog op basis van vervangers), en fixture congestion. Voor wedstrijden met beperkte data (bijv. jeugdcompetities) kun je expert- of bookmaker-inschattingen gebruiken als priors.
– Kalibratie en onzekerheid: vergelijk je modeluitkomsten met werkelijke resultaten over een testperiode. Gebruik Brier score en betrouwbaarheidsgrafieken. Geef voorspellingen altijd met betrouwbaarheidsintervallen (bij shot-simulaties kun je percentielen rapporteren).

Praktische toepassing: gebruik de simulatie-uitkomsten om kansen voor “meer/ minder dan 2.5 goals”, exacte scorekansen, en winstkansen per team te berekenen. Vergelijk deze modelkansen met bookmaker-odds om value bets te vinden — maar denk altijd aan variantie en bankrollbeheer.

Stap 3: Valideer, kalibreer en iterateer je model

Nadat je data en voorspellingsmodel staan, is de volgende stap het objectief toetsen en verbeteren. Richt je op reproduceerbare evaluatie en voeg systematisch aanpassingen toe wanneer prestaties achterblijven.

  • Backtest en out-of-sample: evalueer op een periode die je niet gebruikte bij het trainen; controleer stabiliteit over verschillende seizoenen.
  • Kalibratie: controleer of gemodelleerde kansen overeenkomen met waargenomen frequenties (calibratieplot, Brier score). Gebruik indien nodig isotone regressie of Platt-scaling.
  • Metrieken: gebruik meerdere scores zoals Brier, log loss en ROC/AUC voor classificatietaken; voor scorevoorspellingen vergelijk kansverdelingen met KS-test of probabilistische scores.
  • Iteratie en feature-onderzoek: experimenteer met gewichten voor recente wedstrijden, differentiële xG bij formatiewijzigingen en het effect van sleutelspelers.
  • Monitoring: implementeer een eenvoudig dashboard om modelafwijkingen vroeg te signaleren en leg alle data- en modelwijzigingen vast (reproduceerbaarheid).

Aan de slag: praktische tips en bronnen

Begin klein en bouw stapsgewijs uit: kies één betrouwbare xG-bron, maak een heldere pipeline voor data-opschoning en test eerst een simpele simulatie-aanpak. Documenteer beslissingen en benchmark regelmatig tegen bookmakers en historische resultaten. Als je verdieping wilt, bieden externe bronnen praktische uitleg en voorbeelden — Meer over xG bij StatsBomb.

Blijf kritisch en leer van fouten: xG is een krachtig hulpmiddel, geen magische oplossing. Met consistente data, goede evaluatie en gecontroleerde iteratie kun je echter veel betrouwbaarder voorspellingen maken van het aantal doelpunten en betere besluitvorming ondersteunen.

Brian Long

Learn More →