# 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.csv` records 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.