Voltaraj · Calibration

How often the band holds

The P10–P90 band is built for an 80% target coverage. This is what it actually covers, measured daily against the realised day-ahead price. No cherry-picked periods.

Last scored day: 2026-09-08 · page regenerated at 2026-09-07 14:30 UTC, daily after the accuracy journal runs. If that stamp has frozen, regeneration has stopped — and the figures below are stale.

Frozen forecast (forward)

The figure an analyst can believe: the forecast was frozen before the answer was known, then scored when the realised price arrived. Nothing is re-trained after the fact.

D+1 (validation)
64.6%
11 days · 80% target · thin sample
D+2 (operational)
67.0%
56 days · 80% target · thin sample

D+1 and D+2 are not the same thing

D+1 is produced after tomorrow's auction closes — the day-ahead price is already set, so it is validation, not a decision. D+2 is issued while the auction for the day after tomorrow has not been held yet: it is the prediction you actually operate on. When the two diverge, D+2 is the figure that matters, and it is the harder one to hit.

What does not hold yet

The D+2 band covers below the 80% target on Bulgaria (BG), 61.9%, Greece (GR), 36.8%, Hungary (HU), 46.5% and Romania (RO), 67.0% — but the headline figure hides something more specific than “too narrow”, and we say so. Broken down by hour over 45 days, the miss is not symmetric: in the evening the band misses almost entirely upward (hour 18, Romania: 26.7% of slots above P90, against 10% expected), while the lower edge catches nothing at all — at hours 21 and 22, 0.0% of prices fell below P10, where the definition calls for 10%. At midday it is the opposite: both edges miss, so there the band genuinely is too tight.

This matters because it changes the fix. Today's correction adds the same amount to both sides; in the evening hours everything added below is wasted, and what is added above is not enough. A wider band would make the ratio worse, not better. We are working on a correction that calibrates the two edges separately, per hour. Until then: anyone sizing risk on P10–P90 at D+2 underestimates the upper tail at peak hours, and pays for a lower tail that does not materialise overnight.

One of them sits below target for a different reason than the others, and it is worth saying: in Greece (GR), renewables cover 53.7% of demand on average, against 22.1% across the other zones. The model rests on residual load — demand minus renewables — and at that penetration it becomes the difference between two large numbers: the same absolute error in the inputs produces a far larger relative error in the output. In 15.7% of slots renewables actually exceed forecast demand, so residual load turns negative — a regime the training history barely contains (in RO, 0.4%). This is not a tuning problem, it is a property of the input; that is why we do not fix it with a recalibration, and do not hide it until we do.

Coverage, month by month

The whole scored history, with no periods removed. February 2026 is on the chart exactly like July: publish only the good months and you have not published a track record.

50%60%70%80%90%100%80% target25-1025-1125-1226-0126-0226-0326-0426-0526-0626-0726-0826-09D+1 (validation)D+2 (operational)

Frozen forecasts

Every row here was frozen in the database before the answer was known, then scored once the realised price arrived. Nobody can touch them any more — not even us. This is the evidence the page stands on.

ZoneHorizonDaysPeriodP10–P90 coverageP50→P90P10→P50P50 rMAE
Bulgaria (BG)thin sampleD+1122026-08-28 → 2026-09-0860.3%31.3%25.7%27.1%
Bulgaria (BG)thin sampleD+2382026-08-02 → 2026-09-0861.9%28.5%28.9%24.8%
Greece (GR)thin sampleD+1102026-08-29 → 2026-09-0755.4%24.8%27.9%23.5%
Greece (GR)thin sampleD+2102026-08-29 → 2026-09-0736.8%22.8%24.1%32.2%
Hungary (HU)thin sampleD+1112026-08-28 → 2026-09-0766.3%31.8%26.3%24.8%
Hungary (HU)thin sampleD+2112026-08-28 → 2026-09-0746.5%31.9%24.4%32.0%
Romania (RO)thin sampleD+1112026-08-28 → 2026-09-0764.6%25.5%31.7%23.0%
Romania (RO)thin sampleD+2562026-07-14 → 2026-09-0767.0%31.8%30.8%25.7%

P50→P90 and P10→P50 are the band's two margins, each as a percentage of the period's average price. They sit next to coverage because coverage alone can always be raised by widening the band — a wide enough one covers 100% and says nothing. And they sit apart, not summed: when the miss is one-directional, the right correction moves one margin only. On a single total, a targeted repair and lazy widening look identical. Here you see which one moved. A “—” means that edition predates margin measurement; we do not backfill it where it cannot be recomputed.

Series marked “thin sample” have fewer than 60 scored days. We publish them because they exist, not because they support a conclusion.

Validation, not forecast

The same days, but the forecast was issued in the evening, after the auction closed — when the next day's price was already published. It could not be traded on, and we do not call it a forecast. It is useful to know how well the model reads a day it already almost has in front of it, but that is a question about the model, not an instrument.

ZoneHorizonDaysPeriodP10–P90 coverageP50→P90P10→P50P50 rMAE
Bulgaria (BG)thin sampleD+1392026-08-01 → 2026-09-0874.0%28.9%29.1%20.8%
Greece (GR)thin sampleD+1112026-08-28 → 2026-09-0758.2%25.2%27.3%22.6%
Hungary (HU)thin sampleD+1122026-08-27 → 2026-09-0767.1%32.4%28.1%23.1%
Romania (RO)thin sampleD+1572026-07-13 → 2026-09-0775.5%31.2%31.9%21.2%

And how it would have behaved over history

A reconstruction: for each past day, a model trained strictly on the days before it, compared against the realised price. The training is causal — but the inputs are not, and that changes how the figure must be read. The model reads weather from our database, and there the realised weather archive has since replaced the forecast that was available at the time. The reconstruction therefore “forecasts” a day whose weather it knows.

What that advantage is worth, measured on pairs: for each series below, exactly the days that also have a frozen forecast, reconstructed now and compared one by one. It is not seasonality — the period is identical by construction. Days on which the frozen forecast ran on a different model from the one the reconstruction picks today are excluded, not blended in.

SeriesAdvantage of the reconstruction (points)Days comparedReconstruction covers better on
Romania (RO), D+2+10.2 [+4.9; +15.5]4730
Romania (RO), D+1+4.7 [+0.8; +8.5]4421

Measured on 2026-08-28. Recomputed as the series grows; never typed by hand.

The two right-hand columns are read together. When the mean advantage is positive but the reconstruction covers better on fewer than half the days, the advantage sits in a handful of days rather than in ordinary behaviour — and the mean alone would say otherwise. Part of the gap also comes from code, since the frozen forecasts ran on the version of the day; we cannot yet separate the two causes, and we do not claim to.

Plainly: the figure below does not predict where the product will land. It stays published because it is the only measurement covering a full year — including February 2026, the worst month in the whole record — and because a hidden backtest is worse than an explained one. It does not compare row by row with the tables above.

ZoneHorizonDaysPeriodP10–P90 coverageP50→P90P10→P50P50 rMAE
Romania (RO)D+12642025-10-22 → 2026-07-1278.9%29.5%
Romania (RO)D+22582025-10-29 → 2026-07-1379.2%33.7%

How it is measured

  • The truth is the day-ahead price as reported on the ENTSO-E Transparency Platform, in each market's own currency; for Romania, converted to RON at the official National Bank of Romania rate. We do not compare a forecast against another forecast.
  • Coverage is the fraction of 15-minute intervals where the realised price fell between P10 and P90. The target, by construction, is 80%.
  • rMAE is the mean absolute error on P50, relative to the day's mean realised price. A high rMAE in a low-price month is not necessarily a bad month.
  • The model re-trains from scratch every day, with no accumulated weights. There is no moment at which “the model was calibrated”; there is only how it behaves, day after day.

How we publish

  • Cadence: daily, regenerated from the journal. A day is scored only when the realised price is complete; a partial one is deferred, not scored halfway — a half-scored day looks like a whole one.
  • A published edition is immutable. Source data can be recomputed — a correction from ENTSO-E, a reprocessing — and we claim nothing else. What cannot change is the edition: every regeneration produces an artefact with its own fingerprint, verifiable without us (see below). If you saved an edition, you can prove on your own that it is the one published then — and when a figure changes between editions the difference is visible by construction. And if you did not save it, we hand it back: every regeneration is archived in full, and an edition can be requested with its fingerprint at voltaraj.com/en/verification, no account — the exact bytes published then, so you can verify them yourself. For editions published before the archive started we keep the fingerprint, not the page, and the check tells you which case you are in. Separately, the issue time is written to the database before the auction closes: which is why “pre-gate” is not a label chosen after the result was seen.
  • Every zone, every horizon, every issue time — from the first scored day, marked “thin sample” below 60 days, and including the series that sit under target. The window is not chosen after the result: a publication threshold becomes, on the day the figure drops, a way to hide.
  • Coverage is never published alone. Next to it sits the band width relative to the price level — otherwise the promise can be met by widening the band until it says nothing. And what we publish is reported by hour too, not only globally: a total on target can hide two opposite faults.
Rule written on 27 August 2026 — with the under-target series already on the page, not ahead of them.

This edition's fingerprint

This page is regenerated daily, and today's edition replaces yesterday's. So that you need not take our word for what it said on a given date, every edition is sealed: 080d31c33fa9b174cbba30194014e2c0bb97a8419e313923dab2c79918fd1f95. Verify it offline, without us — save the page, replace the fingerprint on this line with @@AMPRENTA-SHA256@@ and recompute SHA-256 over the file (or run scripts/verifica_amprenta.py). Or paste it at voltaraj.com/en/verification, no account needed, which also says when it was first published. Any byte changed changes the fingerprint.

What this page does not say

Historical coverage describes past behaviour on data already realised and does not guarantee future performance — as stated in the Terms, art. 3.1–3.2. The market can behave atypically relative to the training period. A calibrated band is a planning instrument, not a promise.