Texas wind power: how much room does the official forecast leave?
ERCOT publishes actual wind generation and the full archive of its official wind-power forecasts. That makes a concrete question answerable: how much better than the grid operator's operational forecast can a meteorologist's own model do?
// In short
- The official day-ahead forecast errs by 6.24% of capacity, level with the 6.38% “perfect-forecast ceiling” I built from after-the-fact weather. Beating the official forecast with my own model is not on the table.
- The official forecast runs about 2.9% high against actual generation, mostly because of curtailment: against available power the bias is only −0.1% to −0.7%, and its probabilistic quantiles are well calibrated.
- Driven by real operational forecasts (2022), ECMWF HRES gives 7.80%, Pangu-Weather 8.10% and GraphCast 8.19%, all significantly worse than the official 5.97%. For HRES, about 0.7 of the 1.8-point gap comes from the missing 100 m wind in public data, which even perfect weather cannot recover; the other 1.1 is forecast error.
- XGBoost, LSTM and a Transformer differ by under 0.2 points; trained without autumn and winter, every model is biased low by 3.2–5.9 points. Seasonal coverage matters more than the model.
- Under the Northwest China grid rules, a 100 MW wind farm with twice this error would pay about ¥261k a year in forecast penalties.
01First, prove the time axis is right
Three data sets: ERCOT's public generation-by-fuel reports (hourly wind generation, 2018–2024), ERA5 reanalysis winds, and the complete 2023–2024 archive of the official short-term wind-power forecast: 17,736 issues, one per hour, each covering the next 168 hours.
The worst failure in forecast evaluation is a time shift: the numbers look normal, nothing errors, and the conclusion is wrong. Alignment was checked twice, independently:
- Against EIA-930 data: r = 0.99998 for 2024, MAE 28.5 MW (0.22% of the mean).
- Against the actuals inside the official forecast files: after removing 27 bad hours (about 13 times normal), r = 0.99997, and the lagged correlation of first differences peaks at lag 0 (0.999, about 0.70 at ±1 h).
- My first acceptance test, “the correlation must peak at lag 0”, was wrong: hourly generation has autocorrelation near 0.98, so lag 0 and lag 1 differ by 0.004, all noise. First differences give a sharp peak.
- On the autumn daylight-saving day the reports contain a repeated hour. Mis-ordering it leaves plausible numbers and no error; only the checks above catch it.
02The official forecast: about 6% error one day ahead
Official wind-power forecast error by lead time
MAE, % of installed capacity, truth = actual generation, 2024 · hover for each lead
Show data table
| Lead h | Hours | MAE % | Bias % |
|---|---|---|---|
| 0 | 8784 | 3.12 | +2.95 |
| 1 | 8784 | 3.79 | +2.69 |
| 2 | 8784 | 4.34 | +2.53 |
| 3 | 8784 | 4.66 | +2.38 |
| 6 | 8784 | 5.08 | +2.13 |
| 12 | 8784 | 5.41 | +2.35 |
| 24 | 8784 | 6.16 | +2.85 |
| 36 | 8784 | 6.58 | +2.85 |
| 48 | 8784 | 7.09 | +2.91 |
| 72 | 8784 | 8.42 | +3.27 |
| 120 | 8784 | 12.40 | +4.01 |
| 167 | 8603 | 16.25 | +2.99 |
Error is 3.1% at lead 0, about 6.2% one day ahead, 8.4% at three days and 16.3% at seven. The day-ahead market uses the issue published at 09:55 the day before (15–39 h ahead), with a 2024 MAE of 6.24%.
The dashed line is my best model on ERA5 winds, 6.38%. ERA5 is a reanalysis that has already absorbed observations, equivalent to a perfect weather forecast, so it is a ceiling, not a forecast, and not a fair comparison. Operational use can only do worse, and the official forecast already matches it.
03The high bias is curtailment
Against actual generation the official forecast runs about 2.9% of capacity high, and generation falls below the official median in 64% of hours (nominally 50%). That looks like systematic over-forecasting. But the official target is what the farms could produce, available power; actual generation also subtracts curtailment. From 26 September 2024 the files include available-power actuals, so the two can be separated:
The same hours, two truths
MAE, % of capacity, after 2024-09-26 (2,358 hours per lead)
Show data table
| Lead h | Hours | vs available power % | vs actual generation % |
|---|---|---|---|
| 0 | 2358 | 0.47 | 3.53 |
| 1 | 2358 | 1.96 | 4.04 |
| 2 | 2358 | 2.88 | 4.44 |
| 3 | 2358 | 3.36 | 4.66 |
| 6 | 2358 | 3.97 | 4.84 |
| 12 | 2358 | 4.54 | 5.24 |
| 24 | 2358 | 5.25 | 6.00 |
| 36 | 2358 | 5.71 | 6.31 |
| 48 | 2358 | 6.15 | 6.60 |
| 72 | 2358 | 7.48 | 7.74 |
| 120 | 2358 | 13.42 | 13.08 |
| 167 | 2358 | 19.30 | 18.33 |
- At lead 0 the error is 0.47% against available power and 3.53% against actual generation. The difference is curtailment.
- Against available power the bias is −0.1% to −0.7%; available power falls below the official median 46–49% of the time (nominal 50%), and below the 20th percentile 16–19% of the time at 2–72 h (nominal 20%). The official probabilistic forecast is well calibrated for its own target.
- Beyond 72 h weather error dominates and the curves converge; past 85 h the available-power error is slightly larger.
So the weather-to-available-power step is already done well; the room left is available power to actual generation, which depends on load, prices and transmission limits, exactly what trading desks care about.
Available-power actuals cover only the last three months of 2024; the first three quarters cannot be checked the same way.
04More seasons beat a better model
One task: estimate system-wide wind generation at the same hour from ERA5 winds. Trained on 2023, tested on all of 2024 (8,784 hours), three seeds per ML model.
Wind-power error by model
MAE, % of capacity, ERA5 winds as input (perfect-forecast ceiling), error bars = seed spread
Show data table
| Model | MAE % | RMSE % | Bias % | Seeds |
|---|---|---|---|---|
| XGBoost | 6.38 | 8.23 | +0.50 | 3 |
| LSTM | 6.48 | 8.41 | +1.04 | 3 |
| Transformer | 6.54 | 8.43 | +1.07 | 3 |
| Binned power curve | 9.44 | 11.92 | +0.68 | 1 |
| Climatology | 20.81 | 24.46 | +0.64 | 1 |
The three ML models differ by under 0.2 points, the same size as seed-to-seed noise, and all beat a binned power curve (9.44%) by about a third. What separates results is the seasons in the training data:
| Training | Test | Bias across models |
|---|---|---|
| All of 2023 | All of 2024 | +0.5 to +1.3 points |
| Jan–Aug 2024 | Oct–Dec 2024 | −3.2 to −5.9 points |
Without weather, forecasting 24 h ahead from generation history alone, the best model (a Transformer, 18.36%) is only 12% better than climatology (20.81%). Almost all wind-power skill comes from the weather.
05Real operational forecasts: HRES, Pangu-Weather, GraphCast
ERA5 is a ceiling, not a forecast; a fair comparison needs forecasts that existed at the time. WeatherBench 2 provides archived ECMWF HRES, Pangu-Weather and GraphCast operational forecasts. I took 2022 00 UTC runs at 30–54 h (the day-ahead window), converted each source's winds to power with the same model (XGBoost, trained on ERA5 2019–2020, validated on 2021), and compared with the official day-ahead forecast at the same times: 355 initialization days, 1,774 samples, with 95% intervals of the difference from a 2,000-draw block bootstrap over initialization days.
Operational-forecast-driven vs official day-ahead
MAE, % of capacity, 2022, 00/06/12/18 UTC · hover for the gap to official
Show data table
| Source | MAE % | Bias % | ΔMAE vs official | 95% CI |
|---|---|---|---|---|
| ERCOT day-ahead | 5.97 | +2.41 | +0.00 | — |
| ECMWF HRES | 7.80 | -0.95 | +1.83 | [+1.35, +2.33] |
| Pangu-Weather | 8.10 | -3.14 | +2.13 | [+1.63, +2.62] |
| GraphCast | 8.19 | -4.33 | +2.23 | [+1.68, +2.75] |
| ERA5 | 6.69 | -1.04 | +0.72 | [+0.26, +1.20] |
- All three are significantly worse than official, by 1.8–2.2 points; no interval crosses zero.
- Even the ERA5 ceiling trails official by 0.72: WeatherBench 2 has no 100 m wind, so hub-height wind must be estimated from 10 m and 850 hPa, and the mapping loses some skill (with 100 m wind in 2024 the ceiling was 6.38%). HRES trails ERA5 by a further 1.11, which is the weather-forecast error.
- AI models vs HRES: in raw error GraphCast is 0.39 worse (interval 0.03–0.75, just significant) and Pangu-Weather 0.30 worse (not significant); after removing each source's annual mean bias neither differs significantly from HRES. The extra error comes mainly from 10 m wind speeds about 0.22 m/s too weak over West Texas, not from worse synoptic forecasts.
Forecast fields are 6-hourly, so only four times a day are compared; GraphCast's last WeatherBench 2 run is 2022-12-21, so late December is excluded. The official target is available power while truth is actual generation, a handicap for the official forecast that does not change the direction of the result.
06Placed in China: penalties under the Northwest grid rules
Wind and solar farms in China are penalized for forecast error under regional grid rules. Using the Northwest rules issued in December 2023 (articles 15, 40 and 49), I applied ERCOT's 2024 official forecasts and generation to a hypothetical 100 MW wind farm:
Annual forecast penalty for a 100 MW wind farm (estimate)
Short-term + ultra-short-term, ¥1,000 per point · hover for the worst month
Show data table
| Error scale | Day-ahead accuracy | Short-term pts/month | Ultra-short pts/month | Annual ¥ | Worst month ¥ |
|---|---|---|---|---|---|
| ×1.0 | 92.1% | 4.1 | 0.0 | 49,438 | 8,255 |
| ×1.5 | 88.6% | 11.5 | 0.2 | 140,659 | 20,729 |
| ×2.0 | 85.3% | 20.8 | 0.9 | 260,539 | 35,881 |
| ×2.5 | 82.3% | 30.5 | 2.4 | 395,037 | 51,636 |
| ×3.0 | 79.6% | 40.0 | 4.6 | 534,276 | 67,002 |
“Error ×k” scales the forecast error. ERCOT is a fleet of about 40 GW whose errors largely average out, so ×1 is an excellent forecast; a single farm is closer to k > 1. At twice the error, day-ahead accuracy is 85.3%, the annual penalty about ¥261k, and the worst month about ¥36k.
- k is not measured for a real farm; it is placed using the national accuracy metric (1 − RMSE / capacity) against the Northwest short-term threshold.
- Texas winds have a different diurnal cycle; time windows use local clock hours as-is.
- Data are hourly and the rules use 15-minute points; each hour counts as four identical points.
- The rules do not state how often ultra-short-term penalties settle; once a day is assumed. Per submission would multiply that part.
- Curtailment flags are missing for most of the year, so actual generation is used. Recomputing with available power after 26 September gives a slightly higher short-term penalty, so the estimate is not inflated.
07Not done yet
- Restore 100 m wind and train a MOS correction on HRES 2016–2021 reforecasts to see how much an operational forecast can recover.
- Curtailment forecasting is a direction, not yet started.
- Dedicated probabilistic (quantile, CRPS) and ramp-event evaluation is planned.
The analysis code is not public yet and is available on request.
Questions or data requests welcome · Contact