From cea9a21f6b731908077b51722d400487d6a6b379 Mon Sep 17 00:00:00 2001
From: Vahid Ahmadi
- Next due: 2026Q2 (UK real GDP, y/y), which lands when the ONS publishes it.
+ Next due: 2026Q2 (UK real GDP, y/y, unemployment), which lands when the ONS publishes it.
@@ -153,6 +153,16 @@
diff --git a/forecasts/outturns.json b/forecasts/outturns.json
index d5f4f80..ec68681 100644
--- a/forecasts/outturns.json
+++ b/forecasts/outturns.json
@@ -23,6 +23,12 @@
"publisher": "ONS",
"dataset": "D7G7 (CPI 12-month rate), quarterly average",
"typical_release_lag": "~3 weeks after month end"
+ },
+ "unemployment": {
+ "series": "UK unemployment rate (aged 16+, SA), level",
+ "publisher": "ONS",
+ "dataset": "MGSX, quarterly",
+ "typical_release_lag": "~7 weeks after quarter end (LFS)"
}
},
"observations": [
@@ -35,4 +41,4 @@
"release_updated": "2026-07-21T23:00:00.000Z"
}
]
-}
+}
\ No newline at end of file
diff --git a/forecasts/rounds/2026-07-28/okun-unemployment.json b/forecasts/rounds/2026-07-28/okun-unemployment.json
new file mode 100644
index 0000000..b12a162
--- /dev/null
+++ b/forecasts/rounds/2026-07-28/okun-unemployment.json
@@ -0,0 +1,72 @@
+{
+ "schema_version": 1,
+ "round_id": "2026-07-28",
+ "archived_utc": "2026-07-28T08:27:48Z",
+ "model": {
+ "name": "okun-unemployment",
+ "description": "Okun's-law satellite: deterministic mapping of the boe-svar UK GDP growth forecast to the ONS unemployment rate (MGSX). Fit du_t = alpha + beta*g_t + gamma*du_{t-1} by OLS on 1992Q1-2025Q1 with 2020Q1-2021Q2 dummied out (furlough decoupled unemployment from GDP): alpha=0.0611, beta=-0.0474, gamma=0.1871, sigma=0.172pp, n=123, R2=0.368.",
+ "source_pipeline": "PolicyEngine/boe-var-model src/boe_var/okun.py at main (PR #8, merge 302f7ec)",
+ "generated": "2026-07-28"
+ },
+ "information_set": {
+ "data_edge": "2026Q1",
+ "forecast_start": "2026Q2",
+ "first_period": "2026Q2",
+ "last_period": "2027Q1",
+ "gdp_input": "archived round forecasts/rounds/2026-07-21/boe-svar.json (data edge 2026Q1)",
+ "unemployment_input": "ONS MGSX through 2026Q1 (u=5.0, du=-0.2), vintage 2026-07-26"
+ },
+ "units": "percent, unemployment rate level",
+ "variables": [
+ "unemployment"
+ ],
+ "caveats": [
+ "Horizon capped at 4 quarters: the rolling-origin validation (boe-var-model results/okun_validation.json) shows the end-to-end SVAR->Okun forecast beats a random walk at horizons 1-4 ex-COVID (RMSE ratios 0.82-0.99) and is clearly worse beyond 4 quarters.",
+ "The improvement over no-change is not statistically significant at 73 overlapping origins (Diebold-Mariano p >= 0.14).",
+ "Bands carry GDP-forecast uncertainty only, mapped through the deterministic Okun equation; Okun residual uncertainty (sigma 0.17pp per quarter) is NOT sampled, so the stated bands understate total uncertainty."
+ ],
+ "benchmarks": {
+ "random_walk": null,
+ "drift": null,
+ "ar1": null,
+ "official": null
+ },
+ "forecast": {
+ "2026Q2": {
+ "unemployment": {
+ "median": 4.9714,
+ "lo68": 4.9447,
+ "hi68": 4.9976,
+ "lo90": 4.9304,
+ "hi90": 5.0146
+ }
+ },
+ "2026Q3": {
+ "unemployment": {
+ "median": 4.9626,
+ "lo68": 4.8897,
+ "hi68": 5.0333,
+ "lo90": 4.8507,
+ "hi90": 5.0828
+ }
+ },
+ "2026Q4": {
+ "unemployment": {
+ "median": 4.9405,
+ "lo68": 4.8137,
+ "hi68": 5.0744,
+ "lo90": 4.7354,
+ "hi90": 5.1609
+ }
+ },
+ "2027Q1": {
+ "unemployment": {
+ "median": 4.9332,
+ "lo68": 4.7351,
+ "hi68": 5.1395,
+ "lo90": 4.611,
+ "hi90": 5.2693
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/forecasts/scorecard.json b/forecasts/scorecard.json
index 9e29954..b67efc4 100644
--- a/forecasts/scorecard.json
+++ b/forecasts/scorecard.json
@@ -1,12 +1,13 @@
{
"_comment": "Generated by forecasts/score.py \u2014 do not edit by hand.",
- "rounds": 1,
+ "rounds": 2,
"periods_scored": 1,
"next_period_to_score": "2026Q2",
"pending_detail": {
"period": "2026Q2",
"variables": [
- "gdp"
+ "gdp",
+ "unemployment"
]
},
"status": "1 forecast period(s) scored",
@@ -41,6 +42,17 @@
"coverage_90": 1.0
}
}
+ },
+ {
+ "round_id": "2026-07-28",
+ "model": "okun-unemployment",
+ "data_edge": "2026Q1",
+ "archived_utc": "2026-07-28T08:27:48Z",
+ "path": "forecasts/rounds/2026-07-28/okun-unemployment.json",
+ "periods_forecast": 4,
+ "periods_scored": 0,
+ "entries": [],
+ "by_variable": {}
}
]
}
diff --git a/index.html b/index.html
index 8257aed..efe11ce 100644
--- a/index.html
+++ b/index.html
@@ -100,7 +100,7 @@ One round in, one result.
What was claimed, and when.
Download artifact · 2026-07-21/boe-svar.json →
Open on GitHub with commit history →
+
+
+ Download artifact · 2026-07-28/okun-unemployment.json →
+ Open on GitHub with commit history →
+ Latest outturns beside the model's near-term view.
Real GDP growth, y/y 0.9% 2026Q1 1.1% 2026Q2 · 68% range 0.6%–1.7%
- CPI inflation, y/y 2.8% 2026Q2 2.7% 2026Q3 · 68% range 1.9%–3.5%
+ Unemployment rate 5.0% 2026Q1 not forecast by the suite yet
diff --git a/validation/index.html b/validation/index.html
index 8311f4e..9f4d1b0 100644
--- a/validation/index.html
+++ b/validation/index.html
@@ -638,6 +638,24 @@ Unemployment rate 5.0% 2026Q1 5.0% 2026Q2 · 68% range 4.9%–5.0% · Okun satellite Against a Bank of England paper, and against outturns.
inflation, and the single frozen-edge result must not be read as broad
GDP forecast superiority.
+ Unemployment satellite. The unemployment rate is not + one of the eight VAR variables; the published unemployment outlook is + an Okun's-law satellite — a small regression of the quarterly change + in the ONS unemployment rate on year-on-year GDP growth (fit + 1992Q1–2025Q1 with the furlough quarters 2020Q1–2021Q2 + dummied out, since they decouple unemployment from GDP and attenuate + the coefficient about threefold). In a 73-origin rolling test fed by + the VAR's own GDP forecasts, it beats a no-change benchmark at + horizons 1–4 excluding furlough targets (relative RMSE + 0.82–0.99) and is clearly worse beyond four quarters, so the + published path is capped at four quarters. The improvement is not + statistically significant at 73 overlapping origins, and the bands + carry GDP-forecast uncertainty only. Specification, code, and the + full skill table: + okun_validation.json + in the model repository. +