Verification checks (P4) — 2026-10-30
All checks were run with an inline Python script against out/results.json, out/forecasts.csv and data/.
- PASS reproducibility: deleted outputs, ran analysis.py twice, and
cmpshowed results.json and forecasts.csv byte-identical. - PASS forecasts.csv has 32 rows; no missing actuals.
- PASS target_date = train_last_date + h quarters for all rows.
- PASS train_last_date < origin_date; the first-release vintage date of every actual is later than the origin (no look-ahead).
- PASS actual = first_release_value of target quarter.
- PASS naive forecast = train_last_value, and train_last_value = last value in the origin's vintage file (not the current vintage).
- PASS RMSE ≥ MAE > 0 for every model/horizon.
- PASS independent recomputation of naive RMSE h1/h2, relative improvements, and mean abs revision.
- PASS exclusion ledger: 314 − (151+1+3) = 159 = n_analysed = n_train of ar1 at last origin.
- PASS magnitudes: the model RMSEs (1.48, 1.40) are below the naive RMSEs (2.01, 2.27); every value is in plausible pp-SAAR units. The AR(1) coefficients are stable across origins (phi ≈ 0.335–0.343).
- Note: the code does not import current_vintage.csv before the revision step, and the model never uses it (checked by reading the code).