Baybeechristy/Early-Detection-of-Type-2-Diabetes-Using-Machine-Learning-Explainable-AI-and-Clinicial-Rule
GitHub: Baybeechristy/Early-Detection-of-Type-2-Diabetes-Using-Machine-Learning-Explainable-AI-and-Clinicial-Rule
基于XGBoost与可解释AI的2型糖尿病非侵入性筛查系统,仅用五个基础体征即可完成风险评估并内置临床规则矛盾检测以减少漏诊。
Stars: 0 | Forks: 0
# 🏥 使用机器学习、可解释 AI 与交互式仪表盘可视化早期检测 2 型糖尿病
[](https://2aaad6bepdxuhswjdxz9b5.streamlit.app)






### 🔗 [启动实时仪表盘](https://2aaad6bepdxuhswjdxz9b5.streamlit.app)
## 📌 问题背景
- 全球有 **5.37 亿**成年人患有糖尿病 (IDF, 2021)
- **三分之一** 的人确诊过晚,此时并发症已经发生
- 现有的机器学习研究使用实验室指标(HbA1c,葡萄糖)作为特征,**但这些指标本身就是诊断依据**,这使得预测陷入了循环论证
- 尚未有经过评审的研究在一个 pipeline 中同时结合校准、双重可解释性、鲁棒性验证以及临床安全检查
## 💡 解决方案
一个提出了更难且更有用问题的筛查系统:
仅使用 **年龄、性别、BMI、收缩压和舒张压**,该系统就能对患者进行筛查,解释其推理过程,并通过临床矛盾检测层发现自身的错误。
## 🏆 关键结果
| 指标 | 数值 | 意义 |
|--------|-------|----------------|
| **主要模型** | XGBoost(通过 192 种组合的 GridSearchCV 进行调优) | 系统性优化,而非默认设置 |
| **AUC** | 0.766 | 对于 5 个非侵入性特征而言具有竞争力 |
| **召回率 @ 0.15** | 81.3% 检测出 256/315 名糖尿病患者 | 筛查优先级:尽量减少漏诊 |
| **校准度 (ECE)** | 0.0085 | 预测概率与现实的误差在 1% 以内 |
| **鲁棒性** | 10 个随机种子下的 AUC 标准差 = 0.0134 | 绝非偶然的划分——真正稳定 |
| **漏诊病例** | 59 例(相比之下,默认 XGBoost 为 106 例,阈值为 0.50 时为 315 例) | 调优 + 阈值优化挽救了 256 名患者 |
### 🔬 校准的意外发现
事后校准(Platt Scaling,Isotonic Regression)反而**让结果变得更糟**。较浅的 XGBoost(depth=3, lr=0.01)本身就已经具备了良好的自然校准能力。这是一个值得发表的发现,因为大多数研究都认为校准总是有益的。
### 🚨 阈值的重要发现
在 0.50 的默认阈值下,模型检测出 **零** 名糖尿病患者。敏感度 = 0.000。每一名糖尿病患者都被漏诊了。这不是一个 bug,而是 15.5% 的患病率将所有概率压低至 0.50 以下时的必然结果。
## 🧠 系统架构
```
NHANES 2015-2018 Data (10,168 adults)
│
▼
┌─────────────────────────────┐
│ Data Preprocessing │
│ • Cycle filter (2015-18) │
│ • ADA label construction │
│ • BP averaging │
│ • Age ≥ 18 filter │
│ • 80/20 stratified split │
└──────────┬──────────────────┘
▼
┌─────────────────────────────┐
│ 5 Models Trained & Compared│
│ • Logistic Regression │
│ • Random Forest │
│ • XGBoost Default │
│ • XGBoost Tuned ★ │
│ • Neural Network (MLP) │
└──────────┬──────────────────┘
▼
┌─────────────────────────────────────────────┐
│ Evaluation Pipeline │
│ ┌───────────┐ ┌───────────┐ ┌────────────┐│
│ │Calibration│ │ Threshold │ │ Robustness ││
│ │ECE: 0.0085│ │ 0.15 → 81%│ │ 10 seeds ││
│ └───────────┘ └───────────┘ └────────────┘│
└──────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ Explainability │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ SHAP │ │ LIME │ │
│ │ (TreeSHAP) │ │ (500 perturbations) │ │
│ │ Global+Local │ │ 4 clinical cases │ │
│ └──────────────┘ └──────────────────────┘ │
└──────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ 🚨 Clinical Rule Contradiction Layer │
│ Compares ML prediction vs ADA criteria │
│ 4 outcomes: Agree Low / Agree High / │
│ Model Flag / CONTRADICTION │
└──────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ 📊 Streamlit Dashboard (8 Tabs) │
│ Real-time screening • SHAP explanations │
│ Interactive contradiction checker │
└─────────────────────────────────────────────┘
```
## 📊 仪表盘 — 8 个交互式选项卡
| 选项卡 | 显示内容 |
|-----|---------------|
| 🏠 **主页** | 数据集概览、KPI、分布、相关性 |
| 🔍 **筛查** | 输入患者测量数据 → 风险评分 + SHAP 解释 + 临床规则检查 |
| 📈 **模型结果** | 5 个模型的对比、ROC 曲线、混淆矩阵 |
| 📐 **校准** | Brier 分数、ECE、校准曲线 —— 证明概率是可信的 |
| 🎯 **阈值** | 分析了 8 个阈值,以确切解释为什么 0.50 会失败而 0.15 有效 |
| 🔁 **鲁棒性** | 10 个随机种子的验证,证明结果绝非侥幸 |
| 🧠 **可解释性** | 全局 SHAP + 针对任意患者的个体 SHAP/LIME 并排对比 |
| 🚨 **临床规则** | 4 个真实的 NHANES 案例研究 + 交互式矛盾检查器 |
## 🚨 临床规则层 —— 创新贡献
这是本系统最具特色的部分。目前没有已评审的研究包含这一层。
**问题所在:** 一位血压正常的偏瘦患者,在非侵入性特征上可能看起来属于低风险 —— 但其血糖水平却严重超标。
**来自数据集的真实案例:**
| 特征 | 数值 |
|---------|-------|
| 年龄 | 56 |
| BMI | 24.4 (偏瘦) |
| 血压 | 114/81 (正常) |
| **模型预测** | **14.2% → 低风险** |
| HbA1c | **13.7%** (阈值:6.5%) |
| Glucose | **397 mg/dL** (阈值:126) |
| **临床规则** | **🚨 矛盾警告** |
如果没有规则层,这位患者就会带着一份健康的体检报告离开。而有了它,他们就会被标记为需要立即复查。
## 🔄 与现有文献的对比
| 研究 | 特征 | AUC | 校准 | XAI | 鲁棒性 | 仪表盘 | 临床规则 |
|-------|----------|-----|-------------|-----|------------|-----------|----------------|
| Kopitar (2020) | 常规临床数据 | 0.77–0.84 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Dinh (2019) | 实验室指标 + 生活方式 | 0.83 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Qin (2022) | 实验室指标 + 生活方式 | 0.83 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Zou (2018) | 实验室指标 + 临床数据 | 0.82 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Riveros Perez (2025) | 生活方式 | 0.817 | ❌ | ❌ | ❌ | ❌ | ❌ |
| **本项目** | **5 个非侵入性特征** | **0.766** | **ECE 0.0085** | **SHAP+LIME** | **10 个随机种子** | **8 个选项卡** | **4 种结果** |
AUC 较低 —— 但这是不使用血液检测特征的代价。在所有其他维度上,本项目都超越了已发表的文献。
## 🛠️ 技术栈
| 工具 | 用途 |
|------|---------|
| Python 3.x | 核心语言 |
| pandas / NumPy | 数据处理 |
| scikit-learn | ML 模型、评估、校准 |
| XGBoost | 主模型 (梯度提升) |
| SHAP | 全局 + 局部可解释性 (TreeExplainer) |
| LIME | 局部可解释性 (基于扰动) |
| Matplotlib / Seaborn | 可视化 |
| Streamlit | 交互式仪表盘 |
## 📂 项目结构
```
├── app.py # Streamlit dashboard (1,800+ lines)
├── nhanes_diabetes_clean.csv # Cleaned NHANES dataset (10,168 adults)
├── requirements.txt # Python dependencies
├── README.md # This file
└── Early Detection of Type 2 # Full Kaggle notebook (63 cells)
Diabetes using ML, AI/
```
## 🚀 本地运行
```
git clone https://github.com/Baybeechristy/Early-Detection-of-Type-2-Diabetes-Using-Machine-Learning-Explainable-AI-and-Clinicial-Reasoning.git
cd Early-Detection-of-Type-2-Diabetes-Using-Machine-Learning-Explainable-AI-and-Clinicial-Reasoning
pip install -r requirements.txt
streamlit run app.py
```
## 📋 数据集
| 属性 | 数值 |
|----------|-------|
| **来源** | NHANES 2015–2018 (CDC) |
| **规模** | 清洗后共 10,168 名成年人 |
| **患病率** | 15.5% 为糖尿病患者 (1,577 例) |
| **标签** | ADA 标准:HbA1c ≥ 6.5% 或空腹血糖 ≥ 126 mg/dL |
| **特征** | 年龄、性别、BMI、收缩压、舒张压 |
## 👤 作者
**Irene Christabel Ogbomo**
诺丁汉特伦特大学 计算机科学理学学士 (2025/26)
指导老师:Owa Kayode
📧 联系方式:[通过 GitHub](https://github.com/Baybeechristy)
## ⚠️ 免责声明
本系统是一个作为大学最后一年项目开发的**研究原型**。它**不是医疗器械**,绝不能用于临床诊断。请务必咨询合格的医疗保健专业人员以获取医疗建议。
标签:Apex, Kubernetes, Kubernetes 安全, LIME, NTU, Python, Scikit-learn, SHAP, Streamlit, XGBoost, 临床决策支持系统, 二型糖尿病, 医疗健康, 医疗数据分析, 可解释人工智能, 无后门, 早期筛查, 机器学习, 校准曲线, 模型鲁棒性, 计算机科学毕业设计, 访问控制, 逆向工具, 非侵入式检测, 预测模型