{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2602-17531","title":"Position: Evaluation of ECG Representations Must Be Fixed","arxiv_id":"2602.17531","date":"2026-02-19","proceeding":null,"authors":["Zachary Berger","Daniel Prakah-Asante","John Guttag","Collin M. Stultz"],"abstract":"This position paper argues that current benchmarking practice in 12-lead ECG representation learning must be fixed to ensure progress is reliable and aligned with clinically meaningful objectives. The field has largely converged on three public multi-label benchmarks (PTB-XL, CPSC2018, CSN) dominated by arrhythmia and waveform-morphology labels, even though the ECG is known to encode substantially broader clinical information. We argue that downstream evaluation should expand to include an assessment of structural heart disease and patient-level forecasting, in addition to other evolving ECG-related endpoints, as relevant clinical targets. Next, we outline evaluation best practices for multi-label, imbalanced settings, and show that when they are applied, the literature's current conclusion about which representations perform best is altered. Furthermore, we demonstrate the surprising result that a randomly initialized encoder with linear evaluation matches state-of-the-art pre-training on many tasks. This motivates the use of a random encoder as a reasonable baseline model. We substantiate our observations with an empirical evaluation of five representative ECG pre-training approaches across six evaluation settings: the three standard benchmarks, a structural disease dataset, hemodynamic inference, and patient forecasting.","url_abs":"https://arxiv.org/abs/2602.17531","url_pdf":"https://arxiv.org/pdf/2602.17531","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2602.17531","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2602.17531"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/zackeberger/ecg-fix","reach":null}],"summary":{"unverified":11},"by_repo_kind":{"found_in_text":{"samples":11,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":11,"samples":[{"code_sha256_prefix":"589a7e55ed3ed424","entry":"calculate_auc","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/prepare_miscellaneous.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/prepare_miscellaneous.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"589a7e55ed3ed424"}},{"code_sha256_prefix":"64a02eb3c604bfd5","entry":"contrastive_single","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/perform_training.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/perform_training.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"64a02eb3c604bfd5"}},{"code_sha256_prefix":"c528e716be8c1416","entry":"flatten_arrays","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/prepare_miscellaneous.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/prepare_miscellaneous.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c528e716be8c1416"}},{"code_sha256_prefix":"304de0586273f571","entry":"get_download_datasets","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"src/registry.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/src/registry.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"304de0586273f571"}},{"code_sha256_prefix":"0c2b0391f82858eb","entry":"load_initial_model_contrastive","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/prepare_models.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/prepare_models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0c2b0391f82858eb"}},{"code_sha256_prefix":"52f7049d5695db9c","entry":"normalize_datasets","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"src/registry.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/src/registry.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"52f7049d5695db9c"}},{"code_sha256_prefix":"f21aa7c7f82eb6f1","entry":"normalize_models","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"src/registry.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/src/registry.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f21aa7c7f82eb6f1"}},{"code_sha256_prefix":"aa3297178f383027","entry":"obtain_contrastive_loss","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/prepare_miscellaneous.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/prepare_miscellaneous.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"aa3297178f383027"}},{"code_sha256_prefix":"1ec8a178a6e65e0f","entry":"obtain_noutputs","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/prepare_models.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/prepare_models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1ec8a178a6e65e0f"}},{"code_sha256_prefix":"e31c59245567a70a","entry":"one_epoch_contrastive","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/perform_training.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/perform_training.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e31c59245567a70a"}},{"code_sha256_prefix":"8b6279ab3c672196","entry":"temporal_12lead_contrastive_loss","repo":"zackeberger/ecg-fix","repo_kind":"found_in_text","path":"external_src/CLOCS/perform_training.py","file_url":"https://github.com/zackeberger/ecg-fix/blob/HEAD/external_src/CLOCS/perform_training.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8b6279ab3c672196"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}