E1 — PPG encoding decision
PhysioJEPA — Oz Labs — 2026-04-14
Script: scripts/e1_ppg_encoding.py
Raw JSON: docs/e1_stage1_report.json
Decision
v1 uses raw 200 ms PPG patches (25 samples @ 125 Hz) → linear projection → d=256 tokens.
Morphological encoding is viable on this data but is held as ablation A1 per the research plan (RESEARCH_DEVELOPMENT.md §2 v1 spec, §Change-log bullet 3). The Stage-2 linear-probe comparison that would justify switching to morphology cannot run until AF labels are in place; it runs as part of A1 after E5a.
Numbers (Stage 1, neurokit2 v5 on 500 random segments)
| Metric | Value |
|---|---|
| Segments attempted | 500 |
| Segments non-empty | 500 |
| Segments where morphology extraction was valid (detected/expected in [0.70, 1.30]) | 493 (98.6%) |
| Median beats detected per ~60-s segment | 76 |
| Mean beats detected per ~60-s segment | 76.6 |
Extraction rate 0.986 ≫ 0.70 threshold → Stage 1 pass → rule routes to Stage 2 comparison.
Why we still pick raw patches for v1
- Spec alignment.
RESEARCH_DEVELOPMENT.md§2 v1 locks raw patches. Morphology is explicitly called out as ablation A1. Changing v1 silently would contradict the revision-2 change log. - Stage 2 is blocked on AF labels. The deciding comparison (
morph_AUROC > raw + 0.02) requires the frozen-encoder AF probe that depends on AF labels. That decision arrives post-E5a. - Minimise moving parts in v1. The core claim is about Δt — not about PPG feature engineering. Raw patches remove a failure surface from the Day-6–8 E3 run.
- Stage-2 still runs. Ablation A1 is the formal Stage-2 comparison; it executes after E3 passes K2 and we have AF labels. If A1 wins by ≥0.02 AUROC we adopt morphology for the camera-ready run.
Implementation
src/physiojepa/ppg_encoder.py—PPGPatchTokeniser(patch_size=25, d_model=256).src/physiojepa/ecg_encoder.py—ECGPatchTokeniser(patch_size=50, d_model=256)for single-lead II @ 250 Hz (paired change; seedocs/e0_data_card.mdarchitectural implications).
Follow-ups
- A1 (morphology probe) is scheduled for Weeks 3–4 after E3 passes K2.
- The 1.4% of segments where neurokit2 fails extraction will be filtered out of A1 but kept for raw-patch training (no PPG feature engineering means these are still usable).