WattWanneer

Hoe werkt het voorspelmodel?

Datastromen

Het model combineert meerdere onafhankelijke databronnen, in de tijd uitgelijnd op uurniveau (Europe/Amsterdam, met DST-bewaking):

  • EPEX-prijzen. Tien jaar historische day-ahead spotprijzen voor Nederland, aangevuld met de nieuwste day-ahead prijzen via Nord Pool, met ENTSO-E als reserve.
  • Weer in Nederland. Temperatuur, wind op 10 en op 100 meter hoogte, zoninstraling en bewolking uit Open-Meteo, op vier punten: twee op de Noordzee, het IJsselmeer en Zuid-Nederland. Van de wind op ashoogte maken we een schatting van het windvermogen, want wat een turbine levert groeit veel sneller dan de windsnelheid.
  • Wind in Duitsland. Sinds 21 september 2026 ook de verwachte wind op zeven punten over de Duitse windparken, op land en op zee. Op dure avonden volgt de Nederlandse prijs de Duitse bijna precies, dus of het daar waait telt net zo zwaar als of het hier waait.
  • Gasprijs. De TTF day-ahead prijs. Zonder wind en zon bepalen de gascentrales wat stroom kost.
  • Feestdagen NL en buurlanden. Vlaggen voor Nederlandse feestdagen (Koningsdag, Hemelvaartsdag, Tweede Paasdag, etc.) plus aparte vlaggen voor feestdagen in Duitsland, België en Frankrijk. Dat laatste is bijzonder belangrijk op dagen als 1 mei, wanneer NL gewoon werkt maar de buurlanden vrij zijn: de export valt weg en de prijs kan diep negatief worden.
  • Kalender en zonnestand. Uur, dag van de week en maand, plus de stand van de zon: hoogte, richting en het aantal minuten tot zonsopkomst en zonsondergang.

Modelpad: drie modellen, elk met een eigen taak

Elke dag trainen er drie modellen opnieuw, allemaal op de nieuwste data:

  • Het basismodel kijkt naast weer en kalender ook naar de prijs van een uur, een dag en een week eerder. Voor de eerstvolgende uren is dat sterk. Bij elke training strijden een HistGradientBoosting- en een RandomForest-model om de laagste fout op de laatste 20% van de data, en de winnaar gaat in productie.
  • Het direct-model voorspelt sinds 18 september 2026 dag 2 tot en met 7. Het rekent elk uur rechtstreeks uit, zonder een eerdere voorspelling als invoer te gebruiken. Als houvast krijgt het de gemiddelde prijs van de afgelopen week, plus het weer in Nederland en Duitsland, de zonnestand, de kalender en hoeveel dagen vooruit het kijkt. Recente data telt zwaarder: een waarneming van een half jaar oud telt half.
  • Het fundamentals-weermodel gebruikt helemaal geen prijzen. Het voorspelt uit weer, zonnestand, kalender en gasprijs, getraind op de laatste 120 dagen, en bepaalt hoe hoog elke verre dag als geheel ligt. Hoe dat samenkomt staat hieronder.

Waarom dat direct-model er kwam: het basismodel leunt zwaar op de prijs van gisteren. Een paar dagen vooruit is die prijs van gisteren zijn eigen voorspelling, en dan herhaalt het vooral zichzelf. Het weer kreeg er nauwelijks nog tussen, en juist de zon bepaalt hoe diep het middagdal zakt.

Een strikte time-based split voorkomt dat toekomstinformatie in het model lekt: tijdens training zien we nooit een prijs voordat het model erom moet "raden". Dat houdt de geclaimde accuratesse eerlijk.

Ver vooruit: dag 2 tot 7

Voor morgen toont de site vanaf de dagelijkse update rond 13:25 de echte marktprijzen. Dag 2 tot en met 7 zijn voorspelling, en die bouwen we uit twee delen. Het direct-model levert de eigen inschatting per uur. Die mengen we met een dagprofiel. De vorm (waar het middagdal en de avondpiek liggen) komt voor de helft uit het uurprofiel van de afgelopen drie weken, en voor de helft uit recente dagen die ongeveer even zonnig waren als de voorspelde dag. Beide apart voor werkdag en weekend. Het niveau van de dag komt uit het fundamentals-weermodel, zodat een zonnige of windstille dag een eigen prijsniveau krijgt.

Hoe verder vooruit, hoe minder zwaar het model meetelt: op dag 2 voor 55 procent, op dag 7 nog voor 25 procent. De rest komt uit het dagprofiel, omdat een weersverwachting van een week vooruit zelf ook onzeker is.

Daarbovenop zitten twee automatische bijsturingen. De eerste is een vangnet: na een extreme prijsdag heeft een model de neiging het hoge niveau dagenlang vast te houden. Zat er in de afgelopen 48 uur een uur boven 40 cent, of zaten onze voorspellingen voor de eerste twee dagen de laatste tijd meer dan 3 cent te hoog, dan telt het model half zo zwaar mee tot het zich hersteld heeft. De tweede geldt voor zaterdag- en zondagmiddag, van 10:00 tot en met 16:00. Daar zaten we stelselmatig te hoog, dus op die uren telt het model nog iets minder mee.

Bias-correctie: gebouwd, en bewust uitgezet

Lange tijd legden we een tweede laag over de voorspelling: een correctie per uur van de dag, apart voor werkdag en weekend, op basis van hoeveel we er de afgelopen zeven dagen naast zaten. Sinds 24 augustus 2026 staat die uit. Het model werd goed genoeg dat de correctie vooral toeval ging corrigeren. In de week ervoor was de fout zonder correctie 1,88 cent en met correctie 2,20 cent. We rekenen hem nog wel elke dag uit, zodat we zien wanneer hij weer iets toevoegt.

Logboek: wat we recent verbeterden

Het model is geen statisch ding: elke dag meten we de voorspelling tegen de echte prijzen, en elke wijziging moet zich eerst bewijzen in een backtest voordat hij live gaat. De belangrijkste aanpassingen van de afgelopen periode, met wat ze aantoonbaar opleverden:

  • Juni 2026: recency-weging en een backtest-harnas. Trainingen wegen recente data zwaarder (de stroommarkt van 2016 zegt weinig over die van nu) en elke modelwijziging wordt sindsdien eerst nagespeeld over historische weken via het exacte productiepad. Resultaat: gemiddelde fout van 2,6 naar 2,2 cent en de laadvenster-treffer van 48 naar 54 procent exact. Minstens zo waardevol: meerdere ideeën die intuïtief goed klonken (meer weerfeatures, andere weging) bleken in de backtest niets op te leveren en zijn nooit live gegaan.
  • 2 juli 2026: vangnetten na de recordweek. De recordprijzen van eind juni legden een zwakte bloot: na een extreme prijsdag hield het model het hoge niveau dagenlang vast. Sindsdien blokkeert een sanity-check ontspoorde voorspellingen vóór publicatie, evalueren we dagelijks de volledige 7-daagse horizon, en stuurt een automatische guard bij zodra recente voorspellingen structureel te hoog blijken. In een replay van de recordweek halveerde de fout op dag 2 (van 14 naar 7 cent).
  • 2 juli 2026: een weermodel voor de verre dagen. Dag 4 tot 7 leken voorheen te veel op elkaar, omdat de externe prognoses maar drie dagen vooruit reiken. Nu bepaalt een apart weermodel (weer, zonnestand, kalender, gasprijs) het prijsniveau van elke verre dag, zodat een zonnige of windstille dag verderop in de week een eigen niveau krijgt. Backtest: fout op dag 3-7 van 2,60 naar 2,31 cent bij gelijke venster-treffer. Eerste productieweek (6 tot 8 juli): fout 2,9 cent, de structurele overschatting daalde van +4,0 naar +0,7 cent, en alle negen gemeten laadvensters zaten binnen een uur juist.
  • 6 juli 2026: kapotte databron opgeruimd. De ENTSO-E prognosefeed (verwacht verbruik en opwek) brak door de Europese overstap op kwartierdata en bleek in een backtest geen meetbare winst meer te leveren voor wat bezoekers zien: dag 1 toont toch al de echte marktprijzen, en verder vooruit was de variant zónder deze feed zelfs iets beter. Verwijderd dus; de pipeline is er sneller en robuuster van geworden.
  • 24 augustus 2026: bias-correctie uit. Zie hierboven. Zonder correctie was de fout lager (1,88 tegen 2,20 cent) en klopte de richting vaker (86,7 tegen 80,1 procent van de uren).
  • 14 september 2026: weekendmiddagen. Op zaterdag- en zondagmiddag zat de voorspelling sinds juni gemiddeld 1,08 cent te hoog, over 945 weekendmiddaguren. Sindsdien telt het model op die uren minder zwaar mee. Nagespeeld op diezelfde uren: fout van 3,04 naar 2,67 cent. Over de hele week is het effect klein, maar het zit precies op de uren waarop mensen de was of de auto plannen.
  • 18 september 2026: het direct-model. Een nieuw model voor de verre dagen dat niet op zijn eigen eerdere voorspellingen leunt. Nagespeeld over 5.759 uur van november 2025 tot september 2026, met de weersverwachting zoals die toen bekend was: fout van 2,91 naar 2,44 cent, beter in elk seizoen. Op middagen waar het dal onder 2 cent zakte (werkelijk gemiddeld -0,88 cent) zei het oude model 7,20 cent en het direct-model 2,45. Eerlijke kanttekening: na het mengen met het dagprofiel kon het verschil maar over één seizoen worden gemeten, de zomer, en daar was het ongeveer gelijk. Op 28 september rekenen we de eerste echte weken af.
  • 21 september 2026: eerder overnemen en Duitse wind. Het direct-model doet nu ook dag 2. Op middagen met een diep dal voorspelde het oude model daar gemiddeld 3,06 cent en het direct-model 1,38, bij een werkelijke prijs van 0,23 cent. Dezelfde dag kwam de wind in Duitsland erbij. Voor dinsdagavond 22 september staat de beursprijs om 19:00 op 57 cent, want het waait dan in Nederland en in Duitsland nauwelijks. Een dag eerder was het hier net zo windstil, maar waaide het in Duitsland wel, en bleef de avond op 24 cent. Nagespeeld over 117 voorspellingen: de fout gemiddeld 0,05 cent lager, op de avonden 0,11 cent, en in 10 van de 12 maanden beter. Zo'n piek van 57 cent ziet het model nog steeds niet aankomen. Bij windstilte in beide landen schiet ongeveer een op de drie avonden zo ver door, en welke dat wordt zie je pas als de marktprijzen bekend zijn.
  • 23 september 2026: het dal volgt de zon. Het middagdal kwam uit een profiel van de afgelopen drie weken, en dat is voor een zonnige en een bewolkte dag hetzelfde. Daardoor kwam maar een derde van het echte zoneffect in de voorspelling. Nu komt de helft van de dagvorm uit recente dagen met vergelijkbare zon. Nagespeeld over 117 voorspellingen: het zoneffect verdubbelt, en het goedkoopste 3-uursblok staat vaker precies goed (van 38,5 naar 41,8 procent, in voorjaar en zomer van 42,9 naar 49,0). Wat het nog niet oplost: op middagen waar de prijs onder nul zakt, voorspellen we een paar dagen vooruit nog steeds te ondiep.
  • 27 september 2026: zonnige weekendmiddagen zakken mee. Op een zonnige zaterdag, zondag of feestdag staat de stroomprijs 's middags urenlang rond de nul, en daar zaten we steeds een paar cent boven. Nu volgt de voorspelling op die uren de echte prijzen van recente weekenddagen met vergelijkbare zon, en telt het model minder mee. Nagespeeld over 161 weekenddagen sinds eind juni: op weekendmiddagen gemiddeld 2,3 cent naast in plaats van 3,1, en het goedkoopste laadmoment iets vaker goed. Feestdagen rekenen we voortaan als weekend, want op een zonnige Tweede Pinksterdag kostte stroom 's middags bijna hetzelfde als op de zondag ervoor. Wat het kost: valt een zonnig voorspelde dag toch bewolkt uit, dan zitten we daar te laag.

Wat de site nog meer toont

Bovenop de raw voorspelling levert de homepage een paar gebruikersvriendelijke extra's:

  • Goedkoopste laadvenster, kiesbaar tussen 1, 2, 3, 5, 10 en 24 uur — afhankelijk van wat je wil doen (snel laden, hele dag verwarmen, batterij voltappen).
  • Automatische toelichting — een Nederlandstalige zin die uitlegt waarom dat venster goedkoop is (feestdag, zon, wind, weekend) met een passend icoon.
  • Versheids-badge — hoe lang geleden de voorspelling is bijgewerkt, met een waarschuwing als hij ouder dan 26 uur is.

Inherent onvoorspelbare gebeurtenissen

Hoewel het model veel factoren meeneemt, blijven sommige prijsschommelingen inherent onvoorspelbaar. Voorbeelden:

  • plotselinge storingen of uitval van centrales
  • extreme afwijkingen in wind- of zonneproductie binnen één dag
  • onverwachte pieken in vraag of industriële afschakelingen
  • acute netcongestie of noodmaatregelen van TenneT
  • grote bewegingen in gas- of CO₂-prijzen op zeer korte termijn
  • intraday-onbalans of niet-geplande redispatch

Dit zijn gebeurtenissen die zelfs professionele marktmodellen niet volledig kunnen voorspellen. Daarom blijft elke prijsverwachting een inschatting: een best mogelijke projectie op basis van beschikbare informatie, maar nooit een garantie. Onder "Hoe trefzeker is WattWanneer?" hieronder zie je hoe dicht we er in de praktijk bij zitten.

Hoe trefzeker is WattWanneer?

Elke dag meten we publiek wat hier stond tegen de werkelijke EPEX-prijzen. Met /v1/history reken je onze cijfers zelf na.

— van de dagen zat het goedkoopste laadmoment binnen een uur goed, tot 7 dagen vooruit
— per kWh goedkoper dan het daggemiddelde
— per kWh verschil met het perfecte laadmoment
— van de uren binnen 5 cent van de werkelijke prijs

Hoe lezen we deze cijfers?

We meten wat hier echt stond. Elke dag leggen we de voorspellingen van de afgelopen drie weken naast de prijzen die EPEX uiteindelijk publiceerde. Per dag telt de voorspelling die daarna live stond, en alleen dag 2 tot en met 7. Morgen telt niet mee: die prijs is al bekend op het moment dat wij publiceren, en dat zou geen voorspelling zijn.

Goedkoopste laadmoment binnen een uur

Per voorspelde dag vergelijken we ons goedkoopste blok van 3 uur met het blok dat achteraf echt het goedkoopst was. Begint ons blok binnen een uur van het echte, dan telt de dag als goed. Dit is waar je de voorspelling voor gebruikt: weten wanneer je laadt.

Goedkoper dan het daggemiddelde

Wat je per kWh bespaarde door in ons blok te laden, tegenover de gemiddelde prijs van die dag. Gerekend met de echte prijzen, dus dit is wat het je werkelijk had opgeleverd.

Verschil met het perfecte laadmoment

Wat laden in ons blok per kWh meer kostte dan laden in het blok dat achteraf het goedkoopst bleek. Wie het van tevoren precies had geweten, betaalde dit bedrag minder. Hoe dichter bij nul, hoe beter.

Binnen 5 cent

Het deel van de uren waarin onze voorspelling minder dan 5 cent per kWh van de uiteindelijke prijs zat. Dit is de strengste van de vier, want hier telt elk uur mee, ook de avondpieken die geen enkel model precies ziet aankomen.

Wat is niet te voorspellen?

Geen enkel model voorspelt alles, en wij doen niet alsof. Dit zijn de situaties waarin onze voorspelling het het lastigst heeft:

Daarom meten we elke dag publiek hoe goed de voorspelling was (hierboven bij het track record) en kun je het via de API tot op het uur narekenen. Een voorspelling blijft een inschatting, geen garantie. Het verschil zit erin dat je bij ons precies kunt zien hoe goed die inschatting de afgelopen week was.

Gemaakt met passie door...

Herco Zandwijk, 39, uit Soest. Vriendin, drie kinderen, achttien zonnepanelen en een Tesla Model Y die gelukkig niet elke dag aan de laadpaal hoeft.

Precies daar begon het. Met een dynamisch contract wil je laden wanneer stroom goedkoop is, maar elke app die ik vond keek maar één dag vooruit. Terwijl mijn auto prima drie dagen kan wachten op dat ene zonnige, winderige dal. Dan zoek ik het zelf wel uit, dacht ik. Wat begon als een avondje rekenen aan prijsdata liep, zoals dat gaat met hobby's, volledig uit de hand. Het resultaat staat op deze pagina: een voorspelmodel dat zichzelf elke dag opnieuw traint en publiek laat controleren.

Overdag run ik Negoci, mijn bedrijf waarin ik apps en websites bouw die de wereld een klein stukje beter moeten maken. WattWanneer is daarvan mijn favoriete project, omdat er alles in samenkomt waar ik blij van word: data, techniek en een energiemarkt die elke dag verandert. Dat het resultaat ook nog eens nuttig is, maakt het af. Wie stroom gebruikt op het juiste moment bespaart geld, en elke kilowattuur die van de dure avondpiek naar een zonnige middag verschuift, ontlast het stroomnet en scheelt een gascentrale die harder moet draaien. Kleine moeite per huishouden, grote optelsom als we het met veel mensen doen. Aan die optelsom werk ik hier elke dag.

Verder hou ik van films, muziek (gitaar, drums en DJ'en), voetbal, squash, padel, mountainbiken en astronomie. Dat laatste bleek achteraf gewoon marktonderzoek: de zonnestand zit letterlijk in het model.

Vragen, feedback of sparren over de energietransitie? Mail naar wattwanneer@negoci.nl of vind me op LinkedIn.