Open source · Open data · Serieuze wiskunde

Voorspellingen die
wél kloppen

Gebouwd op 49.477 historische interlands, live WK-data en open datasets die iedereen kan inzien. Dezelfde wiskunde die de grote spelers gebruiken — alleen dan navolgbaar, van ruwe bron tot kans.

⚽ Bekijk alle voorspellingen Hoe het werkt ↓
Hoe het werkt

Drie technieken,
drie heel verschillende klusjes.

Samen vormen ze een keten: het ene levert de grondstof voor het volgende.

ELO

Hoe sterk is een team?

ELO is een rapportcijfer voor sterkte, oorspronkelijk bedacht voor schaken. Elk team begint op 1500 punten. Na elke wedstrijd verschuiven de punten: de winnaar pakt van de verliezer. De clou zit in hoeveel er verschuift. Versla je een veel sterker team, dan incasseer je een flinke sprong — dat had niemand verwacht. Versla je een dwerg, dan levert het bijna niets op.

Doe dat voor 49.477 interlands, chronologisch van 1872 tot nu, en de punten kristalliseren vanzelf uit naar de echte krachtsverhoudingen. Brazilië zweeft bovenin, Bhutan bungelt onderaan — niemand hoefde dat handmatig in te voeren. De wedstrijduitslagen doen het werk.

Wat ELO je niet vertelt: de score. Het zegt dat team A waarschijnlijk wint, niet of dat 1–0 of 4–1 wordt. Daarvoor is de volgende stap.

λ

Hoeveel goals vallen er? — Poisson-regressie

Een Poisson-verdeling is de wiskunde van zeldzame gebeurtenissen die in een vast tijdvak kunnen vallen: hoeveel klanten lopen per uur een winkel binnen, hoeveel druppels per minuut uit een kraan — en hoeveel goals er in negentig minuten vallen. Het past goed bij voetbal, juist omdat goals schaars en min of meer onafhankelijk zijn.

"Regressie" betekent: een verband leren uit data. Het model krijgt de ELO-verschillen als invoer en leert daaruit het verwachte aantal goals — in jargon λ (lambda). Eén regressor voor de thuisploeg, één voor de uitploeg.

Let op het woord verwacht. λ van 1,8 betekent niet dat er 1,8 goals vallen — dat kan niet eens. Het betekent: gemiddeld over heel veel denkbeeldige herhalingen zou je rond de 1,8 uitkomen. De spreiding is precies waar de laatste stap op inhaakt.

🎲

Speel de wedstrijd 50.000 keer — Monte Carlo

Je hebt nu twee λ's: het verwachte aantal goals voor thuis en uit. In plaats van daar één nette voorspelling uit te rekenen, doet Monte Carlo iets bruters en eerlijkers: het speelt de wedstrijd 50.000 keer, in software.

Elke simulatie trekt een willekeurige score uit de Poisson-verdeling rond die λ. De ene eindigt 1–0, de volgende 2–2, een uitschieter 4–1. Doe dat vijftigduizend keer en je telt: in hoeveel procent won team A? Wint het in 31.000 van de 50.000 runs, dan is de winkans 62%.

De naam komt van het casino in Monaco — je lost een lastig kansprobleem op door heel vaak te gokken en de uitkomsten te tellen, in plaats van het uit te rekenen met een formule.

De keten in één zin: ELO bepaalt wie er sterker is — Poisson vertaalt dat naar hoeveel goals je mag verwachten — Monte Carlo speelt de wedstrijd duizenden keren om daar een winkans uit te tellen.
49.477
Historische wedstrijden
50.000
Monte Carlo simulaties
336
Teams in ELO systeem
5
Open databronnen

Dit is een van mijn side projects. Niet omdat het moet, maar omdat datasets en modellen me energie geven.

Geef me een paar open repos, een Poisson-regressor en een vrij weekend, en ik bouw liever een voorspelmodel dan dat ik uitrust.

Alle code, alle data, alle algoritmes liggen open. Niet als marketing — transparantie is het onderwerp. Een model dat je niet kunt nalopen, is geen model. Het is een orakel.

Dagelijks bijgewerkt

Matchcard voor elke wedstrijd

Voor elke WK-wedstrijd genereren we automatisch een kaart met kansen, ELO-ratings en verwachte goals. Klaar om te delen.


Databronnen

Open data, van eerste bron tot laatste rij

Vijf open datasets, samen completer dan veel betaalde diensten. Elke bron is publiek, traceerbaar en herbruikbaar — je kunt alles wat hier binnenkomt zelf ophalen en controleren.

📊
martj42 / international_results

De gouden standaard voor historische interland-uitslagen. 49.477 wedstrijden van 1872 tot heden, handmatig samengesteld en dagelijks bijgehouden. Doelpunten, thuisvoordeel, neutraalveld-markering — precies wat het model nodig heeft.

GitHub CSV · 4 MB Open Dagelijks
🏆
openfootball / worldcup.json

Live WK 2026 schema en uitslagen in machine-leesbaar JSON. Zodra een wedstrijd gespeeld is, herberekent het model automatisch de ELO-ratings voor alle resterende duels.

GitHub JSON Open Na elke wedstrijd
📺
ESPN Public API

De ongedocumenteerde maar stabiele ESPN-API levert live scores, wedstrijdminuten en status. Geen sleutel, geen limiet, al jaren betrouwbaar — een stille held van de open sportdata.

REST API Geen key Live · 60s poll
API-Football (backup)

Aanvullende live bron: doelpuntenmakers, kaarten, wissels, opstellingen. De open tier geeft 100 requests per dag — ruim voldoende voor de groepsfase. Springt in als ESPN onvolledig is.

REST API 100 req/dag Backup
👥
openfootball / worldcup.squads

Spelerselecties per land: rugnummer, positie, geboortedatum. Automatisch berekende gemiddelde leeftijd per selectie en volledige kaderlijsten.

GitHub JSON Open
🧠
Eigen inzichten

Het model is goed — jij maakt het beter. Pas aanvals- en defensiefactoren per team aan op basis van vorm, blessures of tactiek. De correcties werken direct door in alle voorspellingen.

Handmatig Direct effect

Het model

Van ruwe data naar kansberekening

Vijf stappen. Elke stap bouwt voort op de vorige. Het resultaat is een kansverhouding die aansluit bij wat historisch gezien echt gebeurt.

01
ELO-rating over 49.477 wedstrijden

Elk team krijgt een ELO-score — hetzelfde systeem als bij schaken. We starten op 1500 punten en doorlopen chronologisch elke interland van 1872 tot nu. Winnen van een sterk team levert meer punten op dan winnen van een zwak land.

ELO_nieuw = ELO_oud + K × (uitslag − verwacht)
02
ELO live bijwerken met WK-resultaten

Zodra een WK-wedstrijd gespeeld is, worden de ELO-ratings direct bijgewerkt. Een verrassingswinst heeft een grotere impact. Alle nog niet gespeelde wedstrijden gebruiken de meest recente ratings.

WK gespeeld → ELO update → volgende voorspellingen
03
Poisson regressiemodel voor verwachte goals

ELO vertelt wie wint — maar niet met hoeveel. Daarvoor trainen we twee Poisson-regressors op historische data: één voor thuisgoals, één voor uitgoals. De gespeelde WK-duels worden meegenomen in de trainset.

λ_thuis, λ_uit = PoissonRegressor(ELO_features)
04
Eigen inzichten toepassen (optioneel)

De modeluitvoer kan gecorrigeerd worden met handmatige inzichten per team: aanvalsfactor, defensiefactor en momentum-multiplier. De correcties zijn transparant zichtbaar in de app.

λ_adj = λ_base × attack × momentum
05
Monte Carlo simulatie · 50.000 runs

Met de verwachte goals trekken we 50.000 keer een willekeurig scoreverloop via Poisson-sampling. Het percentage simulaties waarin team A wint, is de kans op winst. Dit geeft stabielere kansen dan een analytische benadering.

goals ~ Poisson(λ) × 50.000 | P(win) = wins / 50.000

Wat maakt dit anders

Transparant van data tot kans

Geen score verschijnt in de app zonder dat je kunt nalopen hoe hij berekend is.

Live herberekening Elke gespeelde wedstrijd triggert een volledige herberekening van alle resterende kansen.
WK-data in trainset Gespeelde WK-duels gaan direct mee in het Poisson-model, niet alleen in ELO.
Drie live-providers ESPN primair, API-Football als backup, openfootball als open fallback. Altijd data.
Aanpasbare inzichten Handmatig aanvals- en defensiefactoren per team. Jij weet dingen die data niet ziet.
Nauwkeurigheidstrack Live bijgehouden: welk percentage van de voorspellingen klopte. Geen cherry-picking.
100% open data Elke bron is publiek en traceerbaar. Geen betaalmuren, geen zwarte dozen, geen geheimen.
336 ELO-landen Van Brazilië tot Bhutan. Elk land dat ooit een interland speelde, zit in het systeem.
Spelersprofielen Volledige kaders met leeftijd, positie en clubinfo voor alle 48 deelnemende landen.
Arjen Houweling

Gebouwd door Arjen Houweling — AI & ML-specialist. Net als de andere voorspelmodellen op open data op arjenhouweling.nl: transparant gebouwd, geen black box.

Bekijk de voorspellingen van vandaag

Dataanalisten bouwen dit met dure licenties en gesloten modellen. Ik bouw het met Python, open repos en de nieuwsgierigheid die maakt dat ik niet kan stoppen voor het klopt.

⚽ Open de WK 2026 Predictor