Contract — F3-conf-03
Question. Over 60 rolling origins t = 2021-09 … 2026-08, does a fixed-penalty (λ=50) ridge regression on 8 standardised predictors forecast US IP growth at t+1 better than (a) naive (ip_growth_t) and (b) expanding mean of ip_growth over 1992-04..t? Estimands. Out-of-sample RMSE and MAE (percent/month) of naive, mean, ridge over the 60 origins; rel. improvements 1 − RMSE_ridge/RMSE_baseline. Meaningful as descriptive measures of pseudo-out-of-sample accuracy on current-vintage data under stylised timing (publication lags ignored); 60 errors → sampling uncertainty substantial; not real-time. Ridge spec. Training rows s: 1992-03 ≤ s, s+1 ≤ t; y=ip_growth_{s+1}; z_s=(ip_s, ip_{s-1}, ip_{s-2}, oil_s, fedfunds_s, permit_s, neworder_s, tcu_s). Standardise with training-window mean/sd(ddof=1), centre y with training mean; b=(Z'Z+50I)^{-1}Z'(y−ȳ); forecast ȳ + z̃_t·b. Recomputed per origin. Information rules. At origin t only data dated ≤ t; all scaling stats from training window only; target of origin t is ip_growth_{t+1} (used only for scoring). Outputs. out/forecasts.csv (180 rows: origin_date,target_date,horizon,forecast,actual,model∈{naive,mean,ridge}); out/results.json keys: task_id, n_origins, first_origin, last_origin, lambda, normalisation_window, n_features, rmse_/mae_ naive/mean/ridge, rel_improvement_vs_naive, rel_improvement_vs_mean, feasibility, feasibility_reason, data_issues, n_input_rows, n_analysed (training rows at last origin), random_seed; out/report.md (6 sections); out/analysis.py; out/claims.json. Invalidity. Missing feature values in a training window/origin, missing target for t+1 (2026-09 needed for last origin — present), using full-sample scaling, leakage of t+1 data.