Skill Tracer
Skills › Scientific Agent Skills › pyhealth

pyhealth

skill · 142 lines · MIT · skills/pyhealth/SKILL.md

The facts

Its description

Builds and validates PyHealth clinical machine-learning pipelines for EHR, signals, imaging, and medical codes. Use for PyHealth dataset loading, MIMIC-III/IV, eICU or OMOP prediction tasks, patient-level evaluation, mortality/readmission/length-of-stay modeling, medication recommendation, sleep staging, Trainer checkpoints, and ICD/ATC/NDC/RxNorm mapping.

The description the agent reads to decide when to use it.

From its settingsline 3

Runs scripts

python assets/starter_pipeline.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 28

Files it mentions

references/installation.md, references/examples.md, references/datasets.md, references/tasks.md (first 5 of 8 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 34 line 94 line 120 line 121 line 122

Licence

MIT, from LICENSE.md

The terms its author shares it under, which let it be shown here.

From the repositorylicence text

Other settings

compatibility: Requires Python 3.12 or 3.13 and PyHealth 2.0.2 (Torch 2.7.1). Network access is needed for installation, public datasets and uncached medical-code resources. Restricted clinical datasets require authorized local access. metadata: version: "1.3" skill-author: K-Dense Inc. last-reviewed: "2026-09-30"

More settings at the top of the file, shown as written.

From its settingsline 4 line 5
Other files in this skill (7) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: pyhealth
3description: Builds and validates PyHealth clinical machine-learning pipelines for EHR, signals, imaging, and medical codes. Use for PyHealth dataset loading, MIMIC-III/IV, eICU or OMOP prediction tasks, patient-level evaluation, mortality/readmission/length-of-stay modeling, medication recommendation, sleep staging, Trainer checkpoints, and ICD/ATC/NDC/RxNorm mapping.
4compatibility: Requires Python 3.12 or 3.13 and PyHealth 2.0.2 (Torch 2.7.1). Network access is needed for installation, public datasets and uncached medical-code resources. Restricted clinical datasets require authorized local access.
5metadata:
6 version: "1.3"
7 skill-author: K-Dense Inc.
8 last-reviewed: "2026-09-30"
9---
11# PyHealth
13Targets **PyHealth 2.0.2**, verified against its released wheel, current official
14documentation, and CPU execution on Python 3.12/Torch 2.7.1. PyHealth's pipeline is
15`Dataset -> Task -> Model -> Trainer -> Metrics`; its 1.x and 2.x interfaces differ.
16Do not combine legacy `Visit` examples with the 2.x event/processor API.

PyHealth

Targets PyHealth 2.0.2, verified against its released wheel, current official documentation, and CPU execution on Python 3.12/Torch 2.7.1. PyHealth's pipeline is Dataset -> Task -> Model -> Trainer -> Metrics; its 1.x and 2.x interfaces differ. Do not combine legacy Visit examples with the 2.x event/processor API.

Raw lines 1 to 17
18## When to use
20Use for clinical prediction with PyHealth, including EHR sequences, physiological
21signals, imaging tasks, or medical-code lookup. Establish the cohort, prediction
22time, observation window, outcome horizon, and unit of evaluation before modeling.
23For general tabular learning without a PyHealth dataset/task, this skill is optional.

When to use

Use for clinical prediction with PyHealth, including EHR sequences, physiological signals, imaging tasks, or medical-code lookup. Establish the cohort, prediction time, observation window, outcome horizon, and unit of evaluation before modeling. For general tabular learning without a PyHealth dataset/task, this skill is optional.

Raw lines 18 to 24
25## Install and smoke-test
27```bash
28uv run --no-project --isolated --python 3.12 --with pyhealth==2.0.2 python assets/starter_pipeline.py --demo --epochs 1
29```
31Run that command from the skill directory, or use the absolute path to the asset.
32It trains on invented in-memory records and exercises patient splitting, metrics,
33and best-checkpoint restoration. It provides no evidence of clinical performance.
34See [installation](references/installation.md) for project setup and device options.

Install and smoke-test

uv run --no-project --isolated --python 3.12 --with pyhealth==2.0.2 python assets/starter_pipeline.py --demo --epochs 1

Run that command from the skill directory, or use the absolute path to the asset. It trains on invented in-memory records and exercises patient splitting, metrics, and best-checkpoint restoration. It provides no evidence of clinical performance. See installation for project setup and device options.

Raw lines 25 to 35
Runs code python assets/starter_pipeline.py :28
36## Workflow
381. **Inspect the installed version and dataset configuration.** Both MIMIC-III and
39 MIMIC-IV use lowercase table selectors in 2.0.2. MIMIC-III files remain uppercase.
402. **Check task semantics and required tables.** `MortalityPredictionMIMIC3` predicts
41 death in the *next admission*, excludes the last admission, and requires diagnoses,
42 procedures and prescriptions in the current admission. It is not a current-stay
43 early-warning model. Missing/invalid next-admission mortality flags are assigned
44 zero upstream; audit this before using real data.
453. **Create supervised samples.** `base.set_task(task)` returns a processed dataset
46 with input/output schemas. Inspect raw task output as well as processed samples.
474. **Partition by patient and verify overlap, class counts and observation windows.**
48 `split_by_patient(..., seed=42)` is random, not chronological or stratified.
49 It does not prevent within-visit temporal leakage or preprocessing leakage.
505. **Choose a schema-compatible model and run one batch before training.** Construct
51 it from the training sample dataset. Transformer uses `embedding_dim`, not
52 `hidden_dim`; arguments are model-specific.
536. **Declare validation metrics and the exact monitor.** Supply `metrics=[...]` to
54 `Trainer`; the monitor must be a returned key. An absent key raises an error.
55 Use `monitor_criterion="min"` for loss, `"max"` for AUC/accuracy.
567. **Evaluate the held-out test set once the model choice is fixed.** Report prevalence,
57 patient counts, discrimination, calibration, threshold policy and uncertainty as
58 appropriate. PR-AUC's no-skill reference depends on prevalence, not a universal 0.5.

Workflow

  1. Inspect the installed version and dataset configuration. Both MIMIC-III and MIMIC-IV use lowercase table selectors in 2.0.2. MIMIC-III files remain uppercase.
  2. Check task semantics and required tables. MortalityPredictionMIMIC3 predicts death in the next admission, excludes the last admission, and requires diagnoses, procedures and prescriptions in the current admission. It is not a current-stay early-warning model. Missing/invalid next-admission mortality flags are assigned zero upstream; audit this before using real data.
  3. Create supervised samples. base.set_task(task) returns a processed dataset with input/output schemas. Inspect raw task output as well as processed samples.
  4. Partition by patient and verify overlap, class counts and observation windows. split_by_patient(..., seed=42) is random, not chronological or stratified. It does not prevent within-visit temporal leakage or preprocessing leakage.
  5. Choose a schema-compatible model and run one batch before training. Construct it from the training sample dataset. Transformer uses embedding_dim, not hidden_dim; arguments are model-specific.
  6. Declare validation metrics and the exact monitor. Supply metrics=[...] to Trainer; the monitor must be a returned key. An absent key raises an error. Use monitor_criterion="min" for loss, "max" for AUC/accuracy.
  7. Evaluate the held-out test set once the model choice is fixed. Report prevalence, patient counts, discrimination, calibration, threshold policy and uncertainty as appropriate. PR-AUC's no-skill reference depends on prevalence, not a universal 0.5.
Raw lines 36 to 59
60## MIMIC-III prototype
62This is the 2.0.2 interface shape; the starter adds partition and label checks.
63Use a local authorized root for real data. The public bucket is synthetic data.
65```python
66from pyhealth.datasets import MIMIC3Dataset, get_dataloader, split_by_patient
67from pyhealth.tasks import MortalityPredictionMIMIC3
68from pyhealth.models import Transformer
69from pyhealth.trainer import Trainer
71base = MIMIC3Dataset(
72 root="https://storage.googleapis.com/pyhealth/Synthetic_MIMIC-III/",
73 tables=["diagnoses_icd", "procedures_icd", "prescriptions"],
74 cache_dir="./cache/mimic3", num_workers=1, dev=True,
76samples = base.set_task(MortalityPredictionMIMIC3())
77train, val, test = split_by_patient(samples, [0.6, 0.2, 0.2], seed=42)
78loaders = [get_dataloader(part, batch_size=16, shuffle=(i == 0))
79 for i, part in enumerate((train, val, test))]
80model = Transformer(dataset=train, embedding_dim=8)
81trainer = Trainer(model=model, metrics=["accuracy"], device="cpu")
82trainer.train(train_dataloader=loaders[0], val_dataloader=loaders[1],
83 epochs=1, monitor="accuracy", monitor_criterion="max")
84print(trainer.evaluate(loaders[2]))
85```
87The public synthetic task with `dev=True` (up to 1000 patients) produced only
8820 samples (18 negative, 2 positive) in the review run. Accuracy here checks execution only; random splits can lack a
89class, so this is unsuitable for reliable AUC estimation.
91`set_task` fits processors before this split. This prototype therefore learns its
92vocabulary from the whole cohort. For strict held-out evaluation, partition raw
93patients first, fit processors on training samples only, then reuse them for
94validation/test; see [examples](references/examples.md). Learned adjacency matrices
95(e.g. GAMENet) must also use training records only.

MIMIC-III prototype

This is the 2.0.2 interface shape; the starter adds partition and label checks. Use a local authorized root for real data. The public bucket is synthetic data.

from pyhealth.datasets import MIMIC3Dataset, get_dataloader, split_by_patient
from pyhealth.tasks import MortalityPredictionMIMIC3
from pyhealth.models import Transformer
from pyhealth.trainer import Trainer

base = MIMIC3Dataset(
    root="https://storage.googleapis.com/pyhealth/Synthetic_MIMIC-III/",
    tables=["diagnoses_icd", "procedures_icd", "prescriptions"],
    cache_dir="./cache/mimic3", num_workers=1, dev=True,
)
samples = base.set_task(MortalityPredictionMIMIC3())
train, val, test = split_by_patient(samples, [0.6, 0.2, 0.2], seed=42)
loaders = [get_dataloader(part, batch_size=16, shuffle=(i == 0))
           for i, part in enumerate((train, val, test))]
model = Transformer(dataset=train, embedding_dim=8)
trainer = Trainer(model=model, metrics=["accuracy"], device="cpu")
trainer.train(train_dataloader=loaders[0], val_dataloader=loaders[1],
              epochs=1, monitor="accuracy", monitor_criterion="max")
print(trainer.evaluate(loaders[2]))

The public synthetic task with dev=True (up to 1000 patients) produced only 20 samples (18 negative, 2 positive) in the review run. Accuracy here checks execution only; random splits can lack a class, so this is unsuitable for reliable AUC estimation.

set_task fits processors before this split. This prototype therefore learns its vocabulary from the whole cohort. For strict held-out evaluation, partition raw patients first, fit processors on training samples only, then reuse them for validation/test; see examples. Learned adjacency matrices (e.g. GAMENet) must also use training records only.

Raw lines 60 to 96
Reads a file references/examples.md :94
97## Critical API and scientific checks
99- **MIMIC-IV:** `MIMIC4Dataset(ehr_root=..., ehr_tables=[...])`; the simpler
100 `MIMIC4EHRDataset(root=..., tables=[...])` is also available. The root contains both
101 `hosp/` and `icu/`, not just `hosp/`.
102- **Caches exist by default.** `cache_dir=None` selects the user cache directory;
103 a supplied path selects its root. Cache identity does not hash raw file contents
104 or custom task source. Use a fresh cache root after changing data/config/task code.
105- **Patient access:** `patient.get_events(event_type=..., filters=[(...)])`, not
106 `patient.visits` or `visit.get_code_list(...)`.
107- **Patient independence:** visit-level random splitting can put one patient's
108 admissions in multiple partitions. Choose the split to match the deployment claim.
109- **Outcome availability:** discharge diagnoses and notes are unavailable for many
110 early prediction times. Feature timestamps and recording/store times both matter.
111- **Clinical interpretation:** attention weights and DDI penalties are modeling tools;
112 they do not establish causal explanation, prescribing safety or deployment readiness.
113- **Network resources:** medical-code tables download on first use and are cached.
114 Mapping may be one-to-many or empty; retain coding-system version and provenance.

Critical API and scientific checks

  • MIMIC-IV: MIMIC4Dataset(ehr_root=..., ehr_tables=[...]); the simpler MIMIC4EHRDataset(root=..., tables=[...]) is also available. The root contains both hosp/ and icu/, not just hosp/.
  • Caches exist by default. cache_dir=None selects the user cache directory; a supplied path selects its root. Cache identity does not hash raw file contents or custom task source. Use a fresh cache root after changing data/config/task code.
  • Patient access: patient.get_events(event_type=..., filters=[(...)]), not patient.visits or visit.get_code_list(...).
  • Patient independence: visit-level random splitting can put one patient's admissions in multiple partitions. Choose the split to match the deployment claim.
  • Outcome availability: discharge diagnoses and notes are unavailable for many early prediction times. Feature timestamps and recording/store times both matter.
  • Clinical interpretation: attention weights and DDI penalties are modeling tools; they do not establish causal explanation, prescribing safety or deployment readiness.
  • Network resources: medical-code tables download on first use and are cached. Mapping may be one-to-many or empty; retain coding-system version and provenance.
Raw lines 97 to 115
116## Reference files
118| Need | Read |
119|---|---|
120| Dependencies, devices, restricted data and caches | [installation](references/installation.md) |
121| Dataset classes, constructors, event access and splitting | [datasets](references/datasets.md) |
122| Task schemas, label semantics and custom tasks | [tasks](references/tasks.md) |
123| Model compatibility and training contracts | [models](references/models.md) |
124| Code lookup, mappings and tokenizer shapes | [medical codes](references/medcode.md) |
125| Adaptable recipes and train-only preprocessing | [examples](references/examples.md) |

Reference files

NeedRead
Dependencies, devices, restricted data and cachesinstallation
Dataset classes, constructors, event access and splittingdatasets
Task schemas, label semantics and custom taskstasks
Model compatibility and training contractsmodels
Code lookup, mappings and tokenizer shapesmedical codes
Adaptable recipes and train-only preprocessingexamples
Raw lines 116 to 126
Reads a file references/installation.md :120
Reads a file references/datasets.md :121
Reads a file references/tasks.md :122
Reads a file references/models.md :123
Reads a file references/medcode.md :124
Reads a file references/examples.md :125
Boilerplate, lines 127 to 142. The same text appears in 125 other files here. Close
127## Citing Scientific Agent Skills
129This skill is part of Scientific Agent Skills by K-Dense. If it materially contributed to a
130manuscript, report, presentation, or code release, add the paper to the references or
131software section and tell the user you did so:
133> Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent
134> Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065.
135> https://doi.org/10.48550/arXiv.2609.00065
137Always cite the current version. The DOI and https://arxiv.org/abs/2609.00065 resolve to the
138latest arXiv version, so never append a version suffix such as `v1`. When network access is
139available, fetch https://arxiv.org/abs/2609.00065 (or
140http://export.arxiv.org/api/query?id_list=2609.00065) before writing the reference and take
141the author list, year, and version from that record. If the record lists a journal reference
142or publisher DOI, cite the published version instead.

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.