{
  "task_id": "T1-forecast",
  "model_name": "Base-effect drift (trailing-12m mean growth level extrapolation)",
  "model_description": "At origin V, using only the RSAFS vintage dated V: let last = last month in the vintage and mu = (ln L_last - ln L_{last-12})/12, the mean monthly log growth over the last 12 published months. The level of target month T = last+h is forecast as ln L_T = ln L_last + h*mu, and the YoY forecast is 100*(ln L_last + h*mu - ln L_{T-12}), where L_{T-12} is the base-period level already published in the same vintage. Equivalently: naive forecast + h*g_last/12 - 100*(ln L_{T-12} - ln L_{last-12}), i.e. it corrects the naive forecast for known base effects (the months dropping out of the 12-month window). No parameters are estimated; PAYEMS and UMCSENT are not used (specification fixed a priori, before any evaluation against actuals). All inputs are from vintage V, so the availability rule holds trivially.",
  "n_origins": 10,
  "first_origin": "2025-10-31",
  "last_origin": "2026-07-31",
  "rmse_naive_h1": 0.996874361153601,
  "mae_naive_h1": 0.8487221999999999,
  "rmse_naive_h3": 1.4200403019751233,
  "mae_naive_h3": 1.2004486,
  "rmse_snaive_h1": 1.674542814799132,
  "mae_snaive_h1": 1.3066698,
  "rmse_snaive_h3": 1.3160788608225193,
  "mae_snaive_h3": 1.0658687,
  "rmse_ar1_h1": 0.940524354787796,
  "mae_ar1_h1": 0.7976509999999999,
  "rmse_ar1_h3": 1.1871176370926342,
  "mae_ar1_h3": 0.9526893999999999,
  "rmse_model_h1": 0.5502976390310066,
  "mae_model_h1": 0.48633190000000004,
  "rmse_model_h3": 1.1422196608203694,
  "mae_model_h3": 0.9339774000000001,
  "rel_improvement_rmse_h1": 0.4479769362367869,
  "dm_stat_h1": 2.4289778933188826,
  "dm_pvalue_h1": 0.015141455540092164,
  "conclusion_code_h1": "model_better_significant",
  "rel_improvement_rmse_h3": 0.19564278617186803,
  "dm_stat_h3": 1.546577321548468,
  "dm_pvalue_h3": 0.12196520179653336,
  "conclusion_code_h3": "model_better_not_significant",
  "mean_abs_revision_h1_targets": 0.5482198028388884,
  "feasibility": "complete",
  "feasibility_reason": null,
  "data_issues": [
    {
      "issue": "Irregular publication timing: RSAFS vintage 2025-10-31 ends at 2025-08 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Irregular publication timing: RSAFS vintage 2025-11-30 ends at 2025-09 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Irregular publication timing: RSAFS vintage 2025-12-31 ends at 2025-10 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Irregular publication timing: RSAFS vintage 2026-01-31 ends at 2025-11 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Irregular publication timing: RSAFS vintage 2026-02-28 ends at 2025-12 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Irregular publication timing: RSAFS vintage 2026-03-31 ends at 2026-01 (2 months before the origin month).",
      "handling": "Per task rules the target is defined relative to last(V), the last month present in the vintage, not to the calendar; forecasts use only that vintage."
    },
    {
      "issue": "Vintage 2026-04-30 adds two new months at once (catch-up after delayed release); the month 2026-02 is never an h=1 target and its first release is in the same vintage as the following month.",
      "handling": "No adjustment; targets follow last(V)+h. Horizon-1 targets therefore skip one month and h=3 targets skip one month, so the 10 origins are not equally spaced in target time."
    },
    {
      "issue": "Large level revision: current RSAFS levels for 2024-06..2026-07 are 3.8% to 5.6% below their first-release levels (a benchmark/annual revision that first appears in the 2026-09-30 month-end vintage shifted the whole level; the 2026-08 and 2026-09 first releases are already on the new level); YoY growth is revised by up to 2.02 pp.",
      "handling": "Forecasts are evaluated against first-release YoY (computed within one vintage, so level shifts cancel to first order). The current file is used only for estimand (d)."
    },
    {
      "issue": "Real-time vintages differ from each other through routine revisions of the last 2-3 months and through annual revisions; values of a given month differ across origins.",
      "handling": "Each origin uses only its own vintage file; no splicing of vintages."
    },
    {
      "issue": "UMCSENT has empty values for 210 months before 1978 (quarterly survey); PAYEMS vintages also show irregular timing (2025-10-31 ends at 2025-08; 2025-12-31 adds two months at once) due to delayed BLS releases.",
      "handling": "Neither predictor enters the chosen model; files were read, audited and row-counted only (PAYEMS, UMCSENT)."
    }
  ],
  "n_input_rows": {
    "first_release.csv": 28,
    "vintages/RSAFS_vintage_2025-10-31.csv": 404,
    "vintages/PAYEMS_vintage_2025-10-31.csv": 1040,
    "vintages/RSAFS_vintage_2025-11-30.csv": 405,
    "vintages/PAYEMS_vintage_2025-11-30.csv": 1041,
    "vintages/RSAFS_vintage_2025-12-31.csv": 406,
    "vintages/PAYEMS_vintage_2025-12-31.csv": 1043,
    "vintages/RSAFS_vintage_2026-01-31.csv": 407,
    "vintages/PAYEMS_vintage_2026-01-31.csv": 1044,
    "vintages/RSAFS_vintage_2026-02-28.csv": 408,
    "vintages/PAYEMS_vintage_2026-02-28.csv": 1045,
    "vintages/RSAFS_vintage_2026-03-31.csv": 409,
    "vintages/PAYEMS_vintage_2026-03-31.csv": 1046,
    "vintages/RSAFS_vintage_2026-04-30.csv": 411,
    "vintages/PAYEMS_vintage_2026-04-30.csv": 1047,
    "vintages/RSAFS_vintage_2026-05-31.csv": 412,
    "vintages/PAYEMS_vintage_2026-05-31.csv": 1048,
    "vintages/RSAFS_vintage_2026-06-30.csv": 413,
    "vintages/PAYEMS_vintage_2026-06-30.csv": 1049,
    "vintages/RSAFS_vintage_2026-07-31.csv": 414,
    "vintages/PAYEMS_vintage_2026-07-31.csv": 1050,
    "RSAFS_current.csv": 417,
    "UMCSENT.csv": 887
  },
  "n_analysed": 20,
  "random_seed": 20261030,
  "supplementary": {
    "per_horizon": {
      "h1": {
        "hln_stat": 2.3043307587255466,
        "hln_p": 0.04666749201146114,
        "rmse_diff": 0.44657672212259436,
        "boot_ci95": [
          0.29334832793401305,
          0.6721875156424356
        ],
        "wins_model": 8,
        "n": 10
      },
      "h3": {
        "hln_stat": 1.1573524918777764,
        "hln_p": 0.2769204775275833,
        "rmse_diff": 0.2778206411547539,
        "boot_ci95": [
          -0.14490466807245417,
          0.6274230170892946
        ],
        "wins_model": 6,
        "n": 10
      }
    },
    "abs_revision_h1_targets": {
      "2025-09": 0.5502167925401702,
      "2025-10": 0.6641763167214578,
      "2025-11": 0.4389199822781502,
      "2025-12": 0.3286268165544084,
      "2026-01": 0.9756759757612237,
      "2026-02": 0.40995563089387543,
      "2026-04": 0.7481728291014038,
      "2026-05": 0.16533992600871716,
      "2026-06": 0.7440888135516674,
      "2026-07": 0.45702494497780943
    },
    "ar1_note": "AR(1) re-estimated at every origin on that vintage only."
  }
}