# Verification checks (P4), 2026-10-30 | # | check | outcome | |---|---|---| | 1 | Clean re-run (deleted results.json, forecasts.csv, exclusions.csv) reproduces byte-identical SHA-256 of results.json and forecasts.csv | PASS | | 2 | forecasts.csv: 180 rows, 60 per model, horizon=1, target_date = origin+1 month | PASS | | 3 | `actual` equals data ip_growth at target month; naive equals ip_growth at origin | PASS | | 4 | Independent ridge recomputation (augmented least squares, separate feature construction) at origins 2021-09, 2024-01, 2026-08 matches to <1e-8 | PASS | | 5 | Expanding mean at 2021-09 recomputed independently | PASS | | 6 | RMSE/MAE recomputed from forecasts.csv; MAE ≤ RMSE for all models | PASS | | 7 | rel_improvement identities 1 − RMSE_ridge/RMSE_base hold | PASS | | 8 | DM statistic signs agree with RMSE ordering | PASS | | 9 | Exclusion ledger: 417 − 2 − 2 = 413 = n_analysed = training rows at last origin | PASS | | 10 | Leakage test: multiplying all values dated > 2024-01 by 7 and adding 100 leaves every forecast at origins ≤ 2024-01 unchanged (later ones change) | PASS | | 11 | Script asserts: no NaN in training X/y; last training row s satisfies s+1 ≤ t | PASS (asserts did not fire) | | 12 | Magnitudes: RMSEs 0.54–0.88 %/month vs full-sample SD of ip_growth 1.04 (inflated by 2020); plausible | PASS |