01Introduction
Heart-rate models are usually fit to a population. With weeks of data from one wearer, you can fit a model to that person instead. We test whether an agent can do that, and whether its model still works on activities missing from the training data.
The predictor is scored on recordings the agent never sees. A separate judge reads the trace and grades how the agent worked.
Placeholder: comparison to related benchmarks.
02The environment
Data comes from PPG-DaLiA: 15 participants, ECG-derived heart rate, wrist and chest accelerometers, labelled activities. Each episode targets one participant. The agent gets a Python workspace, that participant's support recordings, four reference participants and a fitted baseline.
| Phase | Input | Action |
|---|---|---|
| Build | Support data, reference cohort, baseline | Fit a predictor |
| Investigate | Up to 3 dev-feedback calls | Revise |
| Transfer | Submit | Scored on stairs, table soccer, cycling, recovery |
Interface: predict(history, future) → (60,) in bpm. history is the last 60 s of heart rate and inputs. future is the next 120 s of inputs. Dev feedback, submission and writes to submission/ need a justification of at least 40 characters.
03Methodology
Splits
4 reference, 4 development, 6 held-out. S3 moved from held-out to development after its baseline scores were seen during calibration. S6 is excluded because its recording is truncated.
Anchor and pass
The anchor, kinetic_pop_calibrated, uses population heart-rate kinetics with a personal offset and gain fit on support data. A run passes if it executes, beats the anchor by the frozen margin, submits a report and has no integrity flags. Criteria are hashed before any held-out run.
Judge
Seven items scored 0–2, plus two integrity flags. Model name and hidden accuracy are withheld.
04Results
Placeholder: headline result.
Placeholder: per-activity results and paired differences with bootstrap CIs.
05Failure analysis
Placeholder: failure cases with trace excerpts.
| Model | Failure | Caught by |
|---|---|---|
| model-x | Placeholder | audit |
| model-y | Placeholder | judge |
| model-z | Placeholder | hidden score |
06Limitations
- Isolation. Per-episode users, root-only labels and resource limits are enforced. The network block is a Python hook, not a network namespace.
- Scope. One dataset, one target: heart rate from movement.
- Judge. Agreement with expert reviewers hasn't been measured.
- Campaigns. Synthetic fixtures. They don't model human physiology.
Placeholder: v0.2 changes.