{
  "task_id": "T1-forecast",
  "model_name": "rw_drift_yoy",
  "model_description": "Base-effect-aware random walk with drift on log levels. At origin V, using only the RSAFS vintage dated V: mu = mean of the last 36 monthly log changes of the level ending at last(V); the level forecast is ln L_{last+h} = ln L_last + h*mu, and the YoY forecast is 100*(ln L_{last+h} - ln L_{T-12}), where L_{T-12} (the base month, already published) is taken from vintage V. The 36-month window and the specification were fixed before any forecast error was computed; no parameter is tuned on the evaluation sample. PAYEMS and UMCSENT are not used, so their availability alignment is not an issue; RSAFS_current and first_release are never used to forecast.",
  "n_origins": 10,
  "first_origin": "2025-10-31",
  "last_origin": "2026-07-31",
  "rmse_naive_h1": 0.9968743518549719,
  "mae_naive_h1": 0.8487221879899998,
  "rmse_naive_h3": 1.420040373740657,
  "mae_naive_h3": 1.2004486337699998,
  "rmse_snaive_h1": 1.6745428991300964,
  "mae_snaive_h1": 1.30666987625,
  "rmse_snaive_h3": 1.3160788989366212,
  "mae_snaive_h3": 1.06586869147,
  "rmse_ar1_h1": 0.9405244111134986,
  "mae_ar1_h1": 0.7976510573200001,
  "rmse_ar1_h3": 1.1871178147503472,
  "mae_ar1_h3": 0.9526895961500002,
  "rmse_model_h1": 0.5524251036176803,
  "mae_model_h1": 0.49702333686000005,
  "rmse_model_h3": 1.0538489260007893,
  "mae_model_h3": 0.7471097183499998,
  "rel_improvement_rmse_h1": 0.44584279594541254,
  "dm_stat_h1": 2.3021200358532323,
  "dm_pvalue_h1": 0.021328403816257557,
  "conclusion_code_h1": "model_better_significant",
  "rel_improvement_rmse_h3": 0.25787396929796413,
  "dm_stat_h3": 1.864485101676419,
  "dm_pvalue_h3": 0.062253611839883316,
  "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: at the six origins 2025-10-31 ... 2026-03-31 the last published month is two months before the origin month (e.g. last(2025-10-31) = 2025-08) instead of the usual one; the 2026-04-30 vintage adds two months at once (2026-02 and 2026-03) and the last four origins have the usual one-month delay.",
      "handling": "Targets defined as last(V)+h per TASK.md, not by calendar. Consequently month 2026-03 is never an h=1 target (h=1 targets: 2026-02 from origin 2026-03-31, then 2026-04 from origin 2026-04-30), and for the first six origins the h=1 target month lies entirely before the origin date (a 'nowcast/backcast' of an unpublished month). Per-origin last(V) and delay are in real_time_design."
    },
    {
      "issue": "PAYEMS vintage 2025-10-31 ends in 2025-08 and vintage 2025-12-31 jumps to 2025-11 (missing employment releases); PAYEMS vintage 2026-02-28 contains a benchmark revision (level about 1 million lower).",
      "handling": "PAYEMS is not used by the model; noted for completeness."
    },
    {
      "issue": "UMCSENT has 210 empty values, all before 1978 (survey not monthly).",
      "handling": "UMCSENT not used by the model; no imputation."
    },
    {
      "issue": "RSAFS_current reflects a large benchmark revision (levels changed for 138 months since 2015-01, up to about 4.6%) relative to the 2026-07-31 vintage; first_release.csv levels for 2026-08 and 2026-09 come from post-benchmark vintages while earlier target months come from pre-benchmark vintages.",
      "handling": "Forecasts never use RSAFS_current; actuals are taken as given from first_release.csv (YoY is a within-vintage ratio, so level shifts largely cancel); the revision estimand (d) reflects these benchmark changes."
    },
    {
      "issue": "Monthly vintages revise past levels (up to 0.4% between consecutive vintages in the evaluation period).",
      "handling": "Each forecast uses only its own vintage; actual is the first release, so errors include revision noise in the base month."
    }
  ],
  "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,
  "real_time_design": [
    {
      "origin": "2025-10-31",
      "last_month": "2025-08",
      "delay_months": 2,
      "ar1_c": 0.7245195130966369,
      "ar1_phi": 0.8398849523075356,
      "drift_pct_per_month": 0.2726829270850958
    },
    {
      "origin": "2025-11-30",
      "last_month": "2025-09",
      "delay_months": 2,
      "ar1_c": 0.7230146850375044,
      "ar1_phi": 0.8398593258796581,
      "drift_pct_per_month": 0.2845906397826731
    },
    {
      "origin": "2025-12-31",
      "last_month": "2025-10",
      "delay_months": 2,
      "ar1_c": 0.7207145937397748,
      "ar1_phi": 0.8398988453218994,
      "drift_pct_per_month": 0.2537575944004525
    },
    {
      "origin": "2026-01-31",
      "last_month": "2025-11",
      "delay_months": 2,
      "ar1_c": 0.7197147078017161,
      "ar1_phi": 0.839929613490428,
      "drift_pct_per_month": 0.3046705275529021
    },
    {
      "origin": "2026-02-28",
      "last_month": "2025-12",
      "delay_months": 2,
      "ar1_c": 0.7161329757524207,
      "ar1_phi": 0.840103885059219,
      "drift_pct_per_month": 0.33373500370165543
    },
    {
      "origin": "2026-03-31",
      "last_month": "2026-01",
      "delay_months": 2,
      "ar1_c": 0.7173993115367638,
      "ar1_phi": 0.8400215083855623,
      "drift_pct_per_month": 0.20948125443051147
    },
    {
      "origin": "2026-04-30",
      "last_month": "2026-03",
      "delay_months": 1,
      "ar1_c": 0.7192001736723118,
      "ar1_phi": 0.8399036982121751,
      "drift_pct_per_month": 0.34146193100709826
    },
    {
      "origin": "2026-05-31",
      "last_month": "2026-04",
      "delay_months": 1,
      "ar1_c": 0.7216117313802095,
      "ar1_phi": 0.8398320190588064,
      "drift_pct_per_month": 0.33739105093039984
    },
    {
      "origin": "2026-06-30",
      "last_month": "2026-05",
      "delay_months": 1,
      "ar1_c": 0.7265261438714329,
      "ar1_phi": 0.8398016339053244,
      "drift_pct_per_month": 0.3474913588867226
    },
    {
      "origin": "2026-07-31",
      "last_month": "2026-06",
      "delay_months": 1,
      "ar1_c": 0.7268024118912031,
      "ar1_phi": 0.839871473088339,
      "drift_pct_per_month": 0.3518484635199215
    }
  ],
  "dm_details": {
    "h1": {
      "mean_loss_diff": 0.6885849782792655,
      "lrv": 0.8946623454191901,
      "n_origins_model_lower_sq_error": 8,
      "sign_test_pvalue_two_sided": 0.109375
    },
    "h3": {
      "mean_loss_diff": 0.9059171042204879,
      "lrv": 2.3607993886369596,
      "n_origins_model_lower_sq_error": 8,
      "sign_test_pvalue_two_sided": 0.109375
    }
  },
  "abs_revision_h1_by_target": {
    "2025-09": 0.5502167925401169,
    "2025-10": 0.6641763167215546,
    "2025-11": 0.43891998227811113,
    "2025-12": 0.32862681655441595,
    "2026-01": 0.9756759757612712,
    "2026-02": 0.4099556308938235,
    "2026-04": 0.7481728291013168,
    "2026-05": 0.16533992600872516,
    "2026-06": 0.7440888135517616,
    "2026-07": 0.4570249449779187
  }
}