| forecasts.csv has 80 rows, 10 per (model,horizon) |
True |
|
| vintage_used == origin_date for all rows |
True |
|
| target = last(V)+h and target month not present in vintage V |
True |
|
| origin_date < target_date (gate rule) |
False |
40 rows fail, all h=1: {1}; structural, target month-start precedes month-end origin because last(V) lags origin |
| actuals match first_release.csv |
True |
|
| table1 matches results.json |
True |
|
| RMSE >= MAE for all models |
True |
|
| rel_improvement identity |
True |
|
| DM LRV positive |
True |
|
| DM sign consistent with RMSE ordering |
True |
|
| conclusion codes consistent with RMSE and p<0.05 |
True |
|
| n_analysed = 20 = n_raw pairs - removed (exclusions.csv) |
True |
|
| magnitudes plausible: all RMSE in (0.3, 3) pp |
True |
|
| naive forecast = yoy_first_release of last(V) when last(V) first released in V (check 2026-07-31 origin) |
True |
|
| revision mean = mean |
revision_h1_targets |
|