# Verification checks (P4), 2026-10-30 | check | outcome | |---|---| | Clean re-run of out/analysis.py (deleted results.json, forecasts.csv, exclusions.csv) regenerates byte-identical results.json and forecasts.csv | PASS | | forecasts.csv has 192 rows, 48 per (model, horizon) | PASS | | last_target_date_used <= origin − 2 months for all rows | PASS | | last_predictor_date_used <= origin − 1 month for model rows; empty for naive | PASS | | target_date = origin + h for all rows | PASS | | actual equals data gdp_yoy of target month | PASS | | MAE <= RMSE for every model/horizon; RMSEs positive | PASS | | rel_improvement = 1 − rmse_model/rmse_naive | PASS | | Exclusion ledger: 345 − (12+7+3+25) = 298 = n_analysed (asserted in script) | PASS | | In-script asserts: plug-in values are the latest available obs (y at t−2, e at t−1) | PASS | | Magnitudes vs baseline: model RMSE 0.74/0.88 vs naive 0.81/1.14 pp — same order, plausible | PASS | | Sensitivity (no COVID exclusion) changes ranking of improvement across horizons (h1 0.027, h3 0.319) | NOTED, reported in report |