{
  "task_id": "T1-forecast",
  "model_name": "rw_drift_base_effect",
  "model_description": "Random walk with drift for the log level of RSAFS, translated into YoY growth so that the known 'base effects' (the monthly changes that drop out of the 12-month window) are used. At origin V, with x_m = ln L_m from the RSAFS vintage dated V and l = last(V): drift d = (x_l - x_{l-12})/12 (mean monthly log change over the last 12 published months, i.e. a rolling 12-month estimation window); forecast of the log level x_{l+h} = x_l + h*d; forecast YoY g_{l+h} = 100*(x_l + h*d - x_{l+h-12}), where x_{l+h-12} (h<=3) is already published in vintage V. Uses only the RSAFS vintage dated V; PAYEMS and UMCSENT are not used. The specification (including the 12-month drift window) was fixed before any forecast error was computed; no parameter was tuned on the evaluation targets.",
  "n_origins": 10,
  "first_origin": "2025-10-31",
  "last_origin": "2026-07-31",
  "rmse_naive_h1": 0.9968743518607954,
  "mae_naive_h1": 0.848722188000456,
  "rmse_naive_h3": 1.4200403737520462,
  "mae_naive_h3": 1.200448633787668,
  "rmse_snaive_h1": 1.6745428991342943,
  "mae_snaive_h1": 1.3066698762543274,
  "rmse_snaive_h3": 1.3160788989552372,
  "mae_snaive_h3": 1.0658686914791946,
  "rmse_ar1_h1": 0.9405244111185227,
  "mae_ar1_h1": 0.7976510573253066,
  "rmse_ar1_h3": 1.1871178147422958,
  "mae_ar1_h3": 0.952689596144294,
  "rmse_model_h1": 0.5502977033274435,
  "mae_model_h1": 0.4863319392755308,
  "rmse_model_h3": 1.1422197516272885,
  "mae_model_h3": 0.9339774440853781,
  "rel_improvement_rmse_h1": 0.44797686659282443,
  "dm_stat_h1": 2.4289778515909086,
  "dm_pvalue_h1": 0.015141457282753734,
  "conclusion_code_h1": "model_better_significant",
  "rel_improvement_rmse_h3": 0.19564276288194327,
  "dm_stat_h3": 1.5465768014315027,
  "dm_pvalue_h3": 0.12196532729732468,
  "conclusion_code_h3": "model_better_not_significant",
  "mean_abs_revision_h1_targets": 0.5482198028389015,
  "feasibility": "complete",
  "feasibility_reason": null,
  "data_issues": [
    {
      "issue": "Irregular RSAFS publication timing: last(V) is 2 months before the origin month for origins 2025-10-31, 2025-11-30, 2025-12-31, 2026-01-31, 2026-02-28, 2026-03-31 and 1 month before it for the others; the 2026-04-30 vintage added two months at once.",
      "handling": "Targets defined as last(V)+h exactly as TASK.md requires; each forecast uses only the vintage dated V (vintage_used = origin_date)."
    },
    {
      "issue": "First-release dating is at month-end granularity: 2025-09 first appears in the 2025-11-30 vintage, and 2026-02 and 2026-03 both first appear in the 2026-04-30 vintage (so the 2026-02 'first release' need not be the advance estimate).",
      "handling": "first_release.csv used as provided (task definition of the actual); documented in the report."
    },
    {
      "issue": "Large level revision: RSAFS levels in the current vintage are about 4.7-4.9% below those of the 2026-07-31 vintage for 2025-2026 months (first_release rows for 2026-08/09 already use the revised level base).",
      "handling": "YoY growth is always computed within a single vintage (levels never mixed across vintages); the revision enters only estimand (d)."
    },
    {
      "issue": "UMCSENT has 210 empty values, all before 1978 (quarterly survey era).",
      "handling": "UMCSENT is not used by the model; no imputation needed."
    },
    {
      "issue": "RSAFS_current.csv contains information not available at any forecast origin.",
      "handling": "Read only in the revision block for estimand (d), after all forecasts are produced."
    }
  ],
  "n_input_rows": {
    "RSAFS_current.csv": 417,
    "UMCSENT.csv": 887,
    "first_release.csv": 28,
    "vintages/PAYEMS_vintage_2025-10-31.csv": 1040,
    "vintages/PAYEMS_vintage_2025-11-30.csv": 1041,
    "vintages/PAYEMS_vintage_2025-12-31.csv": 1043,
    "vintages/PAYEMS_vintage_2026-01-31.csv": 1044,
    "vintages/PAYEMS_vintage_2026-02-28.csv": 1045,
    "vintages/PAYEMS_vintage_2026-03-31.csv": 1046,
    "vintages/PAYEMS_vintage_2026-04-30.csv": 1047,
    "vintages/PAYEMS_vintage_2026-05-31.csv": 1048,
    "vintages/PAYEMS_vintage_2026-06-30.csv": 1049,
    "vintages/PAYEMS_vintage_2026-07-31.csv": 1050,
    "vintages/RSAFS_vintage_2025-10-31.csv": 404,
    "vintages/RSAFS_vintage_2025-11-30.csv": 405,
    "vintages/RSAFS_vintage_2025-12-31.csv": 406,
    "vintages/RSAFS_vintage_2026-01-31.csv": 407,
    "vintages/RSAFS_vintage_2026-02-28.csv": 408,
    "vintages/RSAFS_vintage_2026-03-31.csv": 409,
    "vintages/RSAFS_vintage_2026-04-30.csv": 411,
    "vintages/RSAFS_vintage_2026-05-31.csv": 412,
    "vintages/RSAFS_vintage_2026-06-30.csv": 413,
    "vintages/RSAFS_vintage_2026-07-31.csv": 414
  },
  "n_analysed": 20,
  "random_seed": null
}