Contract — T1-forecast
Question. Real-time forecastability of US retail & food services sales (RSAFS) year-over-year log growth g_m = 100 ln(L_m/L_{m-12}) at h = 1 and h = 3 months beyond the last month published in each of 10 month-end ALFRED vintages (2025-10-31 … 2026-07-31), and whether my own model beats the naive (no-change) forecast, errors measured against first-release YoY growth (data/first_release.csv).
Estimands (per h ∈ {1,3}, over 10 origins): (a) RMSE and MAE of naive, seasonal naive, AR(1) and my model vs first-release actuals; (b) 1 − RMSE_model/RMSE_naive; (c) DM statistic (model vs naive, squared loss, d_t = e²_naive − e²_model, Bartlett/NW LRV with truncation lag h−1, no HLN correction) and two-sided N(0,1) p-value; (d) mean |g_current − yoy_first_release| over the 10 h=1 target months. Meaningful under: forecasts use only information available at each origin; first release is a well-defined actual; with n = 10 the asymptotic DM distribution is only a rough guide.
Outputs. out/forecasts.csv (80 rows; origin_date,target_date,horizon,forecast,actual_first_release,model,vintage_used), out/results.json (keys per TASK.md table), out/table1.csv (model,horizon,rmse,mae,n), out/figure1.png, out/report.md (Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues), out/analysis.py (regenerates all from data/ deterministically), out/claims.json. Plus protocol files out/state/*, out/exclusions.csv.
Information rules. At origin V: only RSAFS vintage V, PAYEMS vintage V, UMCSENT months ≤ month(V). last(V) = last month in RSAFS vintage V; target = last(V)+h; actual = yoy_first_release of target. RSAFS_current only for (d), never in forecasts. Model selection must not use evaluation outcomes.
Invalidating conditions. Missing target months in first_release.csv; vintage leakage (using later vintage / current data); missing vintage files; tuning the model on the 10 evaluation errors.