# 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 in `out/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 of `out/forecasts.csv` records 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`).