SPB Git

spb/wp29_uqo

Public
5.0 KB · 48 lines markdown
1# F3-conf-01 — Forecasting Canadian monthly GDP y/y growth under publication lags23## Question4At 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).56## Data and exclusions7- 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.8- I recomputed both y/y columns from the levels and they match exactly from 1999-01 onward. Data issues are listed in `data_issues`:9  - The README says the y/y columns are empty for 1998, but the file fills them in. I used those values as given.10  - 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.11  - The data are the current vintage, not the figures as first published.12- Exclusion ledger (`out/exclusions.csv`) for the last estimation sample (origin 2026-04, h=1):13  - 345 rows → 338 available at that origin (GDP ≤ 2026-02)14  - → 335 lag/lead pairs15  - → 316 after the COVID exclusion (`n_analysed`). The h=3 equivalent is 312 (`n_analysed_h3`).16  The sample size grows with each origin.1718## Method19- **Naive**: the forecast for both horizons is gdp_yoy(t−2).20- **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).21  - It is re-estimated at every origin on an expanding window that starts in 1998.22  - The window includes only pairs whose target month is ≤ t−2, so every training target was already published at the origin.23  - The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1).24  - There is no model selection or tuning and no randomness (`random_seed` = null).25- 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`).26- Accuracy is measured by RMSE and MAE in percentage points over the 48 origins for each horizon.2728## Results29| | h=1 | h=3 |30|---|---|---|31| Naive RMSE | 0.814 (`rmse_naive_h1`) | 1.140 (`rmse_naive_h3`) |32| Naive MAE | 0.642 (`mae_naive_h1`) | 0.872 (`mae_naive_h3`) |33| Model RMSE | 0.741 (`rmse_model_h1`) | 0.947 (`rmse_model_h3`) |34| Model MAE | 0.603 (`mae_model_h1`) | 0.796 (`mae_model_h3`) |35| 1 − RMSE_model/RMSE_naive | 0.089 (`rel_improvement_rmse_h1`) | 0.170 (`rel_improvement_rmse_h3`) |3637At 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.3839## Uncertainty40I 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.4142## Limitations and open issues43- The errors come from current-vintage data: the exercise simulates publication timing, not the values first published, so no real-time validity is claimed.44- The evaluation covers only 48 origins (2022–2026), a post-COVID period with falling growth. The results may not carry over to other periods.45- 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.46- 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.47- I could not verify the y/y values for 1998, because the 1997 levels are not in the file.48
Files · 76f9a44a3a85fb2bc2b0b370a4ae4eed9b95e579
Menu

Theme