SPB Git

spb/wp29_uqo

Public

# F3-conf-03 — Rolling-origin ridge forecasts of US IP growth

# Question

Over 60 rolling origins (2021-09 … 2026-08), at horizon h = 1 month, does a fixed-penalty ridge regression (λ = 50) on 8 standardised predictors forecast US industrial production growth (100·Δln INDPRO) better than (i) the naive last-value forecast and (ii) the expanding historical mean (from 1992-04)?

# Data and exclusions

data/ip_predictors.csv, 417 monthly rows (1992-01 to 2026-09), current FRED vintage. neworder_chg is empty for 1992-01/02 (the README also says the 1992-01 values of the other change series are empty, but they are filled in the file; I used them as given). None of these gaps affects the analysis. Ridge training rows start at s = 1992-03, where all 8 features exist. The 2020 COVID swings (ip_growth from −14.1 to +6.3 %) fall inside every training window and were kept, because the specification does not mention outlier treatment. No rows were dropped. At the last origin there are 413 training rows.

# Method

  • Naive forecast = ip_growth_t. Mean forecast = the mean of ip_growth from 1992-04 to t.
  • Ridge setup at each origin t:
    • Training pairs (z_s, y_{s+1}) for 1992-03 ≤ s ≤ t−1.
    • Features z_s = (ip_s, ip_{s−1}, ip_{s−2}, oil_chg_s, fedfunds_s, permit_chg_s, neworder_chg_s, tcu_s).
    • Each feature is standardised with the training-window mean and sample SD (ddof = 1). These are recomputed at every origin (expanding window, no full-sample statistics).
    • The target is centred on its training mean ȳ.
  • Ridge fit: b = (Z′Z + 50·I)⁻¹Z′(y−ȳ), and the forecast is ȳ + z̃_t·b. No value dated after t is used.
  • Errors (forecast − actual) are scored on ip_growth_{t+1}.
  • Supplementary checks:
    • Diebold–Mariano test with squared loss and Harvey–Leybourne–Newbold correction (h = 1, so no autocorrelation adjustment).
    • IID bootstrap over origins (5000 draws, seed 20261030) for the relative improvements.

# Results

model RMSE (%/month) MAE (%/month)
naive 0.8831 0.6990
expanding mean 0.5439 0.4293
ridge (λ=50) 0.5608 0.4514
  • Relative improvement of ridge vs naive (1 − RMSE_ridge/RMSE_naive) = 0.365.
  • Relative improvement of ridge vs mean = −0.031: ridge's RMSE is about 3.1 % worse than the mean's, and its MAE is also worse.

Ridge clearly beats the naive forecast but does not beat the expanding historical mean.

# Uncertainty

  • Ridge vs naive: DM statistic = −3.36, p = 0.0014; bootstrap 95 % CI for the relative improvement is [0.235, 0.463]. The gain over naive is robust.
  • Ridge vs mean: DM statistic = 0.54, p = 0.59; bootstrap 95 % CI is [−0.168, 0.072]. The two cannot be told apart statistically.
  • With only 60 origins, these intervals are wide. The IID bootstrap ignores any serial dependence in the loss differentials.

# Limitations and open issues

  • The data are current vintage and publication lags are ignored. The results measure how predictable the revised series is under a stylised timing assumption, not real-time forecast performance.
  • λ is fixed at 50 and was not tuned. Results for other penalties, or for robust handling of the COVID outliers, were not evaluated.
  • The evaluation window (2021-09 to 2026-08) is a single post-COVID period, so the conclusions may not carry over to other periods.
  • The README's description of empty cells does not match the file for 1992-01. This does not affect the results.
Files · main
Menu

Theme