Medical Research Skills for Claude Code, Codex, Cursor & Copilot
의사가 만든 58개 오픈소스 스킬로 의료 연구 전 과정을 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Hourly ICU sepsis early-warning model scored on the official PhysioNet 2019 Challenge utility metric, with a live demo
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A model that scores ICU patients every hour from routine vitals and labs and tries to flag sepsis up to 12 hours before onset.
Live demo | Write-up | Portfolio
It's trained on the PhysioNet 2019 Challenge data and scored with the Challenge's own utility metric.
I wanted to build something in healthcare and learn the tools along the way. The task, data and scoring all come from the 2019 PhysioNet/CinC Challenge paper (Reyna et al., cited at the bottom). It was a heavy task for a laptop. Mine kept breaking.
Live demo: replays held-out patients hour by hour and shows when the alert would have fired.
4,441 held-out patients, split by patient so none of them were seen in training. The alert threshold was picked by cross-validation on the training patients only.
| Metric | Value |
|---|---|
| Normalized utility (official Challenge metric) | 0.424 |
| AUROC / AUPRC (hourly) | 0.817 / 0.092 |
| Septic patients flagged in the useful window (−12h to +3h of onset) | 370 / 398 (93%) |
| Median warning before onset, among those flagged | 12 h |
| Non-septic patients with at least one alarm | 2,381 / 4,043 (59%) |
| Septic patients who also alarmed before the useful window | 271 / 398 (68%) |
Read the last two rows before the first four. The model catches most septic patients partly because it alarms on a lot of people. The 12h median is also the most the window allows: many of those patients were already alarming when the window opened.
The threshold cross-validation picked (0.32) sits at the peak of the test curve.
flowchart LR
A[".psv files<br/>one row per ICU hour"] --> B["load.py"]
B --> C["features.py<br/>causal features"]
C --> D["train.py<br/>patient split,<br/>CV-tuned threshold"]
D --> M[("model.joblib")]
D --> E["evaluate.py<br/>utility, AUROC, lead time"]
M --> F["app.py<br/>FastAPI POST /score"]
F --> G["build_pages.py<br/>pre-scores demo patients"]
G --> H["GitHub Pages"]
Python 3.13, pandas, scikit-learn's HistGradientBoostingClassifier, FastAPI,
a plain JS demo page, pytest, ruff, Docker, GitHub Actions.
Choices that matter:
compute_prediction_utility, copied
unchanged into src/sepsis_utility.py. It gives the most credit for alerts
6 to 12h before onset, penalizes late or missed cases hard, and charges 0.05
for every false-alarm hour.tests/test_features.py appends and corrupts future
hours and checks that nothing earlier changes.make setup # pinned dependencies
make run # demo + API at http://localhost:8000
make test
make lint
Without make (plain Windows, for example):
pip install -r requirements-dev.txt
export PYTHONPATH=src # PowerShell: $env:PYTHONPATH="src"
uvicorn app:app --app-dir src --reload
pytest -q
The trained model (artifacts/model.joblib) is committed, so the demo runs
without training anything.
To reproduce the results, download the Challenge training data (open access, CC BY 4.0) from https://physionet.org/content/challenge-2019/1.0.0/, then:
python src/train.py --data training_setA # ~15 min
python src/evaluate.py
python scripts/export_demo.py # picks the demo patients
python scripts/make_figures.py
python data/make_sample.py followed by python src/train.py runs the whole
pipeline on synthetic patients in the real schema, no download needed. The
scores it prints are near-perfect and mean nothing.
POST /score takes one patient's hourly rows with the Challenge column names.
Interactive docs are at /docs when running locally.
curl -X POST localhost:8000/score -H "Content-Type: application/json" \
-d '{"records": [{"ICULOS": 1, "HR": 92, "Temp": 38.4, "Resp": 24},
{"ICULOS": 2, "HR": 104, "MAP": 63, "Lactate": 2.9}]}'
The response has hourly_risk, threshold, first_alert_hour and a
recommendation string. ICULOS is required, an integer ≥ 1 and unique per
row. Every measurement is optional. Unknown fields get a 422, so a typo like
"hr" can't quietly be scored as "never measured". Empty payloads and more
than 2,000 rows are rejected too.
The live demo is static. scripts/build_pages.py runs each demo patient
through the real /score endpoint at build time and saves the responses next
to the page, so the numbers on the site come from the committed model. CI
(ruff, tests, a Docker smoke test) has to pass on main before
.github/workflows/pages.yml publishes it.
I tried Hugging Face Spaces first, but Docker Spaces need a paid plan now. The Dockerfile still works on any host that sets $PORT (Render, Fly.io,
Cloud Run) if you want the live API. Don't point it at real patient data: that
needs authentication, audit logging and a hospital network.
src/config.py the 40-column Challenge schema and shared constants
src/load.py read per-patient .psv files
src/features.py causal feature engineering
src/train.py training, CV threshold tuning
src/evaluate.py utility and lead-time report
src/sepsis_utility.py the Challenge's metric (see NOTICE.md)
src/app.py FastAPI scorer + demo page
src/static/ demo page and 7 held-out demo patients
scripts/ demo-patient export, README figures, Pages build
tests/ causality, metric, loader and API tests
data/make_sample.py synthetic patients in the real schema
PhysioNet/CinC Challenge 2019 data, CC BY 4.0. Full citations and the metric's license are in NOTICE.md.
Reyna MA, et al. Early Prediction of Sepsis From Clinical Data: The PhysioNet/Computing in Cardiology Challenge 2019. Critical Care Medicine 48(2):210-217 (2020).