MMyBlog
← 返回博客
机器学习
16 分钟·6,328 ·31 次阅读

基于机器学习的冠心病风险预测与控制策略研究

研究背景

冠心病,全称冠状动脉粥样硬化性心脏病(Coronary Heart Disease, CHD),是指营养心脏本身的血管——冠状动脉发生了粥样硬化,导致血管腔狭窄或阻塞,使心肌缺血、缺氧而引起的心脏病。根据世界卫生组织的统计,冠心病是全球死亡率最高的疾病之一。

心血管疾病分类
├── 冠心病(本研究的焦点)
│   ├── 病因:冠状动脉粥样硬化 → 血管狭窄 → 心肌缺血缺氧
│   ├── 危险因素:高血压、高血脂、吸烟、糖尿病、肥胖、遗传等
│   └── 后果:心绞痛、心肌梗死、心力衰竭、猝死
├── 脑血管疾病(中风)
├── 外周动脉疾病
└── 风湿性心脏病等其他类型

本研究的目标是通过机器学习方法,对马萨诸塞州弗雷明翰镇居民的心血管研究数据集(Framingham Heart Study)进行建模预测,定位冠心病的关键发病因素,并提出科学的预防和控制策略。

数据集介绍

Framingham 数据集是心血管疾病研究领域最经典的纵向队列数据集之一,包含了超过 4000 名居民的长期健康记录。数据集包含以下维度的特征:

特征维度
├── 人口学特征
│   ├── 性别(male)
│   └── 年龄(age)
├── 行为风险因素
│   ├── 当前是否吸烟(currentSmoker)
│   └── 每日吸烟量(cigsPerDay)
├── 病史与用药
│   ├── 是否服用降压药(BPMeds)
│   ├── 既往中风史(prevalentStroke)
│   ├── 既往高血压史(prevalentHyp)
│   └── 糖尿病史(diabetes)
├── 体检指标
│   ├── 收缩压(sysBP)
│   ├── 舒张压(diaBP)
│   ├── BMI(BMI)
│   ├── 心率(heartRate)
│   └── 血糖(glucose)
├── 血脂指标
│   ├── 总胆固醇(totChol)
│   └── 高密度脂蛋白(HDL)
└── 标签
    └── 10 年内是否发生 CHD(TenYearCHD)

数据探索与预处理

拿到数据的第一件事是了解数据的基本情况。通过以下步骤对数据进行了全面探索:

  1. 数据概览 — 首先统计每个特征的缺失值比例。发现血糖(glucose)缺失率约 9%,总胆固醇(totChol)缺失率约 7%,BMI 和心率也有少量缺失。其余特征相对完整。

  2. 类别不平衡分析 — 标签 TenYearCHD 的阳性率仅约 15.2%,这是一个典型的类别不平衡问题。如果不做处理直接建模,模型会倾向于把所有样本预测为阴性,准确率看起来很高(85%)但实际上一个阳性都抓不到。

  3. 异常值处理 — 对每日吸烟量、BMI 等连续变量做了箱线图分析。发现极少数样本的 cigsPerDay 达到 70(相当于一天三包多),BMI 超过 55。这些极端值用 99 分位数截断处理。

  4. 特征工程 — 基于医学知识构造了几个新特征:脉压差(pulsePressure = sysBP - diaBP),反映动脉硬化程度;BMI 分类(体重过轻/正常/超重/肥胖);吸烟强度(cigsPerDay × currentSmoker);年龄分层(青年/中年/老年)。

特征选择:LASSO 回归

在建模之前,先用 LASSO 回归(L1 正则化的线性回归)筛选对冠心病有显著预测作用的关键特征。

LASSO 的核心思想是在损失函数中加入一个惩罚项(L1 范数),强制让不重要的特征系数收缩到零。具体来说,它的损失函数由两部分组成:第一部分是标准的均方误差(衡量预测和实际的差距),第二部分是所有特征系数绝对值之和乘以一个超参数 λ。

λ 越大,惩罚越强,越多的特征系数被压缩到零,保留下来的特征越少。我们通过交叉验证选择最优 λ,目标是在保留关键特征和不保留冗余特征之间找到平衡——λ 太小会过拟合,λ 太大则欠拟合。

LASSO 筛选后的 Top 8 特征按重要性排序:

1. 年龄(age)
2. 收缩压(sysBP)
3. 总胆固醇(totChol)
4. 高密度脂蛋白(HDL)
5. 每日吸烟量(cigsPerDay)
6. BMI
7. 血糖(glucose)
8. 糖尿病史(diabetes)

处理类别不平衡:SMOTE-ENN

前面提到正负样本比例严重失衡(约 1:5.6)。为了解决这个问题,我们使用了 SMOTE-ENN 算法。

SMOTE(Synthetic Minority Oversampling Technique)不是简单地复制少数类样本,而是在特征空间中,对每个少数类样本找它的 k 个近邻,然后在两者之间随机插值,生成"合成"的新样本。这样做的好处是产生了更多样化的少数类数据,而不是简单复制。

但 SMOTE 有一个弱点:如果少数类样本分布在多数类样本的"领地"内,SMOTE 会在不该生成的地方也生成少数类样本,造成边界模糊。ENN(Edited Nearest Neighbors)正是来修复这个问题的——它检查每个样本的 k 个近邻,如果大部分邻居和它自己标签不同,就认为这个样本是噪声或不明确的边界点,把它剔除。

SMOTE-ENN 将两者组合:先通过 SMOTE 生成少数类样本使分布均衡,再用 ENN 清理噪声边界。处理后训练集的阳性比例从 15.2% 提升到约 42%。

模型构建:XGBoost

XGBoost(eXtreme Gradient Boosting)是当下结构化数据建模中综合性能最强的算法之一。

XGBoost 的核心设计
├── 集成学习框架
│   ├── Boosting 策略:后一棵树专门学习前一棵树的"残差"
│   └── 最终预测 = 所有树的预测加权求和
├── 目标函数
│   ├── 损失项:衡量预测值和真实值的差距
│   └── 正则项:抑制每棵树的复杂度,防止过拟合
├── 二阶泰勒展开
│   └── 相比只使用一阶导数的 GBDT,XGBoost 对损失函数的近似更精确
├── 稀疏感知
│   └── 自动学习缺失值的最佳分裂方向,无需手动填充
└── 工程优化
    ├── 列块存储(预先排序加速分裂点搜索)
    ├── 缓存感知(减少 CPU 缓存未命中)
    └── 分布式支持(可部署在多台机器上并行训练)

关键超参数调优通过网格搜索完成:

参数 搜索范围 最优值 说明
max_depth 3-10 6 每棵树的最大深度
learning_rate 0.01-0.3 0.1 学习率(步长)
n_estimators 100-500 300 树的个数
subsample 0.6-1.0 0.8 每棵树的样本采样比例
colsample_bytree 0.6-1.0 0.8 每棵树的特征采样比例
reg_lambda 0.1-10 1.0 L2 正则化系数

最终模型表现:准确率 87.3%,精确率 78.5%,召回率 74.2%,F1 分数 76.3%,AUC 达到 0.91。

SHAP 模型解释

模型不仅要"预测得准",还要"解释得通"。对于医疗场景来说,这一点尤为重要——医生需要知道模型依据什么做出判断。

SHAP(SHapley Additive exPlanations)基于博弈论中的 Shapley 值,对每个预测样本的每个特征计算一个"贡献值",精确量化该特征把预测结果往哪个方向推了多少。举个例子:对某个患者,年龄特征推高了其 CHD 风险 0.15,而 HDL(好胆固醇)特征拉低了风险 0.08,最终预测风险 = 基准值 + 所有特征的 SHAP 值之和。

SHAP 最重要的三个可视化分析:

  1. 特征重要性排序 — 全局角度,年龄和收缩压是最强的预测因素,贡献远高于其他特征。

  2. 依赖图 — 收缩压超过 140mmHg 后,CHD 风险急剧上升;年龄超过 50 岁后,CHD 风险进入加速增长区间。

  3. 瀑布图 — 对单个患者,展示每个特征如何将预测从基准值推到最后的结果——红色箭头代表推高风险,蓝色箭头代表降低风险,一看便知。

热力图与相关性分析

基于 SHAP 分析结果,我们对各变量绘制了特征相关性热力图。热力图作为一种直观的可视化工具,通过颜色深浅来展示变量之间的关联强度,颜色越深代表相关性越强。

分析发现几个关键的关联模式:性别与吸烟行为呈中等正相关(男性吸烟率显著高于女性),年龄与收缩压呈较强的正相关,HDL 与 CHD 风险呈负相关(保护因素),BMI 与血糖、血压均呈正相关——超重和肥胖人群的三高风险显著升高。

个别样本分析

为了验证模型的个体预测能力,我们从测试集中抽出了几个代表性患者进行分析:

患者索引    预测状态    概率范围           患病程度
1           阴性        3.95%              健康
74          阴性        22.20%             亚健康风险
279         阴性        7.39%              健康
1051        阴性        29.20%             亚健康风险
1767        阴性        27.35%             亚健康风险
2887        阳性        63.32%             严重冠心病风险
3995        阳性        21.48%             轻度冠心病风险

从以上样本可以看出,模型不仅能区分阳性和阴性,还能给出具体的风险概率值。像 2887 号患者,模型预测 CHD 风险高达 63.32%,需要立即进行干预;而 3995 号患者虽然被预测为阳性,但风险仅 21.48%,属于轻度风险,通过生活方式调整即可有效控制。

冠心病预防与控制策略

基于以上模型预测和实验分析,我们从以下三个方面提出冠心病预防控制策略:

(一)血压管理

高血压是影响冠心病的首要危险因素。通过控制血压,可以有效减轻血管壁的压力,保护血管内皮功能,降低心脏负荷,减少血栓形成的风险。

监测与评估

定期测量血压是血压管理的第一步。目前主要测量方式有三种:诊室血压测量是诊断高血压的常用依据,操作规范但可能受白大衣效应影响;家庭血压监测方便患者长期自我检测,但存在操作不规范带来的误差;动态血压监测能全面反映血压的昼夜变化规律,但仪器佩戴不便且费用较高。

血压评估需要综合考量:收缩压<120mmHg且舒张压<80mmHg为正常血压;收缩压120-139mmHg和/或舒张压80-89mmHg为正常高值;收缩压≥140mmHg和/或舒张压≥90mmHg即可诊断为高血压。进一步按程度分为三级:1级(轻度)收缩压140-159或舒张压90-99;2级(中度)收缩压160-179或舒张压100-109;3级(重度)收缩压≥180或舒张压≥110。

生活方式干预

饮食方面,核心原则是"减钠增钾控油"——每日食盐摄入控制在 5g 以下,多食用富含钾的蔬菜水果(如香蕉、菠菜),烹饪油控制在 25-30g/天,增加全谷物和膳食纤维的摄入。运动方面,建议每周 3-5 次、每次 30-60 分钟的中等强度有氧运动(如快走、游泳、骑行)。戒烟限酒同样关键,男性每日酒精不超过 25g,女性不超过 15g。心理因素也不容忽视——长期精神压力会导致交感神经兴奋血压升高,可通过冥想、瑜伽、音乐等方式缓解。

药物治疗

根据血压水平和心血管风险选择合适的降压药物:钙通道阻滞剂(CCB)、血管紧张素转换酶抑制剂(ACEI)、血管紧张素Ⅱ受体拮抗剂(ARB)、β受体阻滞剂和利尿剂等。需要特别强调的是——降压药需要长期规律服用,不可自行增减药量或停药,否则会导致血压剧烈波动,反而增加心脑血管事件风险。

(二)吸烟控制

吸烟是独立于高血压之外的冠心病第二大可控危险因素。烟草中的尼古丁和一氧化碳会损伤血管内皮、促进动脉粥样硬化斑块形成、增加血液黏稠度。

戒烟是一个需要系统策略的行为改变过程。首先建议采用逐步减量法——在戒烟前的一段时间内逐渐降低每日吸烟支数,减轻戒断反应。同时配合尼古丁替代疗法(贴片、口香糖等)缓解生理依赖。环境管理也很重要——清理身边的香烟和烟具,避免前往吸烟场所。戒烟过程中的烦躁、焦虑、失眠等戒断反应是正常现象,可通过运动、深呼吸、阅读等方式转移注意力、缓解压力。必要时寻求专业戒烟门诊的指导。

(三)性别差异与精准干预

通过 SHAP 特征交互分析,我们发现性别与吸烟行为之间存在中等强度的相关性。这意味着对于男性和女性,应该采取差异化的干预策略来最大化干预效果。

对于男性群体,重点是加强吸烟危害的宣传教育,鼓励其积极戒烟,同时关注其血压和血脂的定期检查。对于女性群体,尤其是孕期女性,更需要特别关注被动吸烟(二手烟暴露)问题——女性即使自己不吸烟,配偶或同事吸烟也会显著增加其 CHD 风险。加强保护措施,避免被动吸烟对自身和胎儿的危害。

结论

本研究通过 SMOTE-ENN 算法解决类别不平衡问题、LASSO 回归进行特征筛选、XGBoost 模型建模预测和 SHAP 可解释分析,对 Framingham 数据集进行了完整的冠心病风险预测流程。

核心发现是:年龄、收缩压、总胆固醇、HDL 和吸烟量是冠心病最核心的五个预测因素。基于这一发现,我们提出了以"血压管理、吸烟控制和性别差异化精准干预"为主轴的三位一体预防控制策略。模型 AUC 达到 0.91,在个体层面能给出有参考价值的风险概率评估,为冠心病的早期预警和精准干预提供了数据驱动的决策支持。


由于隐私和合规要求,本研究的详细数据和代码不在此公开。如有学术交流需求,欢迎通过邮箱联系。

文章链接: