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), how well can the year-over-year growth of Canadian monthly real GDP for months t+1 and t+3 be forecast with the data published by then? And does a model that adds LFS employment growth (published sooner) beat the naive forecast? GDP can be used only for months ≤ t−2 and employment only for months ≤ t−1. At the last origin this means GDP up to last_target_date_available (2026-02-01) and employment up to last_predictor_date_available (2026-03-01).
Data and exclusions
- One file:
data/canada_gdp_employment.csv. Its SHA-256 matches the README. It has 345 rows (n_input_rows), covers 1998-01 to 2026-09, has no duplicate months and no gaps. GDP is missing only for 2026-08 and 2026-09, which were not yet published. - I recomputed both y/y columns from the levels and they match exactly from 1999-01 onward. Data issues are listed in
data_issues:- The README says the y/y columns are empty for 1998, but the file fills them in. I used those values as given.
- The COVID swings (GDP y/y from −16.2 to +18.5 %) are extreme outliers. I removed them from model estimation: any training pair whose target or regressor month falls in 2020-03..2021-06 is dropped. I fixed this rule in advance and did not tune it on test errors. No test target falls in that window, and the naive forecast is unaffected.
- The data are the current vintage, not the figures as first published.
- Exclusion ledger (
out/exclusions.csv) for the last estimation sample (origin 2026-04, h=1):- 345 rows → 338 available at that origin (GDP ≤ 2026-02)
- → 335 lag/lead pairs
- → 316 after the COVID exclusion (
n_analysed). The h=3 equivalent is 312 (n_analysed_h3). The sample size grows with each origin.
Method
- Naive: the forecast for both horizons is gdp_yoy(t−2).
- Model
ardl_emp(model_name,model_description): a direct h-step OLS regression, gdp_yoy(s+h) = a + b·gdp_yoy(s−2) + c·emp_yoy(s−1).- It is re-estimated at every origin on an expanding window that starts in 1998.
- The window includes only pairs whose target month is ≤ t−2, so every training target was already published at the origin.
- The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1).
- There is no model selection or tuning and no randomness (
random_seed= null).
- For every forecast,
out/forecasts.csvrecords the latest GDP and employment months used, including in estimation. Checks confirm all of them respect the lag rules (out/state/checks.md). - Accuracy is measured by RMSE and MAE in percentage points over the 48 origins for each horizon.
Results
| h=1 | h=3 | |
|---|---|---|
| Naive RMSE | 0.814 (rmse_naive_h1) |
1.140 (rmse_naive_h3) |
| Naive MAE | 0.642 (mae_naive_h1) |
0.872 (mae_naive_h3) |
| Model RMSE | 0.741 (rmse_model_h1) |
0.947 (rmse_model_h3) |
| Model MAE | 0.603 (mae_model_h1) |
0.796 (mae_model_h3) |
| 1 − RMSE_model/RMSE_naive | 0.089 (rel_improvement_rmse_h1) |
0.170 (rel_improvement_rmse_h3) |
At both horizons the employment-augmented model has lower RMSE and MAE than the naive forecast: about 9 % lower RMSE at h=1 and 17 % lower at h=3. Because GDP is published two months late, the effective lead time is h+2 months, which is why errors grow with h. In the last estimation sample (last_estimation_sample) the coefficient on employment growth is positive but small (≈0.06 at h=1 and ≈0.09 at h=3). Most of the gain likely comes from the estimated mean reversion (b < 1 plus an intercept) rather than from employment itself. I did not test this separately.
Uncertainty
I compared squared-error losses with a Diebold–Mariano test (Newey–West variance with h+1 lags and the Harvey–Leybourne–Newbold small-sample correction). The statistics are 1.33 at h=1 (dm_stat_h1, p = 0.19, dm_pvalue_h1) and 1.26 at h=3 (dm_stat_h3, p = 0.22, dm_pvalue_h3). With only 48 overlapping origins, the improvement is not statistically significant at conventional levels. The point estimates of the relative improvement are therefore imprecise.
Limitations and open issues
- The errors come from current-vintage data: the exercise simulates publication timing, not the values first published, so no real-time validity is claimed.
- The evaluation covers only 48 origins (2022–2026), a post-COVID period with falling growth. The results may not carry over to other periods.
- The COVID exclusion window is a judgement call I made in advance. I tested no alternatives, so the model's sensitivity to it is unknown.
- I evaluated only one model, and did not separate the contribution of employment from that of mean reversion. The claim that employment growth "helps" is therefore not established; only "the model with employment beats the naive forecast in this sample" is.
- I could not verify the y/y values for 1998, because the 1997 levels are not in the file.