Report · v0.1

PhysBench v0.1

Setup, methodology and results. Results are placeholders.

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.

PhaseInputAction
BuildSupport data, reference cohort, baselineFit a predictor
InvestigateUp to 3 dev-feedback callsRevise
TransferSubmitScored 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.

higher is better · % · whisker = Wilson 95% CI
01model-ahigh
0%
02model-bmax
0%
03model-chigh
0%
04model-dmedium
0%
05model-ehigh
0%
06model-fmedium
0%
07model-glow
0%
—kinetic_pop_calibratedanchor
n/a
Figure 1 · Placeholder scores.
model-akinetic_pop_calibrated
0481210s20s30s40s50s60s
Figure 2 · Placeholder. MAE (bpm) by horizon, top entry vs anchor.

Placeholder: per-activity results and paired differences with bootstrap CIs.

05Failure analysis

Placeholder: failure cases with trace excerpts.

ModelFailureCaught by
model-xPlaceholderaudit
model-yPlaceholderjudge
model-zPlaceholderhidden 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.