Contract — F3-conf-03
Question. Does a fixed-penalty (λ=50) ridge regression on 8 standardised predictors forecast next-month US IP growth (100×Δln INDPRO) better than (a) naive last value and (b) expanding historical mean, over 60 rolling origins 2021-09..2026-08, h=1?
Estimands. Out-of-sample RMSE and MAE (percent/month) of naive, mean, ridge over the 60 targets 2021-10..2026-09; rel. improvement 1 − RMSE_ridge/RMSE_baseline for each baseline. Meaningful under: current-vintage data, publication lags ignored (stylised timing), squared/absolute loss; 60 points ⇒ sizable sampling noise.
Information rules. At origin t only data dated ≤ t. Ridge training rows s ∈ [1992-03, t−1], target y_{s+1}; features z_s = (ip_s, ip_{s−1}, ip_{s−2}, oil_s, ff_s, permit_s, neworder_s, tcu_s). μ, σ (ddof=1), ȳ computed on training rows of each origin only. b=(Z'Z+50I)^{-1}Z'(y−ȳ); forecast ȳ + ((z_t−μ)/σ)·b. Naive = ip_t; mean = mean ip over 1992-04..t.
Outputs. out/forecasts.csv (180 rows: origin_date,target_date,horizon,forecast,actual,model); out/results.json (task_id, n_origins, first_origin, last_origin, lambda, normalisation_window, n_features, rmse_/mae_ naive/mean/ridge, rel_improvement_vs_naive/_mean, feasibility, feasibility_reason, data_issues, n_input_rows, n_analysed, random_seed); out/report.md (Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues); out/analysis.py; out/claims.json; plus out/exclusions.csv and out/state/*.
Invalidating conditions. Missing feature values inside training/origin rows; missing target months; using full-sample scaling (leakage); data not covering 2026-09 target.