# Triagegeist：用机器学习预测急诊分诊紧急程度的实战项目

> 一个基于结构化临床数据预测急诊患者紧急程度（ESI分级）的机器学习项目，使用LightGBM、XGBoost和神经网络，在Kaggle竞赛中实现了0.973的Macro F1分数。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-04T03:46:03.000Z
- 最近活动: 2026-06-04T03:50:02.771Z
- 热度: 161.9
- 关键词: machine learning, healthcare, emergency department, triage, LightGBM, XGBoost, clinical data, ESI, feature engineering
- 页面链接: https://www.zingnex.cn/forum/thread/triagegeist
- Canonical: https://www.zingnex.cn/forum/thread/triagegeist
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者：** Pyxis567
- **来源平台：** GitHub
- **原始标题：** triagegeist
- **原始链接：** https://github.com/Pyxis567/triagegeist
- **发布时间：** 2026年6月
- **相关竞赛：** Kaggle triagegeist竞赛

---

## 项目背景与意义

急诊分诊是医院运营中最关键的环节之一。当患者涌入急诊科时，护士需要在几分钟内判断谁需要立即救治、谁可以稍等。传统的分诊依赖人工经验，但面对大量患者时，判断的准确性和一致性很难保证。

Triagegeist项目正是针对这一痛点，尝试用机器学习模型辅助甚至替代传统的人工分诊流程。该项目参加了Kaggle上的triagegeist竞赛，目标是根据患者在分诊点采集的结构化临床数据，预测其被分配的紧急程度等级（ESI 1-5级）。

---

## ESI分级系统简介

ESI（Emergency Severity Index，紧急严重度指数）是美国急诊医学领域广泛使用的五级分诊系统：

| 等级 | 标签 | 描述 |
|------|------|------|
| 1 | 复苏级 | 立即危及生命，需立即抢救 |
| 2 | 紧急级 | 高风险，不应等待 |
| 3 | 紧急但稳定 | 稳定但需要多种资源 |
| 4 | 次紧急 | 稳定，仅需一种资源 |
| 5 | 非紧急 | 稳定，无需资源 |

这个分级系统决定了患者就诊的优先顺序，直接影响救治效果。

---

## 数据集构成与特征工程

项目使用了包含8万条训练记录的数据集，原始数据包括：

- **训练集：** 80,000条带标签的患者记录（40个特征+目标变量）
- **测试集：** 20,000条未标记记录用于提交
- **主诉文本：** 每位患者的原始自由文本主诉
- **病史记录：** 25种二元合并症标记

### 核心特征组

原始特征涵盖了急诊分诊的各个方面：

1. **生命体征：** 血压、心率、血氧饱和度、体温、呼吸频率
2. **人口统计：** 年龄、性别、保险类型
3. **临床评分：** NEWS2评分、GCS评分、疼痛评分
4. **到达背景：** 到达方式、时间、班次
5. **既往利用：** 过去12个月的急诊就诊和住院次数

### 特征工程亮点

项目构建了297个特征，展示了扎实的特征工程能力：

- **缺失值指示器：** 针对血压、呼吸频率、体温等关键指标创建缺失标记，因为缺失本身与分诊等级相关
- **中位数填充：** 仅在训练集上拟合，避免数据泄漏
- **时间特征：** 创建白天（8-17点）、傍晚（18-22点）、夜间时段标记
- **年龄分箱：** 将年龄划分为8个组（婴儿到老年），进行独热编码
- **生命体征交互：** 脉压比、MAP与心率乘积等衍生特征
- **合并症负担：** 25种病史标记的求和
- **既往利用率比率：** 入院次数/(急诊就诊次数+1)
- **NEWS2风险标记：** 高分NEWS2（≥7）、中等NEWS2（5-6）
- **qSOFA评分：** 用于脓毒症筛查的简化评分
- **跨评分交互：** 疼痛×NEWS2、GCS×NEWS2、合并症×NEWS2等
- **年龄分层特征：** 儿童/老年标记、PALS调整的心率/呼吸阈值
- **TF-IDF文本特征：** 对主诉文本提取100个unigram+bigram特征

---

## 模型架构与实验结果

项目尝试了多种模型，所有模型均使用5折分层交叉验证，并在完整训练集上重新训练用于生成测试预测。

### LightGBM（最佳模型）

- 300棵 estimators，最大深度7
- 学习率0.1，子采样率0.8
- 支持GPU训练
- **Macro F1：0.9730**

### XGBoost

- 类似配置，支持CUDA加速
- **Macro F1：0.9705 ± 0.0014**

### 神经网络（PyTorch MLP）

- 架构：输入层→BatchNorm→ReLU→Dropout(0.3)→[256,128,64]
- 单层80/20分层 holdout
- Adam优化器，交叉熵损失
- **Holdout Macro F1：约0.9694**

### 特征选择实验

项目测试了四种特征选择策略，但发现没有一种能显著优于297特征的完整集合（差异均在±0.0014的噪声范围内）。因此最终保留了全部297个特征。

有趣的是，LightGBM显示有三个特征的 importance 为零（高血压危象标记、呼吸过缓标记、低体温标记），这些是罕见事件，在该数据集中没有提供有用的分裂点。

---

## 技术实现细节

项目代码结构清晰，模块化程度高：

```
triagegeist/
├── CLAUDE.md              # 代理工作流和风格指南
├── README.md
├── train_all.py           # 运行所有模型并保存最佳提交
├── triagegeist.ipynb      # 主集成+可视化notebook
├── raw_data/              # 原始数据
├── src/
│   ├── feature_engineering.py  # 所有特征转换
│   ├── models.py              # 模型定义
│   └── utils.py               # 指标、绘图、随机种子
├── submissions/           # 生成的CSV提交文件
└── figures/               # 自动保存的图表
```

### 可复现性

项目设置了统一的随机种子 SEED = 93，传递给所有模型和交叉验证分割，确保结果可复现。

---

## 临床价值与启示

这个项目展示了机器学习在医疗分诊中的实际应用潜力：

1. **准确性：** 0.973的Macro F1分数意味着模型在五个紧急等级上都有很高的分类准确率
2. **实时性：** 基于分诊点即可采集的结构化数据，无需等待实验室结果
3. **公平性：** 特征工程考虑了年龄分层（儿童、成人、老年），有助于避免年龄偏见
4. **可解释性：** 基于临床评分的特征（NEWS2、qSOFA、GCS）都是医学上公认的指标

当然，实际部署还需要考虑数据隐私、模型漂移、边缘案例处理等问题。但作为概念验证，这个项目提供了很好的起点。

---

## 关键要点

Triagegeist项目是一个完整的端到端机器学习实战案例，从原始数据到竞赛级表现。其核心经验包括：

- **特征工程是王道：** 297个精心设计的特征比算法调优更重要
- **领域知识至关重要：** NEWS2、qSOFA、GCS等临床评分是特征设计的核心
- **梯度提升树仍是表格数据的首选：** LightGBM和XGBoost的表现优于神经网络
- **完整的数据处理流程：** 缺失值处理、编码、交互特征、文本特征缺一不可

对于想进入医疗AI领域的开发者，这是一个极佳的参考项目。
