Skip to content

Differentiable physics: does the weather-forecast error persist from day to day?

Take-home: in this test, the day-ahead weather forecast did not repeat its errors from one day to the next, so there is nothing to feed a demand correction. The brief set a stop rule at a lag-1 autocorrelation of 0.2 (the correlation between one day's error and the next day's). Every season's value is under 0.2, so no demand forecast was fitted. Two caveats apply: wind was not tested, because experiment 111's ensemble store does not hold it, and the reference was a later forecast, not observed weather.

We asked whether an ECMWF ensemble forecast that was too cold or too cloudy yesterday tends to be too cold or too cloudy today. For each day we took the ensemble mean forecast published the morning before. We subtracted a reference for that day that a live service could build afterwards: the control forecast from each of the following runs, joined end to end. We call this reference the "analysis proxy". It is a later forecast, not an observation. We then correlated each day's error with the error 1 to 7 days later, at seven substations over 820 days.

The lag-1 correlation is at most +0.11, so a correction based on it has no signal to use. A search of docs/ml-experiments found no earlier experiment that tested this directly. The closest earlier result we found is experiment 111's, where ERA5 (the European Centre for Medium-Range Weather Forecasts reanalysis) residuals in the GAM-K filter (the convex demand model with a Kalman filter) did not change the score (GAM-K-era5 minus GAM-K: -0.008, interval -0.024 to +0.008). That agrees with this experiment's result.

Weather-forecast errors are barely correlated from one day to the next

Each cell is the Pearson correlation averaged over seven substations (D5, D9, D10, D11, D14, D16, D18), with about 200 days per season. The raw and anomaly versions are both in the JSON file; "anomaly" removes each calendar month's mean error first.

Variable Season Lag 1 Lag 2 Lag 3 Lag 7
Temperature December to February +0.11 +0.07 -0.06 -0.05
Temperature March to May +0.03 +0.02 -0.04 +0.06
Temperature June to August +0.02 +0.02 -0.02 +0.08
Temperature September to November +0.10 0.00 -0.04 +0.03
Irradiance December to February +0.03 -0.13 -0.02 -0.02
Irradiance March to May -0.01 -0.09 -0.01 +0.02
Irradiance June to August +0.04 +0.04 +0.08 +0.06
Irradiance September to November +0.05 +0.02 -0.10 -0.11
  • The anomaly version gives similar values (lag 1 from -0.01 to +0.09).
  • e00144_autocorr.py prints lags 1 to 7 for both versions and writes work/autocorrelation.json.

Checks and caveats

  • Wind was not tested. Experiment 111's ensemble store holds temperature and shortwave irradiance only. GAM-K takes no wind input.
  • The reference is a later forecast. The error is the revision between the day-ahead ensemble mean and the next run's control forecast, which is 9.5 to 33 hours old when subtracted.
  • The errors are small. At D5 the daily temperature error has a standard deviation of about 0.3 degrees Celsius, and the daily irradiance error about 14 W/m².
  • A bias against observed weather could still persist. ERA5 is published about 5 days after the date, too late to use at forecast time. Experiment 111's ERA5 result found no gain, which points the same way.
  • No demand forecast was fitted, so there are no scores, tail calibration, or breakdowns.