Staleness-switch fusion + per-floor-adapted CSI map — the design the cadence axis pointed to
The cadence session showed the naive always-anchor blend is dominated (BLE wins dense, CSI wins sparse).
Two fixes implemented (fusion_switch.py, runner python, in python-ml/python container) and tested on
the v2 matched-occupancy 3-seed runs (source resplan-12439 → targets 1374, 16157):
1. Per-floor-adapted CSI map. Instead of the cold-transferred source map, calibrate csi_cv -> count
on the target floor using the BLE device-count as the label (the thesis's cheap on-site anchor; no
ground truth) over a 40% calibration window, evaluate on the operational hold-out. Result: no gain —
cold-transfer 1.50 ≈ BLE-adapted 1.51 persons. On these floors the CSI count signal itself is weak
(sparse 3-link layout, occ ≤ 6), so re-fitting the affine cannot rescue it — calibration is not the
bottleneck; the CSI feature is.
2. Staleness-switch fusion. w(t)=exp(-(t - t_last_tick)/tau); est = w*BLE_held + (1-w)*CSI_adapted.
Trust the fresh BLE level; lean on the adapted CSI as the anchor ages. With tau ≈ 16 s the switch
tracks the lower envelope of {BLE-held, CSI} across the full cadence range (1–80 s):
- dense (≤10 s): switch ≈ BLE-held (0.73–1.0), even edging it at 10 s (1.02 vs 1.06);
- mid (20 s): 1.03 vs best 0.96 (within 0.07);
- sparse (40–80 s): switch ≈ CSI floor (1.6) vs held-BLE 2.8 — a clean fallback.
It does not strictly dominate (it cannot beat the better modality at each point) but stays within ~0.1 person of the lower envelope everywhere, and beats both the naive offset-hold blend (1.5–2.2 in the sparse regime) and either modality in the other's regime. So the switch is the robust architecture: a single estimator that degrades gracefully as BLE availability drops, instead of failing in one regime.
What this settles + the ceiling. The thesis fusion claim is now precise and defensible: CSI and BLE are complementary in time (BLE = accurate-but-intermittent absolute; CSI = continuous-but-drifting relative), and a staleness-weighted switch is the mechanism that exploits it — NOT a constant blend (dominated) and NOT a continuity-style physics prior (refuted earlier). The honest ceiling: the switch's sparse-regime floor equals the CSI floor (~1.5), and per-floor BLE-calibration does not lower it — so the next lever is CSI quality (more links / higher density / a stronger feature), not calibration.
Caveats: in-silico; BLE device-counter modelled (p_detect+Gaussian); 3 seeds, 2 target floors, low crowd sizes; tau hand-tuned (16 s) not learned; the switch floor is set by a weak CSI feature. Next: a learned/adaptive tau, and a denser-CSI or higher-occupancy regime to lift the CSI floor and widen the switch's advantage.