# Verification checks (P4) | check | outcome | |---|---| | Clean re-run (deleted results.json, forecasts.csv, exclusions.csv; re-ran analysis.py) gives byte-identical results.json and forecasts.csv | PASS | | forecasts.csv has 192 rows, 48 per (model, horizon) | PASS | | target_date = origin_date + horizon months for all rows | 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 | | actual equals data gdp_yoy of target month | PASS | | naive forecast equals gdp_yoy(t−2) | PASS | | MAE ≤ RMSE for each model/horizon | PASS | | rel_improvement = 1 − rmse_model/rmse_naive (diff ≤ 4e-7, rounding) | PASS | | exclusions: n_before − n_after = n_removed; 345 − Σremoved = n_analysed (h1: 310) and n_analysed_h3 (306) | PASS | | last_target_date_available = 2026-02-01, last_predictor_date_available = 2026-03-01 for origin 2026-04-01 | PASS | | Magnitudes: model RMSE within ~10–25% of naive, plausible; last-origin coefficients plausible (AR coef 0.66–0.82) | PASS |