Accurate day-ahead wind-power production forecasting is increasingly important for energy system operations, market activity and balancing Great Britain's grid as wind generation grows. In this study, we train multi-site deep neural networks (DNNs) using pooled historical production and reanalysis weather data from 88 onshore wind Balancing Mechanism Units (BMUs). Forecasts are produced at 09:00 UK time for the following midnight-to-midnight delivery day, matching NESO's operational day-ahead forecasting schedule. We use reanalysis weather as future covariates during training and numerical weather prediction (NWP) forecasts during inference, extending training beyond the available historical NWP archive. Our multi-site recurrent neural network outperforms site-specific RNNs and a multi-site XGBoost model, while processing the full future-weather trajectory for the forecast horizon further improves accuracy relative to hour-aligned approaches. Our best model, an RNN with a bidirectional weather encoder (BiRNN) for NWP trajectory processing, reduces MW mean absolute error and root mean squared error relative to NESO by 17.94% and 12.51%, respectively, across 638,246 matched BMU-hour observations under conditions approximating unconstrained wind farm operations. In 40 leave-one-out trials, the BiRNN achieves lower MAE than NESO at 32 excluded sites, indicating transferable forecasting ability despite reduced accuracy when sites are omitted from training. Our capacity-estimation, data-cleaning and reanalysis-based training approach provides a basis for scaling NWP-aware multi-site forecasting to additional wind farms, longer production histories, and increased forecast accuracy beyond that seen in this study.
Figures & tables
Figure 1: Map of the 88 BMUs used to train our global day-ahead wind-power forecasting models. Hatched circles show BMUs used in our 88 BMU training dataset but not included in the 82 BMU test set. Area and colour of icon represents estimated capacity size in Mw.
Figure 2: D+1 forecasting task diagram, showing temporal alignment of forecasting task and input features relative to forecast origin.
Condition
Action
BMU-hours
Calculated CF >1.01
Remove observations
35,121
CF <0.015 and 100 m wind speed >30 km/h
Flag for exclusion
181,660
Consecutive CF changes ≤0.001 for at least three observations, excluding CF in [0,0.02] and [0.975,1.0]
Flag as stuck
33,767
Monthly mean or median CF ≤0.025
Flag BMU-month
282,864
Estimated annual capacity <70% of the BMU’s mean annual estimate
Flag BMU-year
18,972
Monthly median capacity-factor <0.40 for May-August or <0.675 for September-April, calculated from at least 40 observations with capacity-factor ≥0.05 and 100 m wind speed ≥42.5 or ≥45 km/h, respectively
Flag BMU-month
41,252
Table 1: Cleaning and imputation counts for the training period and the 88 BMUs in the training set. The dataset initially contains 4,235,702 BMU-hour observations and the final set 3,767,888. Flagged instances can overlap.
Figure 3: Pre- and post-cleaning heat maps showing the weather-to-power relationship as a power-curve for capacity-factor generation on the Y axis, and wind speed at 100 m, on the X axis. For the 88 BMUs generation and weather data from between 05-05-2018 to 20-07-2024 used to train our models. Lighter colours show greater frequency of observations, where the post cleaning curve shows horizontally dispersed outliers have been imputed, better representing the weather-to-power relationships under normal operations. The pre-cleaning curve, on the left, contains 4,235,702 values while the right-hand curve contains 3,767,888 post-cleaning values.
Feature group
Input features
Dynamic features - 9
Weather
100 m wind speed, 10 m wind speed, 10 m wind gust speed, 2 m air temperature and surface pressure
Wind direction
Sine and cosine transformed wind direction at 100 m and 10 m
Static features - 13
Location
Longitude in radians, latitude in radians, site elevation in meters, and distance to the coast in km
20 km of BMU terrain
Maximum and minimum elevation within 20 km, and distance to the maximum and minimum elevation within 20 km
Table 2: Dynamic and static variables used by the forecasting models. Our static features are normalised to a maximum elevation of 1,400 m. For site elevation and maximum elevation at 5 and 20 km our minimum elevation is normalised using a range of -30 m to 1,000 m.
Figure 4: Model schematics for our modified TFT (left) and BiRNN (right), showing layer counts, hidden sizes, and model dimensions.
Figure 5: Capacity-factor-normalised metered wind-power curve before applying NESO exclusions and cleaning vs capacity-factor-normalised wind-power curve after applying NESO exclusions and cleaning. Wind speeds in km/h on the X axis and normalised power output on the Y axis. Colour density shows the log number of values in each bin.
Exclusion condition
Removed BMU-hours
Remaining BMU-hours
Initial test set size
0
726,155
Missing or invalid NESO forecast
18,214
707,941
Missing NESO or forecast exceeds estimated capacity
2,837
705,104
MEL incomplete or not positive throughout the hour
17,589
687,515
Target CF <0.015 with wind speed ≥30 km/h
29,249
658,266
Wind speed >70 km/h
1,257
657,009
Table 3: Sequential exclusions from the evaluation cohort. Only conditions removing at least one BMU-hour are shown. The initial test set comprised 726,155 BMU-hours across 82 BMUs, while the final set contains 638,246 observations across 82 BMUs. No imputation was applied to the test-set generation values.
Figure 6: Model-level day-ahead error comparison across the test set containing 638,246 observations. Error values are displayed on the X axis and horizontal bars represent model performance. The same models are shown in each plot panel. MW metrics appear in the top row and capacity-adjusted errors in the bottom row of plots. Models are sorted on the Y axis by MW MAE performance.
Figure 7: MW MAE, MW RMSE, and capacity APE errors, on the Y axis, by the D+1 forecast horizon, on the X axis. For each horizon hour, errors are averaged over the hour across all 82 BMUs for matching BMU-hours across 638,246 hours.
Figure 8: Monthly box and whisker plot showing distributions of absolute MW errors. The mean and median of each month’s error are shown by a red diamond and black horizontal bar respectively. The BiRNN consistently outperforms NESO forecasts across all months and experiences less extreme errors.
Figure 9: Mean signed capacity-factor forecast errors for BiRNN and NESO across production bins. Positive errors indicate overprediction and negative errors indicate underprediction.
Figure 10: Density of signed hourly capacity-factor forecast errors for BiRNN and NESO against wind speed at 100 m, evaluated on the test set. The X axis shows wind speed in km/h, the Y axis shows signed capacity-factor error, and colour indicates observation frequency coloured on a logarithmic scale.
Figure 11: Percentage difference chart comparing MW MAE and MW RMSE for the 40 leave-one-out BMU trials. BMU name on the X axis, % difference in error on the Y axis between models and the BiRNN when that BMU is included in training. BMUs where NESO produces lower errors than the BiRNN’s leave-one-out trial are shown in red. % error difference concerns only the BMU displayed on the Y axis. Pooled model level errors are not considered here.
Experiment / configuration
MW MAE
MW RMSE
A. Feature ablation: features removed from BiRNN training and inference
None; full-feature reference
5.53
10.44
Wind direction at 100 m and 10 m, temperature at 2 m and surface pressure
5.75
10.71
Wind speed at 100 m and 10 m and gusts at 10 m
8.12
14.43
Geographic metadata: location, elevation, distance to coast and elevation statistics
5.79
10.83
Estimated capacity input
5.56
10.50
Table 4: BiRNN feature, architecture and future-weather experiments. The reference uses the model shown in Figure 4 . Input history length is 48 hours, batch size 2,024 and learning rate 10−4 . Ablation reference models are separately trained references, not the headline model used to compute results. Panels A and 4 B use 638,246 observations across 82 BMUs, except forthe † 96-hour historical-input trial and its matched 48-hour reference, which use 634,465 BMU-hour observations. ∗ Panel 4 C compares NWP and realised reanalysis inputs using the same headline-model weights without retraining.
Wind power forecasting predicts turbine and farm output from operational data, weather forecasts, and remote observations to support reliable energy planning.