# Contract — F3-conf-03 **Question.** Does a fixed-penalty (λ=50) ridge regression on 8 standardised monthly predictors forecast next-month US industrial production growth (100×Δln INDPRO) better than (a) the naive last-value forecast and (b) the expanding historical mean, over 60 rolling origins t = 2021-09 … 2026-08, horizon h=1? **Estimands.** Out-of-sample RMSE and MAE (percent per month) of naive, mean, ridge over the 60 targets 2021-10 … 2026-09; rel. improvements 1 − RMSE_ridge/RMSE_baseline. Meaningful only as pseudo-out-of-sample accuracy on the current (revised) vintage under the stylised timing assumption (value dated m known at end of m); not real-time performance. With 60 points, differences are sampling-noisy. **Model (exact).** Training rows s with 1992-03 ≤ s, s+1 ≤ t; target y_{s+1}; features z_s=(ip_s, ip_{s-1}, ip_{s-2}, oil_s, fedfunds_s, permit_s, neworder_s, tcu_s). Standardise with training mean and sample SD (ddof=1) recomputed per origin; centre y by training mean; b=(Z'Z+50I)^{-1}Z'(y−ȳ); forecast ȳ + z̃_t·b. Baselines: naive = ip_t; mean = mean(ip over 1992-04..t). **Info rules.** Nothing dated > t used at origin t; all scaling stats from training window only (normalisation_window="expanding"). **Outputs.** out/forecasts.csv (180 rows: origin_date,target_date,horizon,forecast,actual,model), out/results.json (keys: task_id,n_origins,first_origin,last_origin,lambda,normalisation_window,n_features,rmse_*/mae_* for naive/mean/ridge, rel_improvement_vs_naive, rel_improvement_vs_mean, feasibility, feasibility_reason, data_issues, n_input_rows, n_analysed, random_seed), out/report.md (6 sections), out/analysis.py, out/claims.json. **Invalidating conditions.** Missing data within the needed window, use of future values in scaling, wrong row alignment (lags/targets), fewer than 60 available targets.