How much model is enough for solar forecasting? The PV_ELM_pred benchmark
Cyril Voyant · Updated 2026-10-18
What this benchmark answers
How much model is enough to forecast a measured solar or weather channel from its own past, from 30 minutes to several hours ahead? PV_ELM_pred puts persistence, a linear autoregression and 14 Extreme Learning Machine (ELM) variants through the same pipeline, the same splits and the same metrics, so that every gain in skill can be weighed against the extra model it costs.
It is a frugal-AI testbed for edge forecasting: the models run on a CPU, use only the target's own history and cyclic time features, and need no numerical weather prediction.
Models compared
- Persistence baselines, including cyclic (one-day) persistence.
- BLEND: convex blend of persistence terms, with the weight fitted by least squares or from a correlation formula.
- AR-OLS: linear autoregression, fitted by pseudo-inverse.
- ELM: one fixed random hidden layer, with only the output weights fitted. The 14 variants differ in their cost function or regularisation: OLS, ridge, robust risk, anisotropic Tikhonov, Box-Cox target, MAE, log-MSE, Huber, L³, temporally correlated errors (Corr-ELM), elastic net, Welsch M-estimator, general Lᵖ and a Gamma GLM.
- Ablations: ELM without the cyclic time features.
- TimeGPT, zero-shot, as an optional foundation-model reference (needs an API key).
Capacity sweep
A dedicated run varies the hidden-layer size from 5 to 1000 neurons over several random seeds. It plots the persistence-normalised skill NICE^Σ against the logarithm of the stored parameter count, with AR-OLS and persistence as references. This is how the benchmark makes "how much model is enough" measurable rather than assumed.
Data
- Palaiseau PV power at 30 min, from August 2020: shipped as a public example (
data.zip), so the full benchmark runs end to end. - Other supported series, used in the research but not redistributed: PV plants (Oxelar, Signes, SOLETE, Alice Springs), GHI (Palaiseau, Alice Springs) and Barani MeteoHelix weather stations (temperature, pressure, humidity). Access goes through the data management plan on webservice-energy.org or the authors.
- Any new site can be added by registering one entry in
dataset_config.py. No model code changes.
Reproduce
Python 3.10 or later.
git clone https://github.com/cyrilvoyant/PV_ELM_pred.git
cd PV_ELM_pred
python -m pip install -r requirements.txt
unzip data.zip
python scripts/run_full.py # all models, Palaiseau
DATASET=mysite python scripts/run_full.py # your own registered site
Running a single model script directly starts a fast 1000-point smoke test.
Good practice built into the pipeline
- Input and target scaling are fitted on the training fold only. Since July 2026 the ELM target is centred as well, which removes a ridge bias on variables far from zero, such as pressure near 1013 hPa, without adding any learned parameter.
- Chronological splits, multiple random seeds, and separate daytime-only and all-hours scores.
- Parameter counts are not energy measurements: report latency and memory separately, and never infer a carbon saving from a parameter count.
Status and scope
The associated manuscript on frugal, edge-oriented forecasting is in preparation. This page describes the public software only and reports no results from it. Rankings depend on the site, the horizon and the protocol. An endogenous short-term benchmark says nothing about weather-driven day-ahead forecasting without a separate test.
Cite and reuse
M. Leiva, X. Silvani, G. Notton, C. Voyant, A. Julien, ELM benchmark for PV prediction, software v1.0.0, 2026. doi:10.5281/zenodo.21487267 · GitHub repository · MIT licence, archived in Software Heritage.
Related: Make_Stationary deseasonalization benchmark · NICE metrics.
Research explained
Read the findings, evidence and limits in these first-author research stories.