| 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 |