{"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-2604-27967","title":"Differentiable latent structure discovery for interpretable forecasting in clinical time series","arxiv_id":"2604.27967","date":"2026-04-30","proceeding":null,"authors":["Ivan Lerner","Jean Feydy","Alexandre Kalimouttou","Anita Burgun","Francis Bach"],"abstract":"Background: We introduce StructGP, a continuous-time multi-task Gaussian process that couples process convolutions with differentiable structure learning to uncover a sparse, ordered directed acyclic graph (DAG) of inter-variable dependencies while preserving principled uncertainty. We further propose LP-StructGP, which augments StructGP with latent pathways-shared, temporally shifted trajectories inferred via subject-specific coupling filters and a softmax gating mechanism-to capture cross-patient progression patterns. Both models are trained under sparsity and acyclicity constraints using scalable low-rank updates using likelihood-based objectives. Results: In simulations, graph recovery improved with cohort size, with the median Structural Hamming Distance reaching zero at the largest cohort size, while pathway assignments showed high Adjusted Rand Index. Our analysis establishes that the ordered StructGP graph is identifiable from the population marginal likelihood. On a MIMIC-IV septic shock cohort (n=1,008; norepinephrine, creatinine, mean blood pressure), StructGP improves short-horizon (6 h) forecasting over independent-task baselines (average RMSE 0.68 [95% CI: 0.63-0.74] vs. 0.88 [0.83-0.94]) and, with 15 additional inputs, markedly outperforms unstructured kernels (0.63 [0.58-0.69] vs. 3.02 [2.85-3.18]) with superior calibration (coverage 0.96 vs. 0.84). For long horizons (up to 6 days), LP-StructGP further reduces error for creatinine (RMSE 0.95 [0.88-1.03] vs. 1.17 [1.08-1.25]) and improves overall coverage (0.93 [0.93-0.94] vs. 0.91 [0.91-0.92]). On the PhysioNet Challenge, StructGP attains competitive accuracy (MAE 3.72e-2) relative to a strong published graph neural model. Conclusion: These results show that structured process convolutions with latent pathways deliver interpretable, scalable, and well-calibrated forecasting for irregular clinical time series.","url_abs":"https://arxiv.org/abs/2604.27967","url_pdf":"https://arxiv.org/pdf/2604.27967","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":{"syntology_url":"https://syntology.ai/paper/2604.27967","atlas_url":"https://app.syntology.ai/?focus=2604.27967","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2604.27967"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/yalavarthivk/GraFITi","reach":null}],"summary":{"ran":17,"unverified":1},"by_repo_kind":{"found_in_text":{"samples":18,"ran":17,"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":18,"samples":[{"code_sha256_prefix":"4a8620fc2db04474","entry":"Activity_get_seq_length","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/person_activity.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/person_activity.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4a8620fc2db04474"}},{"code_sha256_prefix":"726f63c5d8d8e2c7","entry":"Activity_time_chunk","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/person_activity.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/person_activity.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"726f63c5d8d8e2c7"}},{"code_sha256_prefix":"0286ba94d7f741aa","entry":"MAE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"train_grafiti.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/train_grafiti.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0286ba94d7f741aa"}},{"code_sha256_prefix":"1406fa2cb89ec513","entry":"MAE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"baseline_experiments/train_linodenet.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/baseline_experiments/train_linodenet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1406fa2cb89ec513"}},{"code_sha256_prefix":"363b7a0690754d6a","entry":"MSE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"train_grafiti.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/train_grafiti.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"363b7a0690754d6a"}},{"code_sha256_prefix":"a02367a938d20d4d","entry":"MSE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"baseline_experiments/train_linodenet.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/baseline_experiments/train_linodenet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a02367a938d20d4d"}},{"code_sha256_prefix":"48c047f5225a3300","entry":"RMSE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"train_grafiti.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/train_grafiti.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"48c047f5225a3300"}},{"code_sha256_prefix":"2ba5cb1a7937a316","entry":"RMSE","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"baseline_experiments/train_linodenet.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/baseline_experiments/train_linodenet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2ba5cb1a7937a316"}},{"code_sha256_prefix":"8db261d0c2908907","entry":"USHCN_time_chunk","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/ushcn.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/ushcn.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8db261d0c2908907"}},{"code_sha256_prefix":"1749069af0b9d37e","entry":"batch_flatten","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"grafiti/grafiti_layers.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/grafiti/grafiti_layers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1749069af0b9d37e"}},{"code_sha256_prefix":"eb94e5217cc35d4e","entry":"collate_GOB","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/mimic.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/mimic.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"eb94e5217cc35d4e"}},{"code_sha256_prefix":"c4b979466c3f0695","entry":"gather","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"grafiti/grafiti_layers.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/grafiti/grafiti_layers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c4b979466c3f0695"}},{"code_sha256_prefix":"79b441530285ad17","entry":"get_data_min_max","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/physionet.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/physionet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"79b441530285ad17"}},{"code_sha256_prefix":"2e9dede6592a9d91","entry":"get_person_id","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/person_activity.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/person_activity.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2e9dede6592a9d91"}},{"code_sha256_prefix":"16c21c5c9315cd0b","entry":"get_seq_length","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"lib/physionet.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/lib/physionet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"16c21c5c9315cd0b"}},{"code_sha256_prefix":"59283ce5fd24a2fa","entry":"reconstruct_y","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"grafiti/grafiti_layers.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/grafiti/grafiti_layers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"59283ce5fd24a2fa"}},{"code_sha256_prefix":"73beb865ec22064c","entry":"tsdm_collate","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"grafiti/grafiti.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/grafiti/grafiti.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"73beb865ec22064c"}},{"code_sha256_prefix":"76fc67dca4a2d53c","entry":"transform_data_for_grafiti","repo":"yalavarthivk/GraFITi","repo_kind":"found_in_text","path":"grafiti/grafiti_utils.py","file_url":"https://github.com/yalavarthivk/GraFITi/blob/HEAD/grafiti/grafiti_utils.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":"76fc67dca4a2d53c"}}]},"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}