F3-conf-01 — Forecasting Canadian monthly GDP y/y growth under publication lags
Question
At the end of each month t (48 origins, first_origin = 2022-05-01 to last_origin = 2026-04-01, n_origins = 48), how accurately can year-over-year growth of Canadian monthly real GDP for month t+1 and t+3 be forecast using only data published by then? And does a model that also uses the more timely LFS employment growth beat the naive forecast? Under the publication rules, GDP is observed only up to t−2 and employment up to t−1. At the last origin this means GDP through last_target_date_available = 2026-02-01 and employment through last_predictor_date_available = 2026-03-01. So the "h=1" GDP forecast is really three months beyond the last observed GDP month, and "h=3" is five months beyond it.
Data and exclusions
- Input:
data/canada_gdp_employment.csv, 345 rows (n_input_rows). Its SHA-256 matches the README. Months run without gaps from 1998-01 to 2026-09. GDP is missing only for 2026-08 and 2026-09, which were not yet published. Year-over-year growth recomputed from the levels matches the file to within rounding. The full audit is inout/state/data_audit.md, and the data issues are listed indata_issues. - Information truncation: at each origin, GDP data after t−2 and employment data after t−1 are removed before anything is computed. That covers the estimation sample, the training targets and the values plugged into the forecast.
out/forecasts.csvrecordslast_target_date_usedandlast_predictor_date_usedfor every row. - Exclusion: model training rows are dropped if their target or predictor months fall in 2020-03..2021-12. Year-over-year GDP growth swings from −16.2% to +18.5% in that window, and those points would dominate OLS. The decision relies only on information available before the first origin. The naive forecast is not affected.
- Exclusion ledger (
out/exclusions.csv) for the last estimation sample (origin 2026-04, h=1): 345 rows → 335 after the availability and series-edge rule → 310 after the COVID exclusion (n_analysed= 310). The h=3 sample at the last origin has 306 rows (n_training_last_origin_h3).
Method
- Naive: the forecast for both horizons is gdp_yoy(t−2).
- Model
adl_direct_emp(model_name,model_description): a separate OLS regression for each horizon, gdp_yoy(τ+h) = a + b·gdp_yoy(τ−2) + c·emp_yoy(τ−1). It is re-estimated at every origin on an expanding window of rows τ ≥ 1998-03 with τ+h ≤ t−2, so every training target is already observed at the origin. The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1). The specification was fixed in advance; no model selection was done on the evaluation period. The model involves no randomness (random_seed= null). - Evaluation: RMSE and MAE of forecast − actual over the 48 origins, for each horizon, using the current-vintage values. Relative improvement = 1 − RMSE_model/RMSE_naive.
Results
Errors are in percentage points of year-over-year growth.
| naive RMSE | naive MAE | model RMSE | model MAE | rel. improvement (RMSE) | |
|---|---|---|---|---|---|
| h=1 | 0.814 (rmse_naive_h1) |
0.642 (mae_naive_h1) |
0.743 (rmse_model_h1) |
0.604 (mae_model_h1) |
0.087 (rel_improvement_rmse_h1) |
| h=3 | 1.140 (rmse_naive_h3) |
0.872 (mae_naive_h3) |
0.902 (rmse_model_h3) |
0.753 (mae_model_h3) |
0.208 (rel_improvement_rmse_h3) |
The employment-augmented model has lower RMSE and lower MAE than the naive forecast at both horizons. The point gain is about 9% of RMSE at h=1 and about 21% at h=3.
Uncertainty
- Diebold–Mariano test (
dm_test): squared-error loss, Newey–West variance with h+1 lags, Harvey–Leybourne–Newbold small-sample correction applied with the effective horizon h+2, and a t(47) reference distribution. Model minus naive mean loss difference: h=1 −0.110, DM = −1.33, p = 0.19; h=3 −0.485, DM = −1.37, p = 0.18. Neither improvement is statistically significant at conventional levels. With 48 overlapping, autocorrelated forecast errors, the test has little power. - Sensitivity to the COVID exclusion (
sensitivity_no_covid_exclusion, not the headline model): estimating the same model without the exclusion gives RMSE 0.804 at h=1 (relative improvement 0.012) and 0.794 at h=3 (relative improvement 0.304). So the size of the gain, especially at h=1, depends on how the 2020–21 observations are handled. The direction (model better than naive) is the same in both versions.
Limitations and open issues
- The data are the current vintage. Monthly GDP and LFS figures are revised after first publication, so these results simulate only publication timing. They do not measure real-time accuracy, and no real-time validity is claimed.
- The evaluation window, 2022-05 to 2026-07 targets, is short. It begins with the post-COVID disinflation and slowdown, when growth fell from about 6% toward 1–2%, which favours models that mean-revert relative to the random-walk-style naive forecast. The results may not carry over to other periods.
- Only one model was evaluated, as the task requires. The COVID exclusion is a judgement call, and the sensitivity analysis above shows it materially changes the h=1 gain.
- The README says gdp_yoy is empty for the first 12 months, but the file contains values for 1998. These values were used as given (see
data_issues).