Executive summary
A Wi-Fi crowd-counting model does not stay accurate: move the furniture, and the radio "fingerprint" it learned drifts until the count is wrong. This experiment asks whether a cheap, always-on signal can tell you when the model has actually broken — so you recalibrate on demand instead of on a fixed timer. The signal we test is cross-modal disagreement (xmodal): the gap between what the Wi-Fi channel thinks the occupancy is and what a second, independently-calibrated BLE (Bluetooth) channel thinks. When the two physically-different radios start disagreeing, something real has changed.
The headline, stated honestly: the disagreement signal detects prediction-relevant drift very well (Spearman ρ = 0.93, 95% CI [0.72, 1.0]) and stays quiet when the room merely changes without breaking the model. But acting on it does not make the count more accurate than a fixed recalibration schedule — the payoff is budget: it reaches the same accuracy while recalibrating about four times less often across an estate where most zones never drift. Detectability is confirmed in-silico; the "beats the clock on accuracy" claim is refuted. All of this is simulated — a real Wi-Fi/BLE capture (IP-106) is the standing gate before any deployment claim.
The problem, in plain words
Imagine you calibrate a bathroom scale while standing on a soft carpet. Later someone swaps the carpet for tile. The scale now reads wrong — not because your weight changed, but because its environment did. Wi-Fi crowd counting has the same disease: the model learns "this pattern of signal strength ≈ 5 people," but the pattern depends on where the walls, furniture, and reflective surfaces are. Rearrange the room and the model silently drifts. This is a textbook case of concept drift — the input–output relationship changing over time — which is a whole research field of its own (gama2014 ↗).
The naive fix is to recalibrate on a timer ("every week, re-measure with a known number of people"). That works, but it is expensive and wasteful: most rooms are stable most of the time, so you pay for recalibrations you did not need, and you can still be caught out between timer ticks. The smarter idea — an event-driven trigger — only recalibrates when a monitor says the model has actually broken. The hard part is building that monitor without ground truth: at runtime you do not know the real headcount, so you cannot directly measure your own error.
What we are trying to prove
- Hypothesis (falsifiable): the cross-modal disagreement
xmodal— computable online with no ground truth — ranks time-periods by true occupancy error (high Spearman ρ) and stays below threshold on periods where the environment shifted but the model did not break. If it fires on those error-irrelevant shifts, it is a naive change-detector, not a drift-relevant trigger, and the idea fails. - Second, sceptical hypothesis: acting on the trigger lowers count error versus a fixed cadence at the same recalibration budget. We expected this to be the weak claim, and it is — see results.
- What a null means: if
xmodaldid not out-track single-modality detectors, it would mean the BLE channel adds nothing as a drift reference and the fusion premise weakens. It does out-track them — the value of BLE here is not as a people-counter (it is weak at that too) but as a second, differently-drifting physical witness.
How the experiment works (plain method)
- Build a controlled drift corpus (csi-layout-drift): a synthetic corridor is ray-traced under ordered furniture displacements, with a deliberate split — a
losinarm where displacement genuinely grows count error, and alosperparm where the signal amplitude shifts ~27 dB but the count error stays flat (environment change without model breakage). Co-registered BLE is solved from the same scene. - Compute four candidate drift monitors online:
csi-ks(Wi-Fi self-monitoring),ble-ks(BLE channel shift),xmodal(the cross-modal disagreement), and an idealisedoracle-counterceiling. - Detectability test: does each monitor's value rank-correlate with the true occupancy error, and does it stay quiet on the error-irrelevant arm?
- Policy test: simulate deployment — over the drifted states, compare "never recalibrate" / "fixed cadence" / "trigger[xmodal]" / "oracle-error" on both error and recalibration spend, at matched budget.
What we've found so far (honest, across campaigns)
| Monitor | Spearman ρ vs true error | False-fires on error-irrelevant shift |
|---|---|---|
csi-ks (Wi-Fi only) |
0.61 [0.15, 0.94] | 17% — confuses "room changed" with "model broke" |
ble-ks (BLE only) |
0.62 | 0% |
xmodal (cross-modal) |
0.93 [0.72, 1.0] | 5.6% |
oracle-counter (ideal ceiling) |
0.97 [0.87, 0.99] | — |
Policy at matched budget (signal arm): fixed cadence 0.399 error / 8.0 estate-wide recals; trigger[xmodal] 0.407 / 2.0 recals. Even the perfect-knowledge trigger (0.421) does not beat fixed cadence on error — because recalibrating on schedule also fixes below-threshold drift the trigger deliberately ignores. So: detectability confirmed, accuracy-policy refuted, budget-parity is the real result.
How to read the figures
fig_drift_trigger_detect— four scatter panels (one per monitor), statistic on x, true occupancy error on y, with the per-panel Spearman ρ in the title. A good monitor makes the cloud rise left-to-right; notexmodal's tight rise vscsi-ks's scatter. n = 18 cells/arm, so read the rank trend, not individual points.fig_drift_trigger_policy— the small-multiples bar chart of error and recals per policy; the honest reading is overlapping error bars between trigger and fixed, with the recal-count bar far lower for the trigger.fig_drift_trigger_curves— per-arm displacement→error curves; the seed spread is the story (seed-1 placements happen to be drift-robust; the big excursion is seed-0).
Review panel
Each voice is a prepared expert with a one-line stance and the literature it argues from. Verdicts are about this experiment and its current evidence, not the idea in the abstract.
Optional further voice for future rounds — 🛡️ Responsible-Sensing / Ethics reviewer (privacy of device-free occupancy, consent, dual-use), grounded in renet-responsible-sensing. Not yet run for this card.
Key references
- gama2014 ↗ — the drift-detection framing this whole experiment inherits.
- jung2025 — real multi-zone CSI occupancy; grounds the drift-on-layout premise.
- zou2018 ↗, zou2017 — device-free CSI counting baselines.
- demrozi2021 ↗ — BLE occupancy, the second modality's real-world basis.
- zhang2026 — the reproducibility bar the SWE voice invokes.
- huang2025 — a public real-CSI anchor for the red-team's cross-check demand.