{ "cells": [ { "cell_type": "markdown", "id": "779873ac", "metadata": {}, "source": [ "# `gls` — Generalized Least Squares OD estimation (covers `prior`)\n", "\n", "**What.** `gls` (T2, ADR-002) recovers an OD demand matrix from a set of\n", "observed link counts by minimizing a weighted sum of the prior misfit and the\n", "count misfit: `min_g (g-g_pr)'W^-1(g-g_pr) + (p g - c)'V^-1(p g - c)`, where\n", "`p` is the (MSA-averaged) route-choice proportion matrix. It is the classical\n", "anchor every other T2 estimator in this benchmark is compared against. This\n", "notebook also covers `prior` — the stale-prior baseline `gls` is scored\n", "against is not a strawman but a first-class registered estimator\n", "(`PriorBaseline`, which emits the prior unchanged).\n", "\n", "**Why it is in the benchmark.** OD estimation from traffic counts is\n", "underdetermined (Willumsen 1981, Cascetta 1984): `gls` is the field's\n", "best-known regularized solution, and it needs its own MSA-proportion\n", "observation model (`LinkCounts`) and its own T2 held-out certification\n", "contract, both new relative to T1/day-to-day. See the\n", "[model compendium](../../docs/MODELS.md) (Cascetta 1984) and\n", "[docs/design/adr-002-t2-estimation-certificate.md](../../docs/design/adr-002-t2-estimation-certificate.md)\n", "(P1).\n", "\n", "**Scope.** This notebook certifies the scalar closed form, then the public\n", "`run_estimation_experiment` API end-to-end on Braess, comparing `gls` against\n", "the `prior` baseline it must beat, and finally the harder global-basin\n", "Braess `D=6` recovery.\n", "\n", "**Canon.** `[cascetta1984estimation]`, [docs/REFERENCES.md](../../docs/REFERENCES.md) / [docs/references.bib](../../docs/references.bib)." ] }, { "cell_type": "markdown", "id": "178eed18", "metadata": {}, "source": [ "## How this notebook is graded\n", "\n", "**A notebook never claims a number it does not compute in that cell.** Every\n", "scored quantity below is recomputed live by the P1 `ODCertifier` from the\n", "emitted OD matrix against the harness's OWN pinned BFW assignment of the\n", "truth — never from the estimator's self-report\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "200b803c", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T17:05:11.372298Z", "iopub.status.busy": "2026-07-21T17:05:11.372094Z", "iopub.status.idle": "2026-07-21T17:05:13.724244Z", "shell.execute_reply": "2026-07-21T17:05:13.723246Z" } }, "outputs": [], "source": [ "# Setup. `gls` is a core estimator: a plain `pip install -e .` suffices — no\n", "# optional extra, so no guard cell. The inline backend is Agg-based (headless\n", "# CI renders into the notebook); NEVER matplotlib.use(\"Agg\") in-kernel — it\n", "# silently suppresses inline figure capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " Budget,\n", " GLSEstimator,\n", " ODCertifier,\n", " PriorBaseline,\n", " RngBundle,\n", " braess_scenario,\n", " run_estimation_experiment,\n", " two_route_scenario,\n", " viz,\n", ")\n", "from tabench.estimation import ODTrace, gls_solve\n", "from tabench.estimation.base import EstimationTask\n", "from tabench.core.rng import SOURCE_OBSERVATION\n", "from tabench.observe.levels import LinkCounts\n", "from tabench import Demand\n", "from tabench.models.frank_wolfe import BiconjugateFrankWolfeModel\n", "from tabench import Trace" ] }, { "cell_type": "markdown", "id": "1fefddb5", "metadata": {}, "source": [ "## The closed form: a scalar anchor\n", "\n", "Single pair, single sensor, `W=V=1`: the GLS solve reduces to\n", "`g* = (g_pr + p*c) / (1 + p^2)` — a weighted average of the prior and the\n", "count-implied demand `c/p`. Recomputed here from `gls_solve` directly, no\n", "trusted digits." ] }, { "cell_type": "code", "execution_count": 2, "id": "348f3713", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T17:05:13.728577Z", "iopub.status.busy": "2026-07-21T17:05:13.728004Z", "iopub.status.idle": "2026-07-21T17:05:13.735574Z", "shell.execute_reply": "2026-07-21T17:05:13.734780Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gls_solve : 3.280899\n", "closed form : 3.280899\n" ] } ], "source": [ "p, c, g_pr = 0.625, 2.5, 3.0\n", "expected = (g_pr + p * c) / (1.0 + p * p)\n", "got = gls_solve(\n", " np.array([[p]]), np.array([c]), np.array([g_pr]), np.array([1.0]), np.array([1.0])\n", ")\n", "print(f\"gls_solve : {got[0]:.6f}\")\n", "print(f\"closed form : {expected:.6f}\")\n", "assert np.isclose(got[0], expected, atol=1e-10)" ] }, { "cell_type": "markdown", "id": "15084780", "metadata": {}, "source": [ "## An end-to-end run: Braess, four sensors + one held out, `gls` vs `prior`\n", "\n", "`braess_scenario(6.0)` is the D=6 Braess network (link order `1->3, 1->4,\n", "3->4, 3->2, 4->2`), frozen and content-hashed (P2). We run BOTH registered\n", "estimators through the public `run_estimation_experiment` API with a\n", "noiseless, exact-prior card: four links are observed and the middle link\n", "`3->4` is reserved as the held-out set — `heldout_count_rmse` is THE ranking\n", "column, so the design must reserve one (an empty held-out set is rejected on\n", "both T2 tracks, ADR-002/ADR-023). The `prior` baseline just echoes its\n", "(exact) input, so `gls` must do at least as well, and — under a noiseless\n", "card where the prior IS the truth — essentially exactly." ] }, { "cell_type": "code", "execution_count": 3, "id": "ba25adec", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T17:05:13.739266Z", "iopub.status.busy": "2026-07-21T17:05:13.738576Z", "iopub.status.idle": "2026-07-21T17:05:13.906746Z", "shell.execute_reply": "2026-07-21T17:05:13.905942Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : braess\n", "content hash : cf00f411cdccec88…\n", "prior : od_feasible=1 od_rmse=0.0000\n", "gls : od_feasible=1 od_rmse=0.0007\n" ] } ], "source": [ "sc = braess_scenario(6.0)\n", "print(f\"scenario : {sc.name}\")\n", "print(f\"content hash : {sc.content_hash()[:16]}…\")\n", "\n", "cfg = {\n", " \"sensors\": {\"kind\": \"explicit\", \"links\": [0, 1, 3, 4]},\n", " \"heldout\": {\"kind\": \"explicit\", \"links\": [2]},\n", " \"n_periods\": 1,\n", " \"noise\": \"none\",\n", " \"prior\": {\"kind\": \"stale\", \"cv\": 0.0},\n", " \"identifiability_k_inner\": 30,\n", "}\n", "result = run_estimation_experiment(\n", " sc, [PriorBaseline(), GLSEstimator(k_inner=40, outer_iters=8)],\n", " Budget(sp_calls=2000), seed=0, macroreps=1, estimation=cfg,\n", ")\n", "required = {\n", " \"task_hash\", \"od_feasible\", \"obs_count_rmse\", \"oracle_obs_count_rmse\",\n", " \"heldout_count_rmse\", \"od_rmse\", \"od_nrmse\", \"total_demand_error\",\n", " \"od_identifiable\",\n", "}\n", "assert required <= set(result.rows[0])\n", "assert result.manifest[\"identifiability\"][\"linear_identifiable\"] is True\n", "\n", "prior_row = [r for r in result.rows if r[\"estimator\"] == \"prior\"][-1]\n", "gls_row = [r for r in result.rows if r[\"estimator\"] == \"gls\"][-1]\n", "print(f\"prior : od_feasible={prior_row['od_feasible']:.0f} od_rmse={prior_row['od_rmse']:.4f}\")\n", "print(f\"gls : od_feasible={gls_row['od_feasible']:.0f} od_rmse={gls_row['od_rmse']:.4f}\")\n", "assert prior_row[\"od_feasible\"] == 1.0 and gls_row[\"od_feasible\"] == 1.0\n", "# cv=0 prior IS the truth: prior is exact, gls (an iterative fixed point\n", "# around the same truth) stays within a small inner-assignment slack.\n", "assert prior_row[\"od_rmse\"] < 1e-9\n", "assert gls_row[\"od_rmse\"] < 1e-2" ] }, { "cell_type": "markdown", "id": "a7c04512", "metadata": {}, "source": [ "## The harder anchor: global-basin recovery from an off prior\n", "\n", "From an off prior `D=5.5` (inside `gls`'s global basin — see\n", "[`spiess`](02-spiess.ipynb) for the D=4 SPURIOUS-basin caveat this network\n", "also has), full noiseless sensors let `gls` recover Braess's true `D=6`\n", "demand to a tight tolerance. Built by hand here (`EstimationTask` +\n", "`LinkCounts`, the same primitives `run_estimation_experiment` uses\n", "internally) so the certificate is scored against an explicit oracle." ] }, { "cell_type": "code", "execution_count": 4, "id": "2db556c8", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T17:05:13.909916Z", "iopub.status.busy": "2026-07-21T17:05:13.909691Z", "iopub.status.idle": "2026-07-21T17:05:16.810145Z", "shell.execute_reply": "2026-07-21T17:05:16.808537Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recovered D : 6.0000 (truth: 6.0, off prior: 5.5)\n", "certified od_rmse : 1.2068e-05\n" ] } ], "source": [ "BRAESS_TRUTH = np.array([4.0, 2.0, 2.0, 2.0, 4.0]) # UE(D=6), recomputed below\n", "\n", "trace_pin = Trace()\n", "BiconjugateFrankWolfeModel().solve(\n", " sc, Budget(iterations=5000, target_relative_gap=1e-10), RngBundle(0), trace_pin\n", ")\n", "oracle_flows = trace_pin.final.link_flows\n", "np.testing.assert_allclose(oracle_flows, BRAESS_TRUTH, atol=1e-6)\n", "\n", "prior_matrix = np.zeros((2, 2))\n", "prior_matrix[0, 1] = 5.5\n", "ds = LinkCounts(np.arange(5), 1, \"none\").observe(\n", " sc, oracle_flows, RngBundle(0).generator(SOURCE_OBSERVATION)\n", ")\n", "task = EstimationTask(\n", " name=\"t\", network=sc.network, prior=Demand(prior_matrix), dataset=ds,\n", " identifiability={}, scenario_hash=sc.content_hash(), seed=0,\n", ")\n", "trace = ODTrace()\n", "GLSEstimator(k_inner=120, outer_iters=80, cv_prior=50.0).estimate(\n", " task, Budget(sp_calls=10**9, iterations=200), RngBundle(0), trace\n", ")\n", "recovered = trace.final.od_matrix[0, 1]\n", "print(f\"recovered D : {recovered:.4f} (truth: 6.0, off prior: 5.5)\")\n", "assert abs(recovered - 6.0) < 1e-3\n", "\n", "certifier = ODCertifier(\n", " sc, np.arange(5), np.array([], dtype=np.int64),\n", " oracle_flows[None, :], oracle_flows[[]][None, :], oracle_flows,\n", " {\"linear_identifiable\": True},\n", ")\n", "metrics = certifier.certify(trace.final.od_matrix)\n", "print(f\"certified od_rmse : {metrics['od_rmse']:.4e}\")\n", "assert metrics[\"od_feasible\"] == 1.0\n", "assert metrics[\"od_rmse\"] < 1e-3" ] }, { "cell_type": "markdown", "id": "c2e1b430", "metadata": {}, "source": [ "## Visualize\n", "\n", "`tabench.viz` draws the road `Network`'s link flows: the certified `gls`\n", "recovery vs the off prior, both re-derived from the OD matrices above by\n", "re-running the pinned assignment (the same one the certifier scores against)." ] }, { "cell_type": "code", "execution_count": 5, "id": "18e6dd48", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T17:05:16.814327Z", "iopub.status.busy": "2026-07-21T17:05:16.814008Z", "iopub.status.idle": "2026-07-21T17:05:17.240459Z", "shell.execute_reply": "2026-07-21T17:05:17.239594Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prior_flows = trace_pin.final.link_flows # truth flows for reference\n", "prior_trace = Trace()\n", "from tabench import Scenario\n", "BiconjugateFrankWolfeModel().solve(\n", " Scenario(\"prior\", sc.network, Demand(prior_matrix), family=sc.family),\n", " Budget(iterations=5000, target_relative_gap=1e-10), RngBundle(0), prior_trace,\n", ")\n", "display(viz.plot_network_flows(sc.network, trace_pin.final.link_flows))\n", "display(viz.plot_flow_scatter(\n", " (\"truth (D=6)\", trace_pin.final.link_flows),\n", " {\"off prior (D=5.5)\": prior_trace.final.link_flows},\n", "))" ] }, { "cell_type": "markdown", "id": "c0e137ff", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** Every `od_rmse`/`od_feasible` above came\n", " from `ODCertifier`'s own re-assignment of the emitted OD matrix, never from\n", " `gls`'s internal proportions.\n", "- **`prior` is a first-class competitor, not a strawman.** It is the\n", " baseline every T2 estimator on this benchmark must beat; this notebook\n", " certifies it directly (`ADR-002` `covers: [prior]`).\n", "- **Where next.** the entropy-balancing alternative\n", " [`vzw-entropy`](03-vzw-entropy.ipynb); the spurious-local-minimum caveat on\n", " this SAME network in [`spiess`](02-spiess.ipynb); the spatial-covariance\n", " cousin [`od-kalman`](06-od-kalman.ipynb); the lineage in the\n", " [model compendium](../../docs/MODELS.md)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" }, "tabench": { "covers": [ "prior" ], "requires_extra": null, "track": "estimation", "unit": "gls" } }, "nbformat": 4, "nbformat_minor": 5 }