assembly-economics/research/ModelMatching.md
tegwick 0ccf4f7cf7 ASSEMBLY-WP-0017-T04 passed: flips judged on anchor weights (6/6 switches in 0.5 y, 0 false flips); reliance on investment documented; T06 AI-specific investment series
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 14913@bnt-lap001
Assistant-Session: add7ef69-b901-4756-9a67-34cf1125d96f
2026-10-13 22:07:26 +02:00

184 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Model matching and regime flipping
**Status:** v0.3 (2026-10-13), ASSEMBLY-WP-0012 and WP-0017. The IMM filter
passes its synthetic acceptance test (§ 4.2) under two caveats: a perfect
model, and an investment indicator that the real data provide only roughly.
Measured flips may be declared only after an AI-specific investment series is
in place (WP-0017-T06).
Code: `simulations/gadm02/matching.py`. Data: `observed_series.json`.
Results: `results/matching.md` (observed), `results/matching_synthetic.md`
(synthetic test).
## 1. Candidates and fit criterion (T01)
Candidates: band anchor B1–B4 × legitimacy loop off/on, each started from
the jurisdiction's calibrated state (`calibrate_data.start_state`). B1 stays
in the set with its misfit recorded, so a return to B1-like growth would be
visible.
For each candidate, the adoption indicator is taken as proportional to K_Ω.
Two values are fitted: a time offset t0 and a scale s, with
`log y = log s + log K_Ω(t0 + τ) + ε` and ε ~ N(0, σ) (σ per series: BTOS
0.03, Eurostat 0.05). The calibrated K_Ω level range at the end of the window
adds a Gaussian level term. All candidates fit the same number of values, so
AIC weights reduce to likelihood weights.
The sentiment slope (Pew 2021 → 2026) is not scored yet: the points precede
the model start (checkpoint 0). It is switched on once there are sentiment
points after checkpoint 0.
## 2. Results on observed data (T02, T04)
| Jurisdiction | Data | Anchor weights | Loop weights | Best |
|---|---|---|---|---|
| US | BTOS, 23 biweekly points 2025–2026 | B1 0.00 · B2 0.38 · B3 0.40 · B4 0.21 | off 0.52 · on 0.48 | B3 / loop off (0.23) |
| EU | Eurostat 2023–2025 | B1 0.00 · B2 0.03 · B3 0.96 · B4 0.01 | off 0.48 · on 0.52 | B3 / loop on (0.50) |
| DE | Eurostat 2023–2025 | B1 0.00 · B2 0.44 · B3 0.56 · B4 0.00 | off 0.49 · on 0.51 | B3 / loop on (0.29) |
Weights after the BR-009 fix (sentiment anchored at its measured level,
WP-0017-T01). Before the fix: US B3 0.44 / B2 0.38 with loop off 1.00; EU B3
0.62; DE B2 0.73.
Readings:
1. **The data rule out B1 everywhere, and B4 for the EU and DE.** The present
is B2–B3, consistent with the calibration (`models/Calibration.md` § 3).
2. **The adoption data cannot yet tell the loop on from off.** Before the
BR-009 fix, every US loop-on candidate failed. The neutral reference made
the measured low sentiment (Σ 0.285) brake adoption from the first day.
With sentiment anchored at its measured level, today's level is part of
the fitted speed, and only *changes* in sentiment act. The loop weights are
then about 0.5 everywhere. The loop becomes identifiable with sentiment
observations after checkpoint 0. `sig_adopt` stays at 1 and is not yet
identified.
3. **No regime is established yet.** No candidate reaches weight 0.75.
Predictions v1 (P-2026-001 … 004) assume growth alignment between B2 and
B3, which the matched weights bracket. No predictions v2 are needed (T04).
## 3. Flipping events (T03)
A **flipping event** is a change of the regime a jurisdiction operates
under, detected when:
1. the best-weighted candidate changes, and
2. the new best holds weight ≥ 0.75 at two consecutive evaluations.
Before a first regime is established (weight ≥ 0.75), changes are not flips.
**Measured flips** come from the regime filter on observed data. Every
quarter, each regime's dynamics run forward from the current state estimate
over the last quarter, the weights are updated with a switching prior (0.02
per quarter), and the estimate advances with the best regime. **Simulated
flips** are regime crossings inside a model run, for example the B4
boom-bust of BR-005. Flips are recorded in `research/FlipRegister.md`.
## 4. Synthetic test (T06): not yet reliable
Truth is simulated from a known candidate. In the switch cases it changes
regime at t = 4. It is observed biweekly with 3 % log-noise, with level
evidence as wide as the real US target. Three seeds per case
(`results/matching_synthetic.md`).
| Indicators | Correct regime at start | False flips (no-switch truth) | Switches detected |
|---|---|---|---|
| adoption only | 3 of 6 | 3 of 6 | 0 of 6 |
| adoption + annual sentiment | 3 of 6 | 3 of 6 | 2 of 6 (delays 0.5 y and 3.25 y) |
The design went through three stages:
1. Free re-fitting of t0 and s per window: any candidate matches any segment.
2. Alignment fixed after the first window: still path-based, so a regime
change starting *now* is not represented.
3. A forward filter from the current state, with evidence accumulated across
quarters.
Each stage reduced false flips. None of them made detection reliable.
**Why:** with adoption alone, neighbouring anchors (B2/B3/B4) differ by less
than measurement noise over a quarter. The loop switch leaves almost no trace
in adoption. In sentiment it is confounded by BR-009: the sentiment
equation reverts toward neutral from the low measured level.
**Requirements before flips may be declared** (ASSEMBLY-WP-0017):
- more discriminating indicators: investment (L5) for self-enhancement,
sentiment at least twice a year for the loop, and concentration channels
(CB1) for domination dynamics;
- per-regime state tracking (one state per regime, not one shared estimate);
- the sentiment equation fixed (BR-009);
- acceptance criteria: at least 5 of 6 regimes correct at the start, no
false flips in 6 no-switch runs, and at least 4 of 6 switches detected
within 1.5 years.
### 4.1 IMM filter with several indicators (WP-0017-T02/T03)
`matching.py --imm` (`results/matching_imm.md`):
- **Filter:** an interacting-multiple-model filter. Each regime keeps its own
state, and before each quarter the regime states are mixed by the
switching probabilities (0.10 per quarter). Each regime then runs forward,
and the weights update with the likelihood of all indicators in the
quarter.
- **Indicators:** adoption (biweekly, log sd 0.03), gross organism
investment (quarterly, log sd 0.05), discovery channel Pd (monthly, sd
0.01) and sentiment (twice a year, sd 0.02).
- **Sentiment:** anchored (BR-009 fix).
| Case | Result |
|---|---|
| anchor correct at the first evaluation (no-switch truth) | 6 of 6 |
| false flips (no-switch truth) | 0 of 6 |
| acceleration B2 → B4 | detected 3 of 3, delay 1.0–1.5 years |
| slowdown B3 → B2 | right direction 3 of 3, but delay 2.5–3.75 years (outside 1.5) |
| loop switch off → on | 0 of 3 |
Acceptance (anchor switches ≥ 4 of 6 within 1.5 years): **not passed** (3 of
6).
Readings:
1. **Accelerations are visible fast. Slowdowns are not.** After a slowdown,
the paths diverge slowly from a shared state. For the real data: telling
B2 from B3 in the US (P-2026-001) will take roughly 2.5–4 years of
observations, not one.
2. **The loop state is not identifiable while sentiment is flat.** With
sentiment anchored, switching the loop on changes nothing visible until
perceived benefit moves. The loop is a conditional regime: it can be
matched only after a shock to perceived benefit.
3. **More indicators remove false flips; they do not speed up slowdown
detection.** With adoption alone the IMM filter had 3 of 6 false flips. With
all four indicators it had none.
Observed series for the real filter: US adoption (BTOS), US investment (L5,
quarterly; operator rough), US discovery channel (StatCounter, monthly), EU
and DE adoption (annual). Sentiment points after checkpoint 0 do not exist
yet.
### 4.2 Flips judged on anchors: acceptance passed (WP-0017-T04)
The slow slowdown detection in § 4.1 came from the flip rule, not from the
evidence. Investment halves immediately when B3 switches to B2 (0.090 →
0.044), but the new anchor's weight split between B2/loop-off and B2/loop-on,
which are indistinguishable while sentiment is flat. Neither reached 0.75.
The rule now judges **anchor flips on anchor weights** (summed over the
loop state) and loop flips on loop weights. False flips count both.
| Indicators | Anchor correct at start | False flips | Anchor switches within 1.5 y | Delays |
|---|---|---|---|---|
| adoption + investment + Pd + sentiment | 6 of 6 | 0 of 6 | **6 of 6** | 0.5 y each (two quarters, the minimum) |
| adoption + Pd + sentiment (no investment) | — | **5 of 6** | 5 of 6 | 0.5–3.0 y |
**Acceptance passed** with all four indicators (`results/matching_imm.md`).
Caveats:
1. **Perfect model.** Truth and candidates share the model structure. Real
data contain misspecification, so real performance is worse.
2. **The investment indicator carries the result.** Without it, false flips
rise to 5 of 6. The real investment series (L5) covers all
information-processing equipment, not AI only. Before measured flips may be
declared, an AI-specific investment series is needed (WP-0017-T06).
3. **The loop state stays undetectable while sentiment is flat.** Loop flips
are therefore not declared from the filter at all until a sentiment shock
gives evidence.