Synthetic identifiability illustration: per-cell fit ≠ parameter recovery¶
Date: 2026-06-27 · Status: verified (multi-seed) · Backs: #116 (manuscript),
19 (per-cell-vs-global ablation), the Colab demo (notebooks/demo_colab.ipynb, PR #157).¶
A small, in-memory synthetic experiment (the Colab demo's engine) that demonstrates — not asserts — three identifiability facts the full study relies on. Synthetic, so it shows the mechanism; the real-data version is the cluster ablation (#19).
Setup¶
8×16 grid, one SST gradient input channel. Ground truth: alpfe and Smallgrow vary
smoothly with SST; the other four Carroll-6 params fixed at Carroll's optima. Forward-
integrate the differentiable carroll6_step box (150 steps) → a steady-state Ps+Pl
biomass field = the single observable. Recover by gradient descent through the box.
Loss = z-scored pattern MSE (matching the real pipeline) unless noted.
Findings (all verified)¶
1. Capacity — per-cell fits structure a global scalar cannot. A per-cell DINN (1×1 convs) reaches loss ~4e-4–7e-3; a single global Carroll-6 vector is pinned at the variance floor 0.99219 from epoch 0 (a flat field has no pattern → no gradient under a z-scored pattern loss). Loss ratio 130–2500×. Robust (structural + every seed).
2. Fitting ≠ identifying (equifinality). The per-cell DINN drives loss → ~0 but does
not recover the true alpfe field. Across seeds the recovered alpfe has high |r|
but an arbitrary sign:
| loss | alpfe signed-r across seeds | |r| mean | sign + |
|---|---|---|---|
| pattern (n=6) | +0.62, −0.99, +1.0, +1.0, −0.99, −0.86 | 0.91 | 3/6 |
| absolute (n=6) | +0.97, −0.44, +0.97, +0.97, −0.99, +0.81 | 0.86 | 4/6 |
Different parameter fields fit the same observable equally well → the parameter's
direction is under-determined. (The demo run reproduces this live: [+,−,+,+,−], |r| 0.92.)
3. Identifiability is parameter-specific. Under the same fits, Smallgrow (a direct,
monotonic effect on biomass) recovers far more consistently than alpfe (indirect, via
iron→growth, and compensable). Under absolute loss Smallgrow signed-r = +0.97, +0.95,
+0.94, +0.98, +0.85, +0.92 (all positive) while alpfe flips. Which parameters an
observable can constrain is not all-or-nothing.
Why it matters for the project¶
- It is the project's central claim, shown in miniature: surrogate-to-model identifiability is per-parameter, and low loss is not evidence of recovery.
- It motivates the real design: distinct absolute anchors per parameter (GEOTRACES
dissolved iron for the iron pair; Daniels/MODIS calcite for
R_PICPOC) rather than pattern-matching one field; and the homogenization fact (real box tracer CV → ~1e-15) means the box's own spatial pattern carries little information, so absolute anchors are load-bearing. - Scope / honesty: here the truth varies in space by construction, which is what
lets the per-cell class help. ECCO-Darwin's Carroll-6 params were calibrated as global
constants, so whether the per-cell predictor is load-bearing for the real problem is
the open question the full per-cell-vs-global ablation (#19,
GlobalScalarNet) tests on real data. This synthetic result shows the mechanism, not the real-case verdict.
Reproduce¶
python scripts/build_demo_notebook.py then run notebooks/demo_colab.ipynb (cells 6–8
are Lessons 1–3). Multi-seed signed-r verified independently at n=6 (CPU, 300 epochs).