F3-conf-01 — Forecasting Canadian monthly GDP y/y growth under publication lags
Question
At the end of each month t, for 48 origins from 2022-05 to 2026-04 (n_origins, first_origin, last_origin), how accurately can the year-over-year growth of Canadian monthly real GDP be forecast for month t+1 and t+3 using only data published by then? And does a model that adds the more timely LFS employment growth beat the naive forecast (GDP y/y of month t−2)? At the last origin, the latest GDP month available is 2026-02 (last_target_date_available) and the latest employment month available is 2026-03 (last_predictor_date_available).
Data and exclusions
- Input:
data/canada_gdp_employment.csv, 345 rows (n_input_rows), covering 1998-01 to 2026-09. Its SHA-256 matches the README. There are no duplicate months and no gaps. GDP is missing only for 2026-08 and 2026-09, which have not been published. When the y/y columns are recomputed from the levels, they match to within 5e-5 from 1999-01 onward. The full audit is inout/state/data_audit.md. - Data issues and how they were handled are listed under
data_issues:- The 1998 y/y values are present, although the README says they should be empty, and they cannot be verified from the levels. They are excluded from estimation.
- The COVID-19 period 2020-03..2021-12 contains extreme outliers. Training pairs whose target or regressor month falls in that window are dropped. This rule was fixed in advance and was already known at the first origin.
- The data are the current vintage, not real-time vintages.
- Exclusion ledger (
out/exclusions.csv), for the last estimation sample (origin 2026-04, h=1): 345 → 333 (drop 1998) → 326 (keep only targets ≤ 2026-02, i.e. observed at the origin) → 323 (drop targets whose lagged regressors are not available) → 298 (drop pairs touching the COVID window). That leaves 298 observations (n_analysed). For h=3 the last estimation sample has 294 observations (n_analysed_h3_last_origin).
Method
- Naive baseline: the forecast for both horizons is gdp_yoy[t−2].
- Model
dar_emp(model_name,model_description): a direct OLS regression estimated separately for each horizon h:- gdp_yoy[m] = a + b·gdp_yoy[m−h−2] + c·emp_yoy[m−h−1].
- It is re-estimated at every origin on an expanding window starting in 1999.
- Training targets are restricted to months m ≤ t−2, so every target is observed at the origin, and employment is restricted to months ≤ t−1.
- The forecast plugs in gdp_yoy[t−2] and emp_yoy[t−1].
- Every forecast records the last GDP and employment dates it used (
out/forecasts.csv, 192 rows). Checks confirm that all of them respect the availability rules (out/state/checks.md). - Evaluation: RMSE and MAE over the 48 origins, computed against the current-vintage
gdp_yoyof month t+h. - There is no randomness (
random_seed= null).
Results
| horizon | naive RMSE | naive MAE | model RMSE | model MAE | 1 − RMSE_model/RMSE_naive |
|---|---|---|---|---|---|
| h=1 | 0.814 (rmse_naive_h1) |
0.642 (mae_naive_h1) |
0.743 (rmse_model_h1) |
0.603 (mae_model_h1) |
0.087 (rel_improvement_rmse_h1) |
| h=3 | 1.140 (rmse_naive_h3) |
0.872 (mae_naive_h3) |
0.885 (rmse_model_h3) |
0.735 (mae_model_h3) |
0.224 (rel_improvement_rmse_h3) |
All values are in percentage points, except the last column, which is a fraction.
The employment-augmented model has a lower RMSE and a lower MAE than the naive forecast at both horizons. The gain is larger at h=3, where the naive forecast is effectively 5 months stale.
Uncertainty
- Diebold–Mariano test (squared loss, Newey–West variance with h−1 lags, Harvey–Leybourne–Newbold correction, t(47) reference distribution):
- h=1: DM = −2.08, p = 0.043 (
dm_stat_h1,dm_pvalue_h1). - h=3: DM = −1.72, p = 0.093 (
dm_stat_h3,dm_pvalue_h3). - The h=1 gain is significant at 5%. The h=3 gain is significant only at 10%.
- h=1: DM = −2.08, p = 0.043 (
- With only 48 overlapping origins, these tests have low power and only approximate size.
- Sensitivity to the COVID exclusion (
sens_nocovidexcl_*): when the COVID-window pairs are kept, the model still beats the naive forecast, but the gains shift:- h=1 improvement: 0.027 (
sens_nocovidexcl_rel_improvement_rmse_h1). - h=3 improvement: 0.319 (
sens_nocovidexcl_rel_improvement_rmse_h3). - So the size of the improvement depends on this specification choice, though its sign does not.
- h=1 improvement: 0.027 (
Limitations and open issues
- The data are the current vintage. The exercise reproduces publication timing only, not the first-release values, so these results do not have real-time validity.
- Only one model specification was evaluated (
model_name). No model selection was done, so there is no selection bias, but no alternative specifications are reported either. - The evaluation window 2022–2026 follows the pandemic. GDP growth was declining over this period, which favours models with mean reversion. The results may not carry over to other periods.
- The 1998 y/y values could not be verified and were excluded. This has a negligible effect on the training sample.
- The feasibility status is "complete" (
feasibility).