SPB Git

spb/wp29_uqo

Public
4.2 KB · 52 lines markdown
1# F3-conf-03 — Rolling-origin ridge forecasts of US industrial production growth23## Question4Does a fixed-penalty ridge regression (λ = 50, key `lambda`) on 8 standardised monthly predictors (`n_features`) forecast next-month US industrial production growth (100 × Δln INDPRO, percent per month) better than the naive (last value) and expanding-mean forecasts? The test uses `n_origins` = 60 rolling origins from `first_origin` = 2021-09-01 to `last_origin` = 2026-08-01, at horizon h = 1. Estimands: out-of-sample RMSE and MAE of each forecast, and 1 − RMSE_ridge/RMSE_baseline.56## Data and exclusions7- Input: `data/ip_predictors.csv`, with 417 data rows (`n_input_rows`) covering 1992-01 to 2026-09. Its SHA-256 matches the README. The full audit is in `out/state/data_audit.md`.8- Missing values: only `neworder_chg` for 1992-01 and 1992-02. Neither month is used.9- Data issues (`data_issues`):10  - The README says the first month of every change series is empty, but three of these columns are filled for 1992-01. These values were used as given.11  - Extreme COVID-era observations (ip_growth −14.1 in 2020-04) fall inside every training window. They were kept, because the specification fixes the training rows.12  - The data are the current vintage, not real-time.13- Exclusion ledger (`out/exclusions.csv`), for the ridge training set at the last origin: 417 rows → minus 2 months before 1992-03 → minus 2 months whose target lies after the origin → 413 training rows (`n_analysed`).1415## Method16- **Naive forecast:** ip_growth_t.17- **Expanding-mean forecast:** the mean of ip_growth over 1992-04..t.18- **Ridge forecast:**19  - Training rows are s = 1992-03 … t−1, with target ip_growth_{s+1}.20  - 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 and tcu_s.21  - Each feature is z-scored with the mean and the ddof=1 standard deviation of that origin's training rows. These statistics are recomputed at every origin (`normalisation_window` = "expanding").22  - The target is centred on its training mean ȳ, which serves as the unpenalised intercept.23  - The coefficients are b = (Z′Z + 50 I)⁻¹ Z′(y − ȳ), and the forecast is ȳ + z̃_t·b.24- The method has no randomness (`random_seed` = null).25- Code: `out/analysis.py`. It writes `out/results.json`, `out/forecasts.csv` (180 rows) and `out/exclusions.csv`.2627## Results28| model | RMSE | MAE |29|---|---|---|30| naive | 0.8831 (`rmse_naive`) | 0.6990 (`mae_naive`) |31| expanding mean | 0.5439 (`rmse_mean`) | 0.4293 (`mae_mean`) |32| ridge | 0.5608 (`rmse_ridge`) | 0.4514 (`mae_ridge`) |3334- Compared with the naive forecast, ridge improves RMSE by 0.365 (`rel_improvement_vs_naive`), i.e. ~36% (C1).35- Compared with the expanding mean, ridge is slightly worse: the relative improvement is −0.031 (`rel_improvement_vs_mean`), and its MAE is also higher (C3).36- So ridge beats the naive forecast but not the expanding mean over this window.3738## Uncertainty39I ran Diebold–Mariano tests on the squared-error loss differential (ridge minus baseline), with the Harvey–Leybourne–Newbold small-sample correction and t(59) reference.40- **Ridge vs naive:** DM = −3.36 (`dm_stat_ridge_vs_naive`), p = 0.0014 (`dm_pvalue_ridge_vs_naive`). Ridge is significantly better (C2).41- **Ridge vs mean:** DM = 0.54 (`dm_stat_ridge_vs_mean`), p = 0.59 (`dm_pvalue_ridge_vs_mean`). There is no significant difference (C4).4243Only 60 errors are evaluated, so the relative-improvement figures carry sizeable sampling error. The ~3% gap to the mean is well within noise.4445## Limitations and open issues46- The data are the current vintage and publication lags are ignored. The results describe how predictable the revised series is under stylised timing, not real-time forecast accuracy.47- λ is fixed at 50 by the specification and was not tuned. Other penalties or feature sets could rank differently; this was not evaluated.48- COVID outliers stay in every training window and can distort the scaling statistics and the coefficients.49- The evaluation window (2021-10 to 2026-09 targets) is a single, fairly calm post-pandemic period.50- The DM test is applied to forecasts from estimated models (with the mean nested in ridge as λ→∞), so its p-values are approximate.51- Feasibility: complete.52
Files · 4f59ed568641ceda6f39552d5cc3a441aa812088
Menu

Theme