Inspect unusual patterns in one ECG recording
A 140-input autoencoder models standardized heartbeats derived from PhysioNet record chf07 in the BIDMC Congestive Heart Failure Database. The current project contains 5,000 beats and reports anomaly ROC AUC 0.955.
1. Clinical question and intended use
This physiological-signal example studies reconstruction-error ranking against the supplied normal/non-normal annotation. It is a recording-specific research benchmark, not a diagnostic or monitoring-alarm system.
Heartbeat representation
Retain the same 140-point transformation.
Error ranking
Inspect the native anomaly ROC and reconstructions.
Recording boundary
Avoid treating a single recording as a clinical cohort.
2. Cohort, measurements and endpoint
The first ECG channel of chf07 was decoded, segmented at annotation midpoints, interpolated to 140 values and standardized per beat. The final CSV column is 1 for normal and 0 for non-normal. The saved model assigns 1,234 rows to training, 411 to validation and 3,355 to testing. These roles differ from the separate 1,000-row OpenNN test_indices.csv file; results on this page use the .nd roles.
Source: BIDMC Congestive Heart Failure Database, record chf07. Dataset license: ODC-By-1.0. The downloadable ZIP includes the adapted data and attribution notices.
| Dataset measure | Saved value |
|---|---|
| Analysis unit | heartbeat segment |
| Records | 5,000 |
| Raw variables | 141 |
| Encoded model inputs | 140 |
| Model outputs | 140 |
| Training roles | 1234 |
| Validation / selection roles | 411 |
| Testing roles | 3355 |
| Unused roles | 0 |
Inspect the complete saved variable schema
| Field | Role | Type | Categories |
|---|---|---|---|
| variable_1 | InputTarget | Numeric | |
| variable_2 | InputTarget | Numeric | |
| variable_3 | InputTarget | Numeric | |
| variable_4 | InputTarget | Numeric | |
| variable_5 | InputTarget | Numeric | |
| variable_6 | InputTarget | Numeric | |
| variable_7 | InputTarget | Numeric | |
| variable_8 | InputTarget | Numeric | |
| variable_9 | InputTarget | Numeric | |
| variable_10 | InputTarget | Numeric | |
| variable_11 | InputTarget | Numeric | |
| variable_12 | InputTarget | Numeric | |
| variable_13 | InputTarget | Numeric | |
| variable_14 | InputTarget | Numeric | |
| variable_15 | InputTarget | Numeric | |
| variable_16 | InputTarget | Numeric | |
| variable_17 | InputTarget | Numeric | |
| variable_18 | InputTarget | Numeric | |
| variable_19 | InputTarget | Numeric | |
| variable_20 | InputTarget | Numeric | |
| variable_21 | InputTarget | Numeric | |
| variable_22 | InputTarget | Numeric | |
| variable_23 | InputTarget | Numeric | |
| variable_24 | InputTarget | Numeric | |
| variable_25 | InputTarget | Numeric | |
| variable_26 | InputTarget | Numeric | |
| variable_27 | InputTarget | Numeric | |
| variable_28 | InputTarget | Numeric | |
| variable_29 | InputTarget | Numeric | |
| variable_30 | InputTarget | Numeric | |
| variable_31 | InputTarget | Numeric | |
| variable_32 | InputTarget | Numeric | |
| variable_33 | InputTarget | Numeric | |
| variable_34 | InputTarget | Numeric | |
| variable_35 | InputTarget | Numeric | |
| variable_36 | InputTarget | Numeric | |
| variable_37 | InputTarget | Numeric | |
| variable_38 | InputTarget | Numeric | |
| variable_39 | InputTarget | Numeric | |
| variable_40 | InputTarget | Numeric | |
| variable_41 | InputTarget | Numeric | |
| variable_42 | InputTarget | Numeric | |
| variable_43 | InputTarget | Numeric | |
| variable_44 | InputTarget | Numeric | |
| variable_45 | InputTarget | Numeric | |
| variable_46 | InputTarget | Numeric | |
| variable_47 | InputTarget | Numeric | |
| variable_48 | InputTarget | Numeric | |
| variable_49 | InputTarget | Numeric | |
| variable_50 | InputTarget | Numeric | |
| variable_51 | InputTarget | Numeric | |
| variable_52 | InputTarget | Numeric | |
| variable_53 | InputTarget | Numeric | |
| variable_54 | InputTarget | Numeric | |
| variable_55 | InputTarget | Numeric | |
| variable_56 | InputTarget | Numeric | |
| variable_57 | InputTarget | Numeric | |
| variable_58 | InputTarget | Numeric | |
| variable_59 | InputTarget | Numeric | |
| variable_60 | InputTarget | Numeric | |
| variable_61 | InputTarget | Numeric | |
| variable_62 | InputTarget | Numeric | |
| variable_63 | InputTarget | Numeric | |
| variable_64 | InputTarget | Numeric | |
| variable_65 | InputTarget | Numeric | |
| variable_66 | InputTarget | Numeric | |
| variable_67 | InputTarget | Numeric | |
| variable_68 | InputTarget | Numeric | |
| variable_69 | InputTarget | Numeric | |
| variable_70 | InputTarget | Numeric | |
| variable_71 | InputTarget | Numeric | |
| variable_72 | InputTarget | Numeric | |
| variable_73 | InputTarget | Numeric | |
| variable_74 | InputTarget | Numeric | |
| variable_75 | InputTarget | Numeric | |
| variable_76 | InputTarget | Numeric | |
| variable_77 | InputTarget | Numeric | |
| variable_78 | InputTarget | Numeric | |
| variable_79 | InputTarget | Numeric | |
| variable_80 | InputTarget | Numeric | |
| variable_81 | InputTarget | Numeric | |
| variable_82 | InputTarget | Numeric | |
| variable_83 | InputTarget | Numeric | |
| variable_84 | InputTarget | Numeric | |
| variable_85 | InputTarget | Numeric | |
| variable_86 | InputTarget | Numeric | |
| variable_87 | InputTarget | Numeric | |
| variable_88 | InputTarget | Numeric | |
| variable_89 | InputTarget | Numeric | |
| variable_90 | InputTarget | Numeric | |
| variable_91 | InputTarget | Numeric | |
| variable_92 | InputTarget | Numeric | |
| variable_93 | InputTarget | Numeric | |
| variable_94 | InputTarget | Numeric | |
| variable_95 | InputTarget | Numeric | |
| variable_96 | InputTarget | Numeric | |
| variable_97 | InputTarget | Numeric | |
| variable_98 | InputTarget | Numeric | |
| variable_99 | InputTarget | Numeric | |
| variable_100 | InputTarget | Numeric | |
| variable_101 | InputTarget | Numeric | |
| variable_102 | InputTarget | Numeric | |
| variable_103 | InputTarget | Numeric | |
| variable_104 | InputTarget | Numeric | |
| variable_105 | InputTarget | Numeric | |
| variable_106 | InputTarget | Numeric | |
| variable_107 | InputTarget | Numeric | |
| variable_108 | InputTarget | Numeric | |
| variable_109 | InputTarget | Numeric | |
| variable_110 | InputTarget | Numeric | |
| variable_111 | InputTarget | Numeric | |
| variable_112 | InputTarget | Numeric | |
| variable_113 | InputTarget | Numeric | |
| variable_114 | InputTarget | Numeric | |
| variable_115 | InputTarget | Numeric | |
| variable_116 | InputTarget | Numeric | |
| variable_117 | InputTarget | Numeric | |
| variable_118 | InputTarget | Numeric | |
| variable_119 | InputTarget | Numeric | |
| variable_120 | InputTarget | Numeric | |
| variable_121 | InputTarget | Numeric | |
| variable_122 | InputTarget | Numeric | |
| variable_123 | InputTarget | Numeric | |
| variable_124 | InputTarget | Numeric | |
| variable_125 | InputTarget | Numeric | |
| variable_126 | InputTarget | Numeric | |
| variable_127 | InputTarget | Numeric | |
| variable_128 | InputTarget | Numeric | |
| variable_129 | InputTarget | Numeric | |
| variable_130 | InputTarget | Numeric | |
| variable_131 | InputTarget | Numeric | |
| variable_132 | InputTarget | Numeric | |
| variable_133 | InputTarget | Numeric | |
| variable_134 | InputTarget | Numeric | |
| variable_135 | InputTarget | Numeric | |
| variable_136 | InputTarget | Numeric | |
| variable_137 | InputTarget | Numeric | |
| variable_138 | InputTarget | Numeric | |
| variable_139 | InputTarget | Numeric | |
| variable_140 | InputTarget | Numeric | |
| variable_141 | Evaluation | Binary | 0, 1 |
3. Model
The model has 140 encoded inputs and 140 outputs. No architecture-selection experiment is recorded in this project. The diagram shows the topology used by the saved model.
| Layer | Input shape | Output shape | Activation |
|---|---|---|---|
| Scaling | 140 | 140 | |
| Dense | 140 | 35 | ReLU |
| Dense | 35 | 17 | ReLU |
| Dense | 17 | 8 | ReLU |
| Dense | 8 | 17 | ReLU |
| Dense | 17 | 35 | ReLU |
| Dense | 35 | 140 | Identity |
| Unscaling | 140 | 140 |

4. Training strategy
The saved training configuration uses Adam with MeanAbsoluteError.
Adaptive moment estimation results
| Measure | Value |
|---|---|
| Epochs number | 100 |
| Elapsed time | 00:00:02 |
| Stopping criterion | Maximum epochs number |
| Training error | 0.18 |
| Validation error | 0.172 |

5. Model selection and baseline
No model selection experiment is recorded for this version. The validation subset guides fitting where a training report is present; it is distinct from the held-out test rows.
6. Clinical validation
The figures and tables below refer to the current project’s saved testing analysis. The subset uses testing role 2; it contains 3355 source records.
ROC AUC describes ranking on this testing subset. Any optimal threshold shown in the saved ROC report was selected descriptively on that same subset; it is not an independently validated operating policy.
The report does not include a fixed-threshold confusion table. Sensitivity, specificity, precision and operating-point counts are therefore not claimed. The normal/non-normal prevalence belongs to this selected recording, not a clinical population.
Area under curve
| Measure | Value |
|---|---|
| Area under curve | 0.955 |





7. Workflow and reproducibility
Open the downloaded project in Neural Designer, inspect the dataset roles and preprocessing, then review the saved task report. Use the same input schema and category order when calculating outputs. The ZIP contains the exact current .nd, its source data and the applicable dataset notices.
Research workflow: eligible record or image → measurement and schema checks → model score → expert review → confirmatory clinical method where appropriate. No model output should be used as an autonomous diagnosis or treatment instruction.
8. Safety, generalizability and governance
All beats come from one recording, so temporally correlated segments cannot establish patient-level transfer. No external validation, calibrated risk or clinical operating threshold is established. The supplied report contains ROC ranking and sample reconstructions but no confusion counts at a fixed operating threshold; clinician or signal-specialist review remains necessary.
References
- BIDMC Congestive Heart Failure Database, record chf07. PhysioNet. 10.13026/C29G60
- Dataset terms: Open Data Commons Attribution License 1.0. Full attribution and transformations are included in
LICENSES/DATASET-LICENSE.txt. - Current Neural Designer project and saved task report, snapshot 6 October 2026.