Motivation
This is the thesis core — the Periodic BLE Calibration Campaigns contribution promised by Ch3 L3.1 + L3.3. Merges the superseded EXP-002 (drift baseline) and EXP-003 (calibration response) into one continuous 30-day deployment, because drift measurement is the baseline arm of the calibration campaign, not a separate study.
Per diary/2026-05-20 - Experiment Series Reorganization §"Why these collapses are honest, not lazy", running them as one deployment is operationally identical and analytically cleaner: the sawtooth figure that EXP-003 named as the thesis-signature result is built on the EXP-002 degradation curve.
Calibration strategy: trigger-based only in deployment. Daily / weekly / never strategies become analysis-time ablations on the same collected data, not parallel model copies running in parallel.
Setup
Hardware deployment
Identical to EXP-F1 (4× Pi 5 + AX210, 2× ESP32-C6 BLE listeners, 2× ESP32-C5 supplementary CSI). Devices must remain in fixed positions for the entire 30 days. Power: continuous wall power; PoE preferred where wiring allows.
Day-0 model training
Day 0 reuses EXP-F1's collected scenarios (F1.A + F1.B) as labelled training data with BLE-derived ground truth. Two models trained, both deliberately kept simple (per A Framework to Estimate Classroom Occupancy using WiFi Channel State Information ↗ — LGBM is the right tier at this data scale):
- Model A — Bagging-LGBM (the workhorse).
- Model B — PINN with continuity-residual loss at $\lambda = \lambda^*$ from EXP-S1 Phase B (the mechanism story).
Both models frozen at end of Day 0.
Calibration trigger
The trigger fires when |BLE-derived count − model-predicted count| > 20 % for ≥ 1 hour. On fire:
- Server pushes a calibration-mode notification to all phones with the app.
- App raises BLE adv rate from 0.1 Hz (background) to 1 Hz (calibration).
- Participants present in the room walk through 1–2 cells over 15 min following an app-issued gamification task.
- System collects fresh labelled CSI windows with BLE-derived ground truth.
- Both models fine-tuned on the 15 min of fresh data — last N layers updated for PINN; new bagging round added for LGBM; learning rate 10× lower than Day 0.
- App returns to background mode. Model reload broadcast.
Environmental log
Daily check: furniture positions (photographed), door / window state, additional devices in room (laptops / monitors), temperature + humidity if available, any maintenance events.
Procedure
Phase A — Day 0 training
End-of-EXP-F1 logged data → Day-0 dataset. Train Model A + Model B. Freeze. Compute held-out test accuracy → Day-0 reference accuracy per model.
Phase B — Days 1–30 continuous deployment
- CSI + BLE continuous capture during working hours.
- BLE-derived ground-truth count computed every 1-s window.
- Frozen-model prediction computed every 1-s window.
- Trigger evaluator runs every 1 h.
- On trigger fire, calibration campaign as above. Log campaign metadata (timestamp, participants, duration, fresh data volume, fine-tune wall-clock, pre/post accuracy).
- Daily environmental log entry.
Phase C — Controlled perturbations (optional)
If natural environmental change is insufficient to drive measurable drift, inject perturbations:
- Day 7: move one chair.
- Day 14: rearrange furniture (swap table and chair positions).
- Day 21: add a large object (whiteboard / monitor) near a TX-RX link.
- Day 28: restore Day-0 layout.
Phase D — Analysis-time strategy ablation
After Phase B closes, replay the collected data through three counterfactual strategies offline:
- Strategy A (daily): simulate a fixed daily 10 min calibration window.
- Strategy B (weekly): simulate a fixed Monday 30 min calibration window.
- Strategy D (never): don't calibrate at all — equivalent to the frozen-model baseline.
- Compare against the actual trigger-based strategy (C, the deployment one).
Expected outputs
_attachments/exp-f2/csi/day_<NN>/— per-day CSI parquet._attachments/exp-f2/ble/day_<NN>/— per-day BLE log parquet._attachments/exp-f2/predictions/day_<NN>/<model>.parquet— frozen-model predictions per window._attachments/exp-f2/campaigns/<timestamp>/— calibration campaign data + pre/post accuracy + fine-tune metadata._attachments/exp-f2/accuracy_timeline.csv— continuous accuracy with calibration markers._attachments/exp-f2/environment_log.csv— daily environmental state._attachments/exp-f2/strategy_replay.csv— counterfactual strategies (A/B/D) replayed offline.
Analysis plan
Primary metrics
- Degradation half-life per model — days until accuracy drops to 50 % of Day-0 performance (Strategy D / no-calibration arm).
- Sawtooth amplitude — per calibration event, (post-accuracy − pre-accuracy) / (Day-0 accuracy − pre-accuracy).
- Strategy comparison — trigger-based (C) vs daily (A) vs weekly (B) vs never (D): total calibration minutes vs achieved average accuracy.
- Environmental sensitivity — correlation between environmental-change count and pre-calibration accuracy drop.
- Mechanism transfer test (LGBM vs PINN) — does the PINN with $\lambda > 0$ require less calibration than the LGBM? (Connects to EXP-S1 Phase B: the mechanism is supposed to make the model less drift-sensitive.)
Key figures
- Fig 1. The sawtooth — accuracy timeline over 30 days, one line per model, with calibration events marked. Thesis-signature.
- Fig 2. Cost-vs-accuracy scatter — total calibration minutes (x) vs mean accuracy (y), one point per strategy.
- Fig 3. Environmental-change vs accuracy-drop scatter.
- Fig 4. PINN-vs-LGBM drift comparison — does the mechanism reduce drift rate?
Success criteria
- 30 consecutive days of continuous data collection (weekends allowed as gaps).
- Measurable Day-0 → Day-30 accuracy drop > 10 % on the never-calibrate arm (Strategy D).
- Trigger-based calibration restores within-5 % of Day-0 accuracy after each fire.
- Trigger-based calibration achieves comparable mean accuracy to daily-calibration (Strategy A) with < 50 % of the calibration minutes.
- PINN-mechanism check: PINN's natural drift rate (Strategy D arm) ≤ LGBM's natural drift rate.
- Sawtooth figure is publication-quality.
Risks and mitigations
- 30 days of continuous operation without device dropouts. Mitigation: EXP-P1 dress rehearsal must show zero dropouts over 4 h continuous; treat any field dropout > 1 h as a deployment failure, restart from the last clean day.
- Trigger evaluator is itself a model. Mitigation: the BLE-derived count is closed-form (count of unique active UUIDs), so the trigger threshold is deterministic; no risk of trigger-model drift on top of the experiment model drift.
- Catastrophic forgetting on fine-tune. Mitigation: 10× lower LR; 5–10 epochs; explicit pre/post accuracy logging gates the calibration.
- The mechanism check (PINN < LGBM drift) is the most-likely-to-not-replicate claim. Mitigation: that's the value of including it — if PINN doesn't reduce drift in the field even after EXP-S1 said it should in simulation, that's a finding, not a failure. The thesis can defend it either way.
- Phone-penetration variation skews the BLE-derived ground truth across days. Mitigation: log effective-vs-nominal penetration daily per Accurate occupancy estimation with WiFi and bluetooth/BLE packet capture ↗; report both on every accuracy plot.
Dependencies
- EXP-F1 passed (the ground-truth chain is trusted).
- 30+ days of room availability with stable power.
- EXP-S1 Phase B closed (PINN $\lambda^*$ known, so Day-0 PINN training has a defensible λ).
- Participant pool willing to leave the app running through the deployment.
Related work in vault
- billah2021_69a2 — BLE-occupancy F1 drops 92.2 → 70.3 % in 7 days. Sets the drift exists prior.
- wang2026_2758 ↗ — cross-environment generalization taxonomy.
- koo2026_a08d ↗ — "lightweight self-calibration routines" future direction.
- chen2023_5cbd ↗ — domain-invariant feature extraction.
- meneghello2023_0a93 ↗ — few-shot domain adaptation precedent.
Cross-experiment links
- EXP-S1 — provides the PINN $\lambda^*$.
- EXP-F1 — provides the validated ground-truth chain.
- EXP-F3 — extends the calibration story across rooms + penetration scenarios.
Notes
The sawtooth is the figure committee members ask to be shown first. Everything else in this experiment supports its defensibility.