Day-Ahead Forecasting & Dispatch Model

Grid-scale batteries earn revenue by participating in multiple markets simultaneously. This model focuses on the day-ahead decision layer: given yesterday's auction results and market price data, how should a BESS operator allocate capacity between frequency response commitment and spot arbitrage — and how much does the quality of the price forecast actually affect the outcome?

The framework has three components: a per-EFA-block FR/arbitrage capacity allocator that compares confirmed auction clearing prices against a forecast-based shadow arbitrage value; an MPC dispatch engine (rolling 48-hour LP) that plans charge/discharge at half-hourly resolution while enforcing FR SoC constraints as hard bounds; and a price forecasting pipeline that benchmarks three strategies against each other.

Scope note: this model covers the day-ahead planning layer only. Intraday re-optimisation, Balancing Mechanism participation, and real-time dispatch are not modelled — these require operational settlement data not available publicly, and are the primary reason figures here differ from industry estimates. The focus is the forecasting and optimisation methodology rather than comprehensive revenue capture.

Controls

Results

Total net revenue

Annualised net

per year

Revenue per MW

per MW per year

Top revenue stream

Modelling a MW / MWh asset (h duration, % round-trip efficiency) using price signals and MPC dispatch over a rolling 48-hour horizon.

Monthly revenue stack

Each bar shows gross revenue by stream for that month (positive) and cycling wear cost (negative, dark red). Net revenue is the algebraic sum of all segments — months with heavier arbitrage dispatch carry larger cycling deductions.

Average weekly SoC profile

Mean state-of-charge at each half-hourly slot across the backtest, folded onto an average week. The orange band is ±1 standard deviation across all weeks; the teal band marks the [10%, 90%] FR feasibility constraint enforced as a hard bound in the rolling LP. The pre-conditioning behaviour driven by the next block's FR obligations is visible in the shape.

Cumulative revenue by stream

Strategy comparison

Three price-signal strategies run the same MPC dispatch engine on the same asset, isolating how much forecast quality — not the optimiser — affects operational revenue.

Strategy Price signal What it represents
Perfect Foresight Actual day-D wholesale prices Theoretical ceiling — needs advance knowledge of the future
Naive* Yesterday's prices (day D-1) Zero-skill floor — any real model must beat this
ML Model Random Forest forecast Realistic best case, using features available at end of day D-1

Reading the chart

The three bars define a range. Naive* sets the zero-skill floor — what you would earn with no forecasting capability at all. Perfect Foresight is the ceiling, the maximum extractable revenue if you knew the future. ML Model sits between them, and the question is how close it gets to the ceiling.

The foresight ratio quantifies this as a fraction of the capturable improvement: (ML − Naive) / (PF − Naive). Published GB and European price-forecasting literature treats 70–85% as strong performance.


foresight ratio

ML model detail — Random Forest

The ML strategy predicts the 48 half-hourly APXMIDP prices for day D using features available at the end of day D-1. Tree-based ensembles suit this problem: the feature set is tabular (lagged prices, generation-mix ratios, temporal encodings) rather than sequential, they need no feature scaling, and they yield interpretable importances.

Training uses an expanding window ending before ; everything after that date is held out. Spike-RMSE measures error on top-decile price periods, where arbitrage revenue concentrates. Spearman ρ matters more than RMSE for dispatch quality — the LP only needs the ordering of prices to be right.

Known limitations: tree-based models cannot extrapolate beyond price ranges seen in training; electricity price forecasting is inherently noisy; and the model improves dispatch quality on average without eliminating error on individual days.

Sensitivity

Cycling wear cost

Battery degradation is a real operating cost, but modelling it precisely needs a full electrochemical model and site-specific data. A flat £/MWh cycled figure is used as a financial proxy, consistent with industry practice. The NESO/Modo consensus for modern Li-ion sits near £/MWh, with a plausible range from under £1/MWh to £8–10/MWh on aggressive cycling.

Service mix

How the revenue stack changes depending on which markets the asset participates in.

Arbitrage-only removes all FR availability fees; cycling cost is zeroed in FR-only mode, since in this model cycling is incurred only through arbitrage dispatch.