Contract (P0)
Question. At the end of each month t (48 origins 2022-05..2026-04), forecast Canadian monthly real GDP y/y growth for months t+1 and t+3 using only data published by then; compare a naive forecast with one model that also uses LFS employment y/y growth.
Estimands. Out-of-sample RMSE and MAE (pp) per horizon h∈{1,3} over the 48 origins for (a) naive = gdp_yoy(t-2), (b) my model; relative improvement 1 − RMSE_model/RMSE_naive. Meaningful under: current-vintage data (timing simulation only, not real-time vintages), fixed origin set, squared/absolute loss.
Information rules. At origin t: gdp columns only months ≤ t−2, emp columns only months ≤ t−1. Estimation samples, transforms, selection and plug-in values restricted accordingly; training targets must be observed (≤ t−2). Targets gdp_yoy(t+h); the latest target is 2026-07 (origin 2026-04, h=3) — available in file.
Outputs. out/forecasts.csv (192 rows: origin_date,target_date,horizon,forecast,actual,model,last_target_date_used,last_predictor_date_used); out/results.json (task_id, model_name, model_description, n_origins, first_origin, last_origin, last_target_date_available, last_predictor_date_available, rmse/mae naive & model h1/h3, rel_improvement_rmse_h1/h3, 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 state files and out/exclusions.csv.
Invalidating conditions. Any use of data after t−2 (GDP) / t−1 (emp) at origin t; missing targets for any origin/horizon; claiming real-time validity.