From a measured library to a system that keeps learning.
What has to happen to wearable data before it can be trusted (noise, artefacts, baseline, residuals), how the efficacy experiments are run and analysed, and how the product turns every session into an experiment that improves the sound it plays — the company's engine (demand signal → AI production → measured library) applied inside the product. Wellness-only; nothing here diagnoses or treats.
Source: research/ML_RESEARCH_DESIGN.md · METHODOLOGY_DESIGN.md §4 (identification) · DECISION_MODEL.md (gates)
HR steers, HRV is measured, self-report is the construct
accurate on wrist PPG · live 1–5 s → the control signal and co-primary physiological outcome
vagal-tone marker (higher = calmer) but noisy and sparse on wrist; Oura overnight only → before/after outcome, never the live loop
+ single-item calm 0–10 · the construct measure and the training label
time of day · motion · recent activity · self-tagged moment (acute / wind-down / pre-performance)
| Source | What | Rate | Access reality | Use |
|---|---|---|---|---|
| Apple Watch · HealthKit | HR | 1–5 s in a workout/mindfulness session | user permission; live via workout session / anchored query | live control · outcome |
| Apple Watch · HealthKit | HRV SDNN | opportunistic · lag ≤ 30 min | permission | before/after · baseline model |
| watchOS app | beat-to-beat (heartbeat series) | in-session | permission | RMSSD in-session — best available on wrist |
| Oura API v2 | nightly HRV, HR, sleep, readiness | next morning · 5-min | needs active membership | baseline · next-day personalisation · sleep-onset outcome |
| Polar H10 | RR intervals (ECG-grade) | 1 ms | BLE in pilot | ground truth for calibration |
| Accelerometer | motion | 50 Hz | permission | artefact masking |
Direction check: relaxation raises HRV and lowers HR.
Clean → smooth → baseline → residual: "calmer than your usual 10 pm"
Per user, on ≥ 14 days of non-session data (HealthKit background / Oura nightly), ridge-shrunk toward population curves so a new user borrows the population baseline:
Δr is (a) the pilot's physiological outcome, (b) the reward signal for learning, (c) the number shown to the user. Robust within-person z (median/MAD) for display and cross-user comparison. Same for log-RMSSD where available.
Calibration sub-study (E0)
n ≈ 8, Watch + Polar concurrently, 3 sessions each → ICC, MAPE, reliability ratio λ. De-attenuate any model where wrist HRV is a regressor; as an outcome, non-differential error only costs power (documented).
Differential-error check
Compare motion-flag rates across conditions (a beat-driven track may induce tapping); if they differ, sensitivity analysis on clean windows only.
Why residuals, not raw change
Raw pre→post confounds regression to the mean, circadian drift and arrival spikes with the session. The residual is the session's contribution beyond the person's own expected trajectory.
Two in the design-thinking phase, three on the roadmap — one learning loop
| ID | Question | Design | n | Analysis | Feeds |
|---|---|---|---|---|---|
| E0 calibration | How noisy is the wrist vs ECG-grade RR? | concurrent Watch + Polar, 3 sessions | 8 | ICC · MAPE · λ | pipeline · A2b measurement LR |
| E1 efficacy pilot (WoZ) | Does a 15-min adaptive session lower STAI-S and residual HR / raise RMSSD vs an active control? Real song vs neutral? | within-subject, 3-condition Latin square (T1 neutral · T2 real song · C generic playlist); a human "plays the algorithm" from the rule table | 20–30 × 3 | mixed model (ANCOVA form) · Bayesian re-analysis with meta-analytic prior · contrast T1 − T2 | A2a · A2b · A1a |
| E2 in-app micro-experiments | Which parameters/variants settle HR faster, per moment? | every session randomly assigns a variant (content type × preset) from an allowed set; moment tag; before/after self-report | 100+ users | hierarchical model of Δr and self-report on variant × moment; sequential Bayesian updating; A/B/n | product · the measured library |
| E3 personalisation | Can a per-user policy beat the population default? | contextual bandit (Thompson sampling) over presets; context = moment, HR z at start, time; hierarchical prior from E2 | same cohort | off-policy evaluation (IPS / doubly-robust) on logs before switch-on; then online regret vs default | product |
| E4 self-generating library | Can generated variants from the AI engine be evaluated and kept automatically? | generate N variants per parameter cell; each is an arm with a shrunk prior; promote / retire by posterior thresholds; human listening QA gate | rolling | bandit + posterior thresholds | the engine at product scale |
Signal → baseline → state → policy → sound → log → learn
Metrics
Primary: mean residual HR change last 5 min vs pre-rest (bpm), by moment. Secondary: RMSSD Δ where available, self-report Δ, completion, D30 retention.
Guardrails
Every policy change evaluated offline (IPS/DR) then online vs a hold-out default cohort; never 100% rollout untested. Never optimise on self-report alone (expectancy) nor HR alone (stillness) — composite reward + quality index.
What the dissertation claims
§1–3 measurement stance and pipeline, E0–E1 design/results, the v0 rule table, and this architecture as the "ability" argument. E2–E4 are the post-PROCEED roadmap.
Health data without medical claims
Consent & minimisation
Consent per data type; beat-level data processed on-device; only windowed features and session summaries leave the phone; user deletion; regional storage; GDPR consent basis; HealthKit and Oura terms.
Fairness
PPG accuracy varies with skin tone, motion and temperature — quality index and calibration reported by sub-group; no score that penalises a user for sensor noise.
Safety
HR > 130 at rest or a self-tagged panic state → grounding message, no numbers shown; general help-line pointer only; wellness language everywhere ("settle", "unwind" — never "treat").