| Clean re-run (deleted results.json, forecasts.csv, exclusions.csv) regenerates byte-identical results.json and forecasts.csv |
PASS |
| forecasts.csv has 240 rows, 40 per (model, horizon) |
PASS |
| target_date − origin_date = 3h months for every row |
PASS |
actual equals infl_annualised of target quarter |
PASS |
| snaive forecast equals infl of target−4 quarters, and that quarter ≤ origin |
PASS |
| Model fit uses only rows ≤ origin (assert in analysis.py) |
PASS |
| Exclusions: 127 − 1 = 126 quarters with inflation; last estimation sample 2025Q3 window has 122 obs, 118 after 4-lag hold-out = n_analysed |
PASS |
| RMSE ≥ MAE > 0 for all six series; SE > 0 |
PASS (e.g. rmse_snaive_h4 2.88 ≥ mae 2.18) |
| rel_improvement = 1 − rmse_model/rmse_snaive; dm_stat = mean/se |
PASS (computed in code) |
| HAC lag 4 ≥ h−1 = 3 |
PASS |
| Magnitudes: model RMSE 2.19–2.46 vs snaive 2.85–2.88, plausible given series sd 2.39 |
PASS |
| Sensitivity: DM stat depends on HAC lag (Bartlett L=3:1.36, 4:1.53, 6:2.06, 8:2.37; rectangular L=3:1.67) |
NOTED — reported as limitation |