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
155 lines
7.3 KiB
Markdown
155 lines
7.3 KiB
Markdown
# Model matching and regime flipping
|
||
|
||
**Status:** v0.2 (2026-10-13), ASSEMBLY-WP-0012 and WP-0017. Matching on
|
||
observed data works. The IMM filter (§ 4.1) detects accelerations reliably,
|
||
but detects slowdowns only after 2.5–3.75 years. The acceptance test is not
|
||
yet passed, so no measured flip may be declared yet.
|
||
|
||
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.
|