F3-conf-01 — Forecasting Canadian monthly GDP YoY growth under publication lags
Question
At the end of each month t (48 origins, 2022-05-01 to 2026-04-01; n_origins, first_origin, last_origin), how well can year-over-year growth of Canadian monthly real GDP be forecast for months t+1 and t+3 using only information that would have been published by then (GDP up to t−2, LFS employment up to t−1)? Does a model that adds LFS employment growth beat the naive forecast (GDP YoY of month t−2)?
Data and exclusions
- One file,
data/canada_gdp_employment.csv, 345 data rows (n_input_rows), 1998-01 to 2026-09; SHA-256 matches the README. GDP is missing for 2026-08/09 (unpublished); these months are never needed. The audit is inout/state/data_audit.md. - Data issues and how each was handled are in
data_issues. (i) YoY values for 1998 are present but cannot be checked, because the 1997 levels are not in the file; they were used as given. (ii) Pandemic outliers. (iii) The data are the current vintage. - Information rule: at every origin the series are cut to GDP ≤ t−2 and employment ≤ t−1 before estimating, transforming or plugging in values. At the last origin this means GDP through 2026-02-01 (
last_target_date_available) and employment through 2026-03-01 (last_predictor_date_available). Every row ofout/forecasts.csvrecords the latest dates actually used, and these were checked against the rule. - Estimation exclusions (
out/exclusions.csv, at the last origin). A training row is dropped if its target is not yet published, if its lagged regressors are missing (first 2 months), or if its target or regressor month falls in 2020-03..2021-12. The last rule was pre-specified because pandemic swings of −16% to +18% would dominate OLS. After exclusions, 310 rows remain for h=1 (n_analysed) and 306 for h=3 (n_analysed_h3). No evaluation targets are excluded.
Method
- Naive: the forecast for both horizons is gdp_yoy(t−2).
- Model
direct_ols_ar_emp(model_name,model_description): a direct OLS regression for each horizon h, re-estimated at every origin on an expanding window: gdp_yoy(s+h) = a + b·gdp_yoy(s−2) + c·emp_yoy(s−1). Only pseudo-origins s with s+h ≤ t−2 are used, so every training target was observed at the origin. The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1). - The specification was fixed before any out-of-sample errors were looked at. No model selection was done.
- Errors are forecast − actual on the current-vintage
gdp_yoy. RMSE and MAE are averaged over the 48 origins for each horizon. The method is deterministic, so no random seed is used (random_seed= null).
Results
| horizon | RMSE naive | MAE naive | RMSE model | MAE model | 1 − RMSE_model/RMSE_naive |
|---|---|---|---|---|---|
| h=1 | 0.8136 (rmse_naive_h1) |
0.6421 (mae_naive_h1) |
0.7429 (rmse_model_h1) |
0.6040 (mae_model_h1) |
0.0869 (rel_improvement_rmse_h1) |
| h=3 | 1.1400 (rmse_naive_h3) |
0.8716 (mae_naive_h3) |
0.9023 (rmse_model_h3) |
0.7535 (mae_model_h3) |
0.2085 (rel_improvement_rmse_h3) |
Units are percentage points of YoY growth. The model's RMSE and MAE are lower than the naive forecast's at both horizons: about 9% lower RMSE at h=1 and about 21% lower at h=3.
At the last origin the estimated employment coefficient is small: 0.058 at h=1 and 0.032 at h=3 (last_origin_coefficients). The GDP persistence coefficient is below one: 0.82 at h=1 and 0.66 at h=3. So much of the gain probably comes from mean reversion toward the sample average, not from employment. I did not run a separate AR-only comparison, so the share of the gain due to employment was not evaluated.
Uncertainty
- Diebold–Mariano test of equal squared-error loss (naive vs model; HAC variance with h−1 lags, Harvey–Leybourne–Newbold small-sample correction, t(47) reference;
dm_test_naive_vs_model):- h=1: DM = 2.03, p = 0.049. This is marginally significant at 5%.
- h=3: DM = 1.35, p = 0.18. This is not significant, despite the larger point improvement.
- With only 48 origins and overlapping 3-step errors, the gains are imprecise. The model should be read as "no worse, probably somewhat better", not as a definitive improvement.
Limitations and open issues
- The data are the current vintage. The exercise simulates publication timing only, not first-release values, so real-time accuracy is likely overstated for both methods. No real-time validity is claimed.
- The evaluation window (2022-06..2026-07) is a single post-pandemic period. Results may not generalise.
- The pandemic-exclusion window is a judgement call. Other windows or outlier dummies were not tried, to avoid selecting on the test errors.
- The contribution of employment specifically (vs the AR intercept and shrinkage) was not isolated.
- The 1998 YoY values could not be verified (see
data_issues). - Feasibility: complete (
feasibility).