Research log · PhysioNet Apnea-ECG · August 9, 2026

Sleep Apnea Classifier — Model Development Log

Per-minute apnea detection from single-lead ECG: dual wavelet representations, a MaxViT backbone, and a learned temporal verifier — trained on the 35 released recordings, evaluated subject-independently on the 35 withheld-challenge recordings (x01–x35). Every curve on this page is computed from the actual run artifacts.

How the model got here

Four iterations in one day, each fixing what the previous one exposed.

    Training curves

    Validation AUC per epoch (subject-wise validation on 7 held-out training recordings). The multichannel input lifts the MaxViT curve over the entire run, not just at the end.

    ROC — every model, both versions

    Test set x01–x35 (17,248 minutes). The verifier dominates the raw models in both versions; the multichannel input closes most of the gap between raw MaxViT and the verified output.

    Threshold selection

    The decision threshold was chosen where validation accuracy peaks — the test curve is shown only to report the outcome, it was never used for selection.

    Per-recording screening

    Estimated vs. true AHI for all 35 test recordings at the tuned threshold. The dashed lines mark the AHI ≥ 5 screening rule; points off the diagonal but inside the correct quadrant still screen correctly.

    All metrics

    Per-segment metrics on x01–x35. Published subject-independent baselines on this benchmark span 85.8–91.1% accuracy.

    Runs

    Where the GPU-time went in each Kaggle batch session (Tesla P100, torch 2.5.1+cu121 via the Pascal compatibility guard).

    Pipeline

    What a minute of ECG passes through before it becomes a label.