SPB Git

spb/wp29_uqo

Public
5.5 KB · 47 lines markdown
1# F3-conf-02 — Real-time forecasts of US real GDP growth from data vintages23## Scientific question4How accurately could US quarterly real GDP growth have been forecast one and two quarters ahead *at the time*, using only the data that had actually been published at each forecast origin, and does a simple time-series model beat the naive forecast in this real-time setting? The estimands are the real-time out-of-sample RMSE and MAE, over 8 quarterly origins and horizons h ∈ {1, 2} quarters, of (a) the naive forecast and (b) one model of your choice, evaluated against the *first-release* value of each target quarter, together with the relative improvement 1 − RMSE_model / RMSE_naive per horizon, and the mean absolute revision between the first release and the current value of the h = 1 target quarters.56## Inputs7All files concern the series A191RL1Q225SBEA — US real GDP, percent change from preceding period, seasonally adjusted annual rate, quarterly (BEA via FRED/ALFRED); quarters are dated by their first day. See `data/README.md` for URLs, retrieval times (2026-10-30 UTC), SHA-256 and licence.8- `data/vintages/A191RL1Q225SBEA_vintage_<YYYY-MM-DD>.csv` — 8 files, one per forecast origin (2024-01-31, 2024-04-30, 2024-07-31, 2024-10-31, 2025-01-31, 2025-04-30, 2025-07-31, 2025-12-31): the complete series exactly as it was published on that date (ALFRED; header `observation_date,A191RL1Q225SBEA_<yyyymmdd>`; values as of that date; the last row is the most recently published quarter at that date).9- `data/current_vintage.csv` — the same series as published on 2026-10-30 (FRED; header `observation_date,A191RL1Q225SBEA`), containing all revisions known today.10- `data/first_release.csv` — columns `quarter`, `first_release_value`, `first_release_vintage_date`: the first published value of each quarter from 2023Q3 to 2026Q3 and the (month-end) vintage date at which it was first available.1112## Information-availability rules13- The 8 forecast origins are the 8 vintage dates. At origin d, **the only usable target data are the contents of the vintage file dated d** (its training sample ends at the last quarter in that file, and all values, including those of earlier quarters, are the ones in that file). `current_vintage.csv` must not be used for estimation or as forecast input at any origin; it is provided only to compute the revision statistic and for discussion.14- Horizons: h = 1 and h = 2 quarters after the last quarter contained in the origin's vintage file.15- Actuals: the first-release value of the target quarter from `data/first_release.csv`.16- Naive baseline: for both horizons, the forecast is the last value in the origin's vintage file.1718## Required outputs19- `out/forecasts.csv` — one row per (origin, horizon, model), columns: `origin_date` (the vintage date, YYYY-MM-DD), `target_date` (quarter start, YYYY-MM-DD), `horizon` (1 or 2), `forecast`, `actual` (first-release value), `model` (`naive` or the value of `model_name`), `vintage_date` (the vintage file used), `train_last_date` (last quarter in the training data), `train_last_value` (the value of that quarter in the training data used), `n_train` (number of observations in the training data used). Expected: 8 × 2 × 2 = 32 rows.20- `out/results.json` with the keys:2122| key | type | unit | meaning |23|---|---|---|---|24| `task_id` | string | — | "F3-conf-02" |25| `model_name` | string | — | short name of your model, used in the `model` column |26| `model_description` | string | — | one-sentence specification (lags, estimation sample, method) |27| `n_origins` | integer | — | 8 |28| `first_origin`, `last_origin` | string | date | first and last vintage dates |29| `rmse_naive_h1`, `mae_naive_h1`, `rmse_naive_h2`, `mae_naive_h2` | number | percentage points (annualised growth) | naive errors vs first releases |30| `rmse_model_h1`, `mae_model_h1`, `rmse_model_h2`, `mae_model_h2` | number | percentage points | your model's errors vs first releases |31| `rel_improvement_rmse_h1`, `rel_improvement_rmse_h2` | number | fraction | 1 − rmse_model / rmse_naive |32| `mean_abs_revision_h1_targets` | number | percentage points | mean over the 8 h = 1 target quarters of \|current-vintage value − first-release value\| |33| `feasibility` | string | — | "complete", "partial" or "infeasible" |34| `feasibility_reason` | string or null | — | explanation if not complete |35| `data_issues` | array of {"issue","handling"} | — | data problems detected and how handled (empty list if none) |36| `n_input_rows` | object | — | data rows read per input file (excluding headers), keyed by path relative to `data/` (e.g. "current_vintage.csv", "first_release.csv", "vintages/A191RL1Q225SBEA_vintage_2024-01-31.csv") |37| `n_analysed` | integer | — | observations in the last origin's training data |38| `random_seed` | integer or null | — | seed used, if any |3940- `out/report.md` with the sections: Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues.41- `out/analysis.py` — running `~/wp29/venv/bin/python out/analysis.py` from the workspace root must regenerate `out/results.json` and `out/forecasts.csv` from `data/` only, deterministically.42- `out/claims.json` — a list of the central claims of the report: [{"id": "C1", "text": "...", "results_keys": ["..."], "status": "supported"|"unsupported"|"not_evaluated", "caveat": "..."}].4344## Constraints45- No network access. Python: `~/wp29/venv/bin/python` (numpy, pandas, scipy, statsmodels available). Do not modify `data/`.46- This task is designed to be completed in well under 20 minutes of work.47
Files · main
Menu

Theme