SPB Git

spb/wp29_uqo

Public

# F3-conf-03 — Rolling-origin ridge forecasts of US IP growth (h = 1)

# Question

Over 60 forecast origins (2021-09 … 2026-08), does a fixed-penalty (λ = 50) ridge regression on 8 standardised predictors forecast next month's industrial production growth (100·Δln INDPRO) better than (a) the naive last-value forecast and (b) the expanding historical mean? We report out-of-sample RMSE/MAE and 1 − RMSE_ridge/RMSE_baseline.

# Data and exclusions

  • data/ip_predictors.csv: 417 rows, 1992-01 to 2026-09, no duplicate or missing months. Current-vintage FRED data. Publication lags are ignored, as the task says.
  • Missing values: neworder_chg for 1992-01 and 1992-02 (documented in the README). These rows never enter the analysis, because training rows start at 1992-03.
  • A small mismatch with the README: it says the 1992-01 value of every change series is empty, but ip_growth, oil_chg and permit_chg have values for 1992-01. I used these values as given. Only ip_growth 1992-01 is actually used, as the lag-2 feature of the first training row (1992-03), which is what the task spec asks for.
  • Extreme target values (2008-09: −4.50; 2020-04: −14.14; 2020-06: +6.35) are real observations. I kept them without winsorising, because the model is fully specified. They fall inside every training window.
  • At the last origin there are 413 training rows (s = 1992-03 … 2026-07).

# Method

  • Naive: the forecast for t+1 is ip_growth_t.
  • Expanding mean: the mean of ip_growth from 1992-04 to t.
  • Ridge: at each origin t the training rows are s ∈ [1992-03, t−1], with target ip_growth_{s+1}. The features are (ip_growth_s, ip_growth_{s−1}, ip_growth_{s−2}, oil_chg_s, fedfunds_s, permit_chg_s, neworder_chg_s, tcu_s).
    • At every origin, features are standardised with the mean and sample SD (ddof = 1) of that origin's training rows only (normalisation_window = "expanding"). The target is centred on its training mean ȳ.
    • Coefficients: b = (Z′Z + 50·I)⁻¹Z′(y − ȳ). There is no penalised intercept.
    • Forecast: ȳ + z̃_t·b.
    • The latest target used in training is dated t, so no data after the origin enters.
  • Evaluation: errors are forecast − actual over the 60 targets (2021-10 … 2026-09). The script is out/analysis.py and it is deterministic. The only random step is the supplementary bootstrap, which uses seed 0.

# Results

model RMSE (pp/month) MAE (pp/month)
naive 0.8831 0.6990
expanding mean 0.5439 0.4293
ridge (λ=50) 0.5608 0.4514
  • Relative RMSE improvement of ridge over naive: +0.365 (ridge is better).
  • Relative RMSE improvement of ridge over the expanding mean: −0.031. Ridge is about 3% worse than the mean in RMSE, and also worse in MAE.

The ridge model clearly beats the naive forecast. It does not beat the expanding historical mean in this evaluation window.

# Uncertainty

These figures are supplementary. They are not required keys and are stored in out/supplementary_uncertainty.json.

  • Diebold–Mariano tests (squared loss, Harvey–Leybourne–Newbold correction, t_{59} reference):
    • Naive vs ridge: DM = 3.36, p = 0.0014 with lag 0; DM = 3.53, p = 0.0008 with Newey–West lag 4.
    • Mean vs ridge: DM = −0.54, p = 0.59 with lag 0; DM = −0.58, p = 0.56 with lag 4.
  • Moving-block bootstrap (block length 6, 5000 draws, seed 0), 95% intervals for the relative improvement:
    • vs naive: [0.25, 0.43].
    • vs mean: [−0.16, 0.06].

The gain over naive is statistically significant. The difference between ridge and the expanding mean cannot be distinguished from zero. With 60 evaluation points, the tests have low power.

# Limitations and open issues

  • The data are current-vintage, revised series (INDPRO, TCU and NEWORDER are revised heavily), and publication lags are ignored. The results are therefore not real-time forecast accuracy.
  • The evaluation window is short (60 months) and covers a single post-COVID period. The relative ranking may not hold in other periods.
  • λ = 50 is fixed by the spec and was not tuned. The training data include the 2020 COVID outliers, which may distort the coefficients and standardisation statistics. A robust or tuned specification might perform differently, but it was not part of the task.
  • DM tests compare forecasts from nested and estimated models, so their reference distribution is approximate.
Files · main
Menu

Theme