Over de voorspelling
Kort samengevat
De voorspelling kijkt naar wat de prijs de afgelopen 1–2 weken op hetzelfde uur deed en past dat aan op basis van het verwachte weer (zon, wind, temperatuur), de gasprijs, het type dag en hoe de prijs in dezelfde periode van voorgaande jaren lag. Daarbovenop herkent het model drie marktregimes: een gewone dag, een dag met veel hernieuwbare energie (oversupply) en een schaarse dag. Bij oversupply — veel zon en wind tegelijk, zeker in het weekend — kunnen prijzen negatief worden tot ver onder nul; dat is ook het moment waarop de fout het grootst is. We tonen daarom altijd een onzekerheidsband.
Welke uren zijn een voorspelling?
Vandaag en morgen zijn officiële EPEX day-ahead-prijzen, gepubliceerd door ENTSO-E. Geen schatting — exacte cijfers.
Overmorgen tot zeven dagen vooruit zijn modelschattingen. Hoe verder vooruit, hoe onzekerder — het weer is op dag 7 veel lastiger te voorspellen dan op dag 2.
Per uur of per kwartier?
Voor vandaag en morgen kun je in de grafiek wisselen tussen per uur en per kwartier. De prognose voor de dagen daarna blijft altijd per uur.
Sinds 1 oktober 2025 stelt de Europese stroombeurs EPEX de day-ahead-prijzen niet meer per uur vast, maar per kwartier — vier prijzen per uur in plaats van één. Een uur dat gemiddeld op 5 ct uitkomt, kan binnen dat uur van 12 ct naar onder nul lopen. In het uurgemiddelde verdwijnt die dip; per kwartier zie je hem.
De voorspelling voor overmorgen tot zeven dagen vooruit houden we bewust op uurniveau. Kwartiernauwkeurigheid zo ver vooruit is schijnprecisie: de uitslagen bínnen een uur hangen af van factoren die op die termijn niet te voorspellen zijn.
Wat je leverancier afrekent, hangt af van je contract. De meeste Nederlandse leveranciers rekenen nog af op de uurindex — het gemiddelde van de vier kwartieren, precies wat EPEX daarnaast blijft publiceren. Een groeiend deel rekent per kwartier af. Voor die groep is de kwartierweergave hun feitelijke afrekenbasis; voor de rest is het een scherper beeld van wat er op de markt gebeurt.
Hoe werkt het model?
Stap 1 — Beginprijs uit de afgelopen week
Voor elk toekomstig uur zoeken we de werkelijke prijzen op van hetzelfde uur op vergelijkbare dagen de afgelopen week. De mediaan daarvan wordt de basisprijs. Die absorbeert het dagelijkse patroon (nacht goedkoop, ochtend en avond duurder, middag soms goedkoop door zon) zonder dat we parameters hoeven te kiezen.
Herkent het model een dag als oversupply? Dan kijken we voor de middaguren maar 2 dagen terug in plaats van 7. De reden: zonnige lentedagen veranderen snel — een mediaan van vorige week geeft dan een te hoge startprijs.
Stap 2 — Tien factoren stellen bij
Tien factoren geven elk een score in punten. Het totaal verschuift de basisprijs met 3% per punt:
voorspelling = basisprijs × (1 + totaalpunten × 3%)
De tien factoren:
- Zonproductie — bewolkt geeft plus (duurder), zonnig geeft min. Het model kijkt per uur naar de verwachte straling — op een heldere dag kan het middaguur dubbel zo zonnig zijn als het daggemiddelde, waardoor de prijs op dat uur harder reageert dan op de rest van de dag.
- Windproductie — windstil geeft plus, stormachtig geeft min.
- Temperatuur — vorst geeft een grote plus (warmtepompen op vol vermogen); aangenaam voorjaarsweer geeft een minpunt.
- Gasprijs (TTF) — vergelijkt de actuele gasprijs met het 30-daags gemiddelde. Hoge gasprijs duwt de stroomprijs op, want gascentrales bepalen vaak het rangniveau.
- Type dag — zaterdag en feestdagen scoren min, omdat de vraag dan lager is. Werkdagen zitten al impliciet in de basisprijs.
- Uurcorrectie — kleine seizoenscorrectie: de avondspits weegt in de winter zwaarder dan in de zomer.
- Vorige dag — vergelijkt de prijs van hetzelfde uur gisteren met de basisprijs. Een dag die opvallend anders liep dan verwacht (grote veiling-meevaller of -tegenvaller) trekt de volgende dag meetbaar mee.
- Oversupply-cap — nonlineaire correctie bij extreme oversupply-situaties. Als zon én wind gelijktijdig piekeren terwijl de vraag laag is, versterkt het model de neerwaartse bijstelling extra, want lineaire factoren onderschatten dan systematisch hoe ver de prijs kan zakken.
- Schaarste-cap — het spiegelbeeld van de oversupply-cap, maar omhoog. Bij een winterse Dunkelflaute (weinig zon, windstil én koud) zet gas de prijs en schiet die niet-lineair omhoog. De lineaire zon- en windfactoren vangen dat niet, dus versterkt het model de opwaartse bijstelling extra, zwaarder naarmate het kouder en windstiller is en de gasprijs hoger ligt. Werkt alleen in dat schaarste-regime; in alle andere uren staat hij op nul.
- Seizoen — vergelijkt het huidige niveau met dezelfde periode (zelfde uur en dagtype) in de twee voorgaande jaren uit ons prijsarchief. Zo corrigeert het model voor het patroon over het jaar heen: ligt deze tijd van het jaar historisch hoger of lager dan de afgelopen weken suggereren, dan stelt het de prijs navenant bij. Deze factor verlaagde in onze backtest de winterafwijking aanzienlijk.
Klik in de grafiek op een voorspeld uur om te zien hoe elke factor bijdraagt.
Drie marktregimes
Het model herkent drie situaties die ieder een andere dynamiek hebben:
- Normaal — de gebruikelijke dagelijkse prijsschommeling. Gemiddelde fout: ±3 ct/kWh.
- Oversupply ☀️ — veel zon en/of wind, gecombineerd met lage vraag (weekend of feestdag). De stroomprijs kan dan uur voor uur sterk dalen of zelfs negatief worden. Het model herkent dit patroon en past de voorspelling fors neerwaarts aan, maar de werkelijke daling kan nog extremer zijn. Gemiddelde fout: ±5 ct/kWh.
- Schaarste ❄️ — koud weer met weinig zon en wind (Dunkelflaute). Prijzen liggen dan structureel hoger. Het normale niveau schat het model redelijk, maar de scherpe winterpieken onderschat het systematisch — zie Wanneer klopt de voorspelling niet? hieronder.
In de grafiek zie je het regime als kleur van de voorspellingspunten: blauw is normaal, geel is oversupply, rood is schaarste.
Onzekerheidsband
Bij elke voorspelling tonen we een schaduwzone: het gebied waarbinnen de prijs naar verwachting valt. De band wordt breder naarmate:
- het verder vooruit is (dag 7 is onzekerder dan dag 2),
- de totaalscore extremer is (sterk positief of negatief is zeldzamer),
- het regime op oversupply staat (grotere prijsuitslagen mogelijk).
De kleur van de band geeft aan hoe goed het model weet wat het doet voor dat uur — zie de volgende sectie voor uitleg. Zwarte-zwaan-gebeurtenissen — plotselinge gascrises, grote centrale-uitval, extreme weerverschijnselen — vallen ver buiten de band. Die zijn met historische patronen simpelweg niet te voorspellen.
Hoe zeldzaam is dit uur?
Niet alle voorspellingen zijn even goed onderbouwd. Het model zoekt in de recente geschiedenis naar vergelijkbare uren: uren met vergelijkbare zonstraling, windsnelheid, temperatuur en dagtype. Hoe meer zulke uren gevonden worden, hoe betrouwbaarder de schatting. Het resultaat heet de plausibility score.
Er zijn vier niveaus:
- Normaal — genoeg vergelijkbare uren gevonden. De schaduwband is lichtblauw, zoals gewoonlijk.
- ⚠ Zelden gezien — weinig vergelijkbare uren in de log. De band kleurt oranje als waarschuwing. Het model rekent wel een prijs, maar de historische basis is dun.
- ⚠⚠ Historisch zeldzaam — nauwelijks vergelijkbare uren gevonden. Rode band. Denk aan een combinatie die het model nog zelden of nooit heeft meegemaakt: een extreme lentedag met piekzon, nauwelijks wind én een feestdag tegelijk. De onzekerheid is dan veel groter dan de band aangeeft.
In de tooltip (klik of hover op een voorspeld uur in de grafiek) staat hoeveel vergelijkbare uren er gevonden zijn. Bij een negatieve prijsverwachting voegt het model ook een historisch gecorrigeerde kans toe: hoe vaak leidde een vergelijkbare situatie in het verleden ook echt tot een negatieve prijs?
Let op: vlak na een update van het model zijn er nog weinig historische vergelijkingsuren opgeslagen. In die periode scoren veel uren automatisch laag — dat is verwacht en zegt niets over de kwaliteit van de voorspelling zelf.
Hoe goed presteert het model?
Op basis van een backtest over 60 dagen (5 maart – 3 mei 2026) tegen werkelijke EPEX-prijzen:
- Gemiddelde fout op 1 dag vooruit: ~3,5 ct/kWh. Dat klinkt veel, maar de prijzen fluctueren zelf ook sterk — op zonnige middagen tot tientallen cent per kWh.
- Goedkope uren raden we goed: in 77% van de gevallen zit het model het goedkoopste dagdeel correct — handig als je wil weten wanneer je apparaten aan te zetten.
- Negatieve prijzen: het model voorspelt de richting (prijs daalt fors) in 54% van de gevallen correct, maar de diepte van de daling blijft lastig. Van alle uren met een werkelijk negatieve prijs wordt 30% vooraf herkend als negatief.
- Rangvolgorde: de Spearman-correlatie tussen voorspelde en werkelijke uurvolgorde is 0,78 — het model weet doorgaans welke uren goedkoop zijn ten opzichte van andere uren op dezelfde dag.
Het model leert geleidelijk bij: elke voorspelling wordt vergeleken met de werkelijke prijs zodra die beschikbaar is. Systematische afwijkingen — zoals het structureel te hoog schatten van de zonnige middaguren — worden daarmee over de tijd gecorrigeerd.
Wanneer klopt de voorspelling niet?
- Extreme zonnige middagen: een heldere lentedag in het weekend kan de prijs naar −200 of zelfs −500 EUR/MWh drukken. Het model ziet de richting, niet de diepte.
- Winterse Dunkelflaute: koude, windstille dagen met weinig zon. Het model herkent de schaarste en duwt de prijs sinds v3.1 met de schaarste-cap (factor 9) gericht omhoog. Dat halveert de structurele onderschatting in onze winter-backtest ruwweg, maar haalt 'm niet helemaal weg: bij de diepste pieken valt de werkelijke prijs nog steeds hoger uit dan het model schat. De seizoensfactor (factor 10) trekt het niveau juist iets omlaag en werkt hier dus tegen de schaarste-cap in.
- Plotselinge marktschokken: een aardgasleiding die uitvalt, geopolitieke spanning of een koudegolf door heel Europa schuiven het prijsniveau in dagen buiten de modelband.
- Centrale-uitval: als een grote centrale of kabelverbinding onverwacht wegvalt, schiet de prijs lokaal omhoog. Er is geen openbare realtime-data om dit op te vangen.
Neem nooit alleen op basis van deze voorspelling een grote financiële beslissing. Zie ook de disclaimer.
Reproduceerbaar
De voorspeldata is openbaar beschikbaar. Wie wil kan de cijfers natellen.
- Voorspellingsscript:
scripts/forecast.py - Live voorspeldata (open data):
/data/forecast.json
Bronnen: day-ahead prijzen via ENTSO-E Transparency Platform · weersverwachting via Open-Meteo (CC-BY 4.0) · gasprijs via Yahoo Finance (TTF=F).
Fout of feedback?
Stuur een mail naar contactstroomvoorspeller@gmail.com