Ik ben ruim drie jaar bezig met dezelfde vraag: wat is de juiste prijs voor een kilowattuur aan een laadpaal? Niet de hoogste. De juiste. Een prijs waar de eigenaar van de lader fatsoenlijk aan verdient zonder dat de chauffeur die om zeven uur 's avonds met 8% batterij binnenrijdt daarvoor moet opdraaien.
In die periode heb ik prijscurves gebouwd, backtests gedraaid op echte laadsessies, day-aheadprijzen ingelezen en uiteindelijk een prijsmodel in productie gezet op laders die elke dag geld verdienen of verliezen. Wat ik daaruit meeneem is ongemakkelijker dan waar ik op had gerekend. Het model dat vandaag het vaakst als "dynamische prijszetting" wordt verkocht, waarbij je verkoopprijs de energiebeurs volgt, doet niet wat operatoren denken dat het doet. Het is niet fout gebouwd. Het optimaliseert alleen iets anders dan winst.
Dat model is intuïtief en makkelijk uit te leggen aan een klant, en dat verklaart waarschijnlijk waarom het zo hardnekkig is. Maar op de meeste laders die ik heb doorgerekend brengt het minder op dan een saai vast tarief. Hieronder loop ik alle prijsmodellen af die je in Proxilink kan aanzetten, met voor elk een grafiek, en eindig ik bij het model dat we zelf gebouwd hebben.
De aanname die iedereen overneemt
De redenering achter energiegedreven prijszetting is simpel. Je inkoopkost varieert per kwartier, dus je verkoopprijs varieert mee. Duur uur, dure prijs. Goedkoop uur, goedkope prijs. Je marge blijft constant en je bent transparant.
Die redenering beschermt je marge per kilowattuur. Alleen verdient een laadpaal geen marge per kilowattuur, maar marge maal volume. Volume hangt niet af van wat de energiebeurs doet. Het hangt af van hoeveel auto's er op dat uur voor je deur staan, en van hoe gevoelig die chauffeurs zijn voor jouw prijs. Zolang je die tweede factor niet in je model hebt zitten, optimaliseer je een deel van de vergelijking en laat je de rest aan het toeval over.
Waarom de energieprijs niet hetzelfde is als vraag
Neem een lader aan een vrijetijdslocatie. Een bowling, een sportclub, een winkelcentrum. De bezetting piekt tussen één en zes uur 's namiddags. Op een zonnige Belgische dag is dat het venster waarin de day-aheadprijs in het zonnedal duikt, soms tot 20 of 30 euro per MWh.
Wat een energiegedreven model daar doet, is je laagste prijs van de dag op je drukste uur zetten. Je geeft korting aan mensen die sowieso kwamen. 's Nachts, als de spotprijs weer stijgt en er geen mens laadt, gaat je prijs omhoog, terwijl een korting op die uren je misschien wel extra volume had opgeleverd.
Dit is geen zeldzaam scenario. Het is het standaardprofiel van zowat elke bestemmingslader waar mensen laden terwijl ze iets anders aan het doen zijn, en het verklaart waarom drie van de vijf modellen hieronder op zo'n lader onder een vast tarief eindigen.
De vier modellen zonder AI
Proxilink laat je vier klassieke strategieën kiezen. Geen van de vier is slecht. Ze lossen elk een ander probleem op, en dat probleem is niet noodzakelijk het jouwe.
Alle grafieken hieronder tonen dezelfde dag, dezelfde lader en hetzelfde vertrekpunt: een vast tarief van 0,45 euro per kWh (de stippellijn), een inkoop van spot plus 0,05 euro opslag, en het vraagprofiel van een echte bestemmingslader met een namiddagpiek (de schaduwbalkjes). De winstpercentages zijn schattingen op dat ene profiel. Ze verschuiven volledig zodra je vraagprofiel verschuift, en dat is nu net waar dit artikel over gaat.
1. Flat + spot
Het eenvoudigste model. Je prijs op dit kwartier is je basisprijs plus het verschil tussen de inkoopkost van nu en de gemiddelde inkoopkost van vandaag. Staat de spot boven het daggemiddelde, dan zit je erboven. Eronder, dan zit je eronder. Eén op één, zonder versterking of demping.
Flat + spot volgt de spotprijs één op één. Prijsvork 0,39 tot 0,52 euro. Geschat winstverschil tegenover het vaste tarief op dit vraagprofiel: circa −4%.
Dit werkt voor operatoren met een variabel energiecontract die vooral willen vermijden dat ze op een dure dag onder hun kostprijs verkopen. Een bord met "onze prijs volgt de energiebeurs" is een verhaal dat klanten begrijpen, en die uitlegbaarheid is op zich iets waard.
Wat je ervoor inlevert: je verkoopprijs schommelt per kwartier, ook midden in een sessie, en je stuurt geen enkel gedrag. Ligt je vraagpiek in het zonnedal, dan geef je systematisch korting op je beste uren.
2. Forward locked
Zelfde idee, maar het kijkt vooruit. In plaats van de spotprijs van dit moment neemt het model de verwachte inkoopkost over de hele sessie. Proxilink kent de gemiddelde sessieduur per dagdeel op jouw lader, kijkt over dat venster vooruit in de day-aheadcurve, en prijst op dat gemiddelde. De prijs wordt vergrendeld bij sessiestart, dus wat de klant bij het scannen ziet, is wat hij betaalt.
Forward locked prijst op de verwachte inkoopkost over de sessieduur, vergrendeld bij start. Prijsvork 0,39 tot 0,51 euro. Geschat winstverschil: circa −3%.
Van de vijf modellen draagt dit het minste risico. Je marge per kWh blijft beschermd, ook wanneer een sessie over een prijssprong heen loopt, en er zit nergens een gok over klantgedrag in. Voor snelladers langs doorgaande wegen, waar chauffeurs stoppen omdat ze moeten en niet omdat je goedkoop bent, is dit wat mij betreft het model dat je zonder verdere analyse kan aanzetten. Het is puur defensief: het beschermt wat je hebt en zoekt niets bij.
3. Spot two-way
Forward locked met een versterker erop. De afwijking van het daggemiddelde wordt vermenigvuldigd met (1 + agressiviteit), zodat je op dure uren verder omhoog gaat en op goedkope uren verder omlaag. De bedoeling is gedragssturing: laden verschuiven naar de goedkope uren.
Spot two-way versterkt de spotafwijking (agressiviteit 0,35). Prijsvork 0,37 tot 0,53 euro. Geschat winstverschil: circa −4%.
Dat werkt op laders waar de gebruiker écht kan schuiven met zijn laadmoment en waar dat schuiven jou geld bespaart: een thuisparking, een appartementsgebouw, een bedrijfsvloot die 's nachts staat. Daar verplaatst een diepe nachtkorting reëel volume naar goedkope uren.
Bij passanten kan niemand schuiven, en dan werkt de versterking de verkeerde kant op. Je zakt dieper op de uren waar je toch al verkocht en duwt jezelf hoger op uren waar niemand komt. Van de vijf modellen richt dit de meeste schade aan wanneer je het op het verkeerde type lader zet.
4. Vraag-gestuurd (demand seek)
Hier laten we de energieprijs los als stuurvariabele en prijzen we op bezetting: duurder op de drukke uren, goedkoper op de stille. De energieprijs verdwijnt niet uit het model, maar zakt naar de rol van bodem.
Twee waarborgen houden het veilig. Het neutrale punt is het volumegewogen gemiddelde van je vraag, waardoor je gemiddelde prijs bij ongewijzigd gedrag op je basisprijs uitkomt en niet eronder. Daaronder ligt een day-aheadbodem van inkoopkost plus minimummarge, zodat een stille-urenkorting nooit onder je kostprijs kan duiken, ook niet op een dure winterdag.
Demand seek prijst op bezetting (schaduwbalkjes), met day-aheadbodem. Prijsvork 0,39 tot 0,49 euro. Geschat winstverschil: circa +3%.
Voor laders met een duidelijk, herhalend bezettingspatroon is dit een verstandige keuze: bestemmingsladers, horeca, retail. In onze backtest op een lader in Diest was dit het eerste model dat boven het vaste tarief uitkwam terwijl de spotmodellen eronder bleven hangen.
Er zit wel een adder onder het gras. Op een lader waar de vraag in het goedkope nachtdal ligt, bijvoorbeeld een hotel of een residentiële parking, zakt ditzelfde model in onze doorrekening tot −8%. Het zet dan een toeslag op de nachturen, terwijl dat net de uren zijn waarop de inkoop goedkoop is en de klant het meest prijsgevoelig. Prijzen op vraag zonder te weten hoe prijsgevoelig die vraag is, blijft half werk.
Wat we fout hadden
Dat halve werk is de fout die ik zelf drie jaar heb meegedragen. We behandelen prijszetting als een kostenprobleem, terwijl het over gedrag gaat.
De inkoopkost bepaalt je ondergrens en verder niets. Je optimum ligt daar waar één extra cent op je prijs evenveel opbrengt als hij aan verloren volume kost, en waar dat punt precies ligt hangt af van iets wat op geen enkele beurs genoteerd staat: de prijselasticiteit van jouw klanten, op jouw lader, op dat uur.
Om vijf uur bij een winkelcentrum, met een halflege batterij en een auto die er toch al staat, is die elasticiteit laag. Mensen laden ook bij een hogere prijs. Om drie uur 's nachts, wanneer een chauffeur in een route-app drie alternatieven ziet liggen, is ze hoog. Zelfde lader, zelfde kostprijs, ander optimum. Een spotgedreven model kan dat verschil onmogelijk zien, want die informatie zit niet in de spotprijs.
Het vijfde model: winstoptimum per uur
Ons eigen model, dat intern ai_elastic heet, vertrekt daarom van het optimum in plaats van van de kost. Per kwartier berekent het waar de winst maximaal ligt, gegeven een geschatte elasticiteit e voor dat uur:
p* = basisprijs × (1 + e) / (2e) + inkoopkost / 2
Dat is het winstoptimum van een lineair vraagmodel dat verankerd is op je eigen basisprijs. De logica laat zich rechtstreeks lezen. Ligt e onder 1, dan is je publiek weinig prijsgevoelig en ligt het optimum boven je basisprijs; neem je dat niet, dan laat je geld liggen. Ligt e boven 1, dan ligt het optimum eronder, maar alleen wanneer de korting zichzelf terugverdient via extra volume. Wiskundig gebeurt dat enkel als je inkoopkost onder basis × (e−1)/e ligt. Een korting die zichzelf niet terugverdient wordt dus gewoon niet gegeven.
Daar bovenop komen drie lagen die het model bruikbaar maken.
- Agressiviteit als fractie. Een regelaar tussen 0,1 en 1,0 bepaalt hoe ver richting het berekende optimum je gaat: p = basis + agressiviteit × (p* − basis). Op 0,2 blijf je dicht bij je vertrouwde tarief, op 1,0 ga je voluit.
- Vraag-tilt. Bovenop het elasticiteitsoptimum komt een correctie op bezetting, met hetzelfde volumegewogen anker als demand seek. Duurder op de drukste uren, en onder je basisprijs op stille uren om extra klanten te lokken.
- Harde grenzen. Een day-aheadbodem van inkoop plus minimummarge en je eigen minimum- en maximumprijs klemmen elke berekende prijs af. Wat je ook instelt, het model kan niet onder je kostprijs zakken en niet boven je plafond gaan.
AI winstoptimum per uur, begrensd door een vloer van 0,32 euro en een plafond van 0,62 euro. Goedkoper dan het vaste tarief in de nacht en de vroege ochtend, duurder op de inelastische namiddagpiek. Geschat winstverschil: +10% tot +21%, naargelang hoe prijsgevoelig de klanten werkelijk blijken.
Let op waar die curve 's nachts en 's ochtends loopt. Op 15 van de 24 uur ligt de prijs onder het vaste tarief. Het model haalt er niet zomaar meer uit; het zet de prijs per uur op zijn plaats, en op meer dan de helft van de dag betekent dat goedkoper.
Waarom hier AI voor nodig is
Alles hierboven hangt aan die ene parameter e, en elasticiteit valt niet af te lezen. Ze moet geschat worden, per lader en per uur, uit gedrag. Daarvoor heb je iets nodig dat leert in plaats van rekent.
- Drietrapsschatting. Eerst een eigen regressie per lader, van log volume tegen log prijs, per uur, over alle geobserveerde dagen. Te weinig punten of te weinig prijsspreiding, en het model valt terug op een netwerkbrede schatting over alle aangesloten laders. Ontbreekt die ook, dan gelden conservatieve priors per dagdeel: elastisch 's nachts (1,8), inelastisch op de avondpiek (0,5).
- Shrinkage op sessies. De eigen schatting van een lader krijgt gewicht naar het aantal sessies waarop ze steunt, via w = sessies / (sessies + 80). Een uur met vijf sessies leunt zwaar op het netwerk en de prior; een uur met vierhonderd sessies vertrouwt op zichzelf. Eén rare week kan je prijzen zo niet omgooien.
- Clamping vóór het mengen. Ruwe regressies op echte laaddata geven soms onzin. We hebben fits gezien die suggereerden dat hogere prijzen méér volume opleveren. Elke ruwe schatting wordt daarom afgeklemd op het interval 0,2 tot 3,0 voordat ze met de prior gemengd wordt. Dat detail leek klein tot we het in productie zagen: zonder die volgorde bleef de ochtendschatting hangen op haar ondergrens en volgde de curve de bezetting niet meer.
- Data uit roaming. De trainingsdata komt niet alleen uit je eigen QR-sessies. Op een van onze laders is 82% van de geladen kilowatturen roaming, van chauffeurs bij een tiental verschillende e-MSP's die elk een andere prijs betalen. Die verschillen tussen aanbieders leveren de prijsspreiding waar een elasticiteitsschatting op kan steunen. Zonder toegang tot die CDR's blijft elke schatting op haar prior hangen.
De schatting wordt wekelijks herrekend. De prijscurve wordt dagelijks om twee uur 's namiddags gegenereerd zodra de day-aheadprijzen bekend zijn, en de prijs die een klant betaalt ligt vast vanaf het moment dat zijn sessie start. Niemand ziet zijn prijs veranderen terwijl hij staat te laden.
Wat het opbrengt, en wat we niet beloven
Op de laders waar dit vandaag draait, schat het model zijn eigen winsteffect op +5% tot +17% tegenover het vaste tarief dat er daarvoor stond. Die schatting gebruikt de bezettingsdata die het zelf verzamelde, en rekent de klanten zowel prijsgevoeliger als minder prijsgevoelig door dan geschat om tot die vork te komen.
Dan het punt waar ik drie jaar geleden mee begonnen ben: rendement mag niet uit onwetendheid van de klant komen. Daarom zijn de vloer en het plafond hard, ligt de volledige dagcurve vooraf vast en is ze publiceerbaar, staat de prijs vast bij sessiestart, en duikt het model onder je basisprijs op de uren waar de klant prijsgevoelig is. Een chauffeur die 's nachts bij jou laadt, betaalt minder dan bij een vast tarief. Die korting is geen concessie aan het rendement; een deel van het rendement komt er net vandaan, omdat ze volume oplevert dat je anders niet had gehad.
Stapel je verdienmodellen op het dynamische tarief
Een dynamisch tarief is een prijsmotor en verder niets. Het rendement komt pas los wanneer je er meerdere inkomstenstromen op zet die elk een ander type klant bedienen. In Proxilink draaien die naast elkaar op dezelfde lader.
- Ad-hoc via QR. Een passant scant, betaalt met Bancontact of kaart en laadt, zonder app of registratie en zonder e-MSP-commissie op je marge. Op dit kanaal houdt je dynamische prijs zijn volle waarde, omdat er niemand tussen zit.
- Memberships. Een maandbijdrage plus een korting per kWh. Die korting komt bovenop de dynamische prijs, dus je vaste klanten volgen dezelfde curve maar dan een stuk lager. Zo dekken de memberships een deel van je vaste kosten nog voor de eerste sessie van de maand, en maak je je prijsgevoeligste groep meteen loyaal.
- Reservaties. Op de uren waar je model een toeslag zet omdat het druk is, kan je diezelfde schaarste ook rechtstreeks verkopen met een reservatievergoeding vooraf, bovenop de laadsessie. De twee versterken elkaar, want ze zetten allebei de waarde van een druk uur om in geld.
- Parkeer- en tijdtarief. Een bezet laadpunt met een volle batterij verdient niets. Een parkeertarief per minuut na een gratieperiode maakt van rotatie een inkomstenpost, en die tarieven worden mee naar het CPO-platform gepusht zodat ze ook op roamingsessies gelden.
- Vlootcontracten. Bedrijfswagens en vaste vloten op een eigen tarief met maandelijkse facturatie per pas of per voertuig. Voorspelbaar volume dat je bezettingsdal opvult, en dat is nu net waar je model korting geeft.
- Roaming. Zichtbaarheid in de grote laadapps levert het volume waar de rest op draait, en zoals hierboven zijn die sessies tegelijk je beste trainingsdata.
Elke stroom heeft zijn eigen prijslogica, maar ze delen dezelfde curve als vertrekpunt. Eén prijsmotor, vijf manieren om eraan te verdienen.
Waar het vastloopt zonder Proxilink
De prijsformule is het makkelijkste deel van dit verhaal. Wie zelf dynamische tarieven op zijn laadpalen wil zetten, loopt vast op alles wat eromheen zit. Dit zijn de obstakels waar je onderweg op botst.
Om te beginnen laat het CPO-platform maar één model toe. De dynamic-pricingmodules van de gangbare platformen rekenen met de spotprijs uit een gekozen bron plus één vaste marge, geklemd tussen een minimum en een maximum. Dat is model 1 uit dit artikel, het zwakste van de vijf. Een optimum dat per uur verschilt past niet in een veld dat "vaste marge" heet.
Je eigen curve krijg je er ook niet in. De prijsbronnen zijn read-only: je kan spotfeeds selecteren, maar geen zelfberekende prijzen injecteren, en er is geen endpoint om een eigen bron te voeden. Wat overblijft is je curve vertalen naar OCPI-tariefelementen met tijdrestricties, per lader een apart tarief aanhouden, en dat elke dag opnieuw pushen zodra de day-ahead binnen is. Dagelijkse machinerie dus, die ook moet blijven draaien op de dag dat je met iets anders bezig bent.
Daarbovenop komt een valkuil die stil faalt. Prijzen gebeurt per connector, en een tarief op connectorniveau overschrijft dat op laadpuntniveau. Hangt je dynamische tarief aan de verkeerde laag, dan blijft de lader elke sessie aan het oude vaste tarief verkopen, zonder foutmelding en zonder dat er iets misloopt in je dashboard. Je merkt het pas in je CDR's, wanneer de omzet niet klopt met de prijzen die je dacht te hanteren.
Tijdzones vormen een tweede stille bron van fouten. Day-aheadprijzen komen in UTC binnen terwijl je klant in Brusselse wandklok denkt, met twee keer per jaar een dag van 23 of 25 uur. CDR's dragen meerdere tijdstempels waarvan er maar één de lokale starttijd is. Grijp je het verkeerde veld, dan schuift je hele uurprofiel op en wordt je elasticiteitsschatting onbruikbaar, zonder dat er ergens een fout wordt gegooid.
En dan is er nog de infrastructuur eronder die niemand ziet. Kwartierschema's opslaan zonder je tariefhistoriek te laten ontploffen. De prijs bevriezen op het moment dat de sessie start, anders factureer je iets anders dan wat de klant bij het scannen zag. CDR's ophalen en er bruikbare sessies uit destilleren om je elasticiteit op te trainen. Een fallback voor de dagen dat de day-ahead niet binnenkomt, want ook dan moet er een prijs staan.
Geen van die stappen is op zich onmogelijk. Samen vormen ze een softwareproject dat weinig met laadpalen te maken heeft, en de fouten erin zijn precies van het soort dat je pas ziet nadat de omzet al binnen is.
In Proxilink is het plug and play
In het dashboard is dit één scherm. Je kiest een strategie, zet je basisprijs, je minimum en je maximum, schuift de agressiviteit, en de curve van morgen wordt meteen getekend met je eigen bezetting als achtergrond en een winstschatting eronder. Elke wijziging hertekent de grafiek terwijl je bezig bent, nog voor je opslaat.
Zet je het vinkje voor CPO-synchronisatie aan, dan gaat die curve elke dag automatisch naar je laadpaalplatform als een volwaardig tarief met uurblokken, inclusief je parkeer- en tijdtarieven, zodat ook roamingsessies op de juiste prijs afrekenen. De elasticiteit traint zichzelf wekelijks bij op je eigen sessies.
Blijkt na een paar weken dat jouw lader beter af is met forward locked dan met het AI-model, dan zet je dat om in dezelfde dropdown. Dat is uiteindelijk waar drie jaar rekenen op neerkomt: het juiste prijsmodel bestaat niet in het algemeen, alleen voor een bepaalde lader met een bepaald vraagprofiel, en je hebt de data nodig om te zien welk van de vijf dat voor jou is.
Wat de vijf modellen op jouw lader zouden doen, hangt volledig af van je eigen vraagprofiel, je volume en het tarief waar je vandaag mee werkt. Daar kan je een becijferd antwoord op krijgen zonder iets te installeren of om te schakelen. Of bekijk eerst hoe het platform werkt.
Veelgestelde vragen
Wat is dynamische prijszetting voor een laadpaal?
Dynamische prijszetting betekent dat de prijs per kWh varieert doorheen de dag in plaats van vast te staan. In Proxilink wordt per kwartier een prijs berekend en vooraf vastgelegd in een dagschema; de prijs die een klant betaalt, wordt vergrendeld op het moment dat zijn sessie start. Afhankelijk van de gekozen strategie volgt die prijs de energiebeurs, de bezetting van je lader, of het berekende winstoptimum.
Is een prijs die de energiebeurs volgt niet altijd het eerlijkste model?
Het is het best uitlegbare model, maar niet het meest rendabele, en voor de klant is het ook niet altijd het voordeligste. Op een lader waar de bezetting piekt tijdens het zonnedal geeft een energiegedreven model korting op de drukste uren en zet het een toeslag op de uren waar niemand laadt. In onze doorrekening levert dat circa 3 tot 4% minder winst op dan een vast tarief.
Wat is prijselasticiteit bij het laden van elektrische wagens?
Prijselasticiteit meet hoeveel volume je verliest wanneer je prijs stijgt. Ligt ze onder 1, dan laden mensen ondanks een hogere prijs (typisch op de piekuren, wanneer laden noodzakelijk is). Ligt ze boven 1, dan wijken chauffeurs uit naar een alternatief (typisch 's nachts, wanneer route-apps meerdere opties tonen). Het winstoptimum van een lader hangt volledig van die waarde af, en ze verschilt per lader en per uur.
Hoeveel extra rendement levert dynamische prijszetting op?
Dat hangt volledig af van je vraagprofiel en van welk model je kiest. Op een bestemmingslader met een namiddagpiek schatten we de spotgedreven modellen op −3 tot −4% tegenover een vast tarief, het vraag-gestuurde model op ongeveer +3%, en het AI-winstoptimum op +10 tot +21%. Op laders die in productie draaien schat het model zijn eigen effect op +5 tot +17%. Dat blijven schattingen op basis van je eigen bezettings- en sessiedata.
Betaalt de klant met een dynamisch tarief niet gewoon meer?
Bij het AI-model betaalt hij op 15 van de 24 uur minder dan bij een vast tarief. Het model zakt onder het vaste tarief op de uren waarop klanten prijsgevoelig zijn, omdat die korting zichzelf terugverdient via extra volume. Een harde minimum- en maximumprijs, een vaste dagcurve die vooraf gekend is, en prijsvergrendeling bij sessiestart zorgen ervoor dat niemand voor verrassingen komt te staan.
Kan ik dit ook opzetten zonder Proxilink?
De dynamic-pricing-modules van CPO-platformen ondersteunen doorgaans één model: spotprijs plus een vaste marge. Je eigen berekende curve kan je er niet in injecteren, omdat de prijsbronnen read-only zijn. De omweg is je curve vertalen naar OCPI-tariefelementen met tijdrestricties en die dagelijks pushen — technisch mogelijk, maar het vraagt day-ahead-integratie, kwartierschema's, prijsvergrendeling bij facturatie en CDR-verwerking. In Proxilink is dat één scherm met een vinkje voor synchronisatie.