1. 背景
心血管疾病(CVD)是全球导致死亡与致残的主要因素之一,在中国,CVD患病率呈持续上升态势[1] [2],给公共卫生系统造成了极为沉重的负担。
CVD的早发现与预防是降低其发病率与死亡率的核心要点。传统诊断途径往往取决于医生经验,且要求患者在医院接受繁杂检查例如冠脉CT、心肌酶、动态血压监测等,这对于社区老年人或偏远地区居民而言可能极为不便。众多患者直至出现症状,疾病已发展至一定阶段才前去就医,进而错失最佳干预契机。
近年来,机器学习技术迅猛发展,给医疗健康领域带来了变革性的影响[3]-[5]。机器学习作为模拟人类学习与决策过程的计算方法,可从海量数据里自动识别模式与关联,达成对复杂疾病的早期识别与预测。基于此,本研究致力于探索怎样运用机器学习技术,尤其是数据挖掘与模式识别手段,提升社区CVD的识别效率与精准度。
本研究的目的具体涵盖:其一,明确用于识别CVD的关键特征,并构建一套行之有效的特征选择体系;其二,挑选并对比多种机器学习算法,评定其在社区CVD识别方面的效能;其三,验证所构建模型的泛化能力及其在实际应用中的可用性。借由本研究,期望为社区CVD的早期识别提供一种全新的技术路径,助力医生更为精准地甄别风险个体,进而实施早期干预,改善患者预后状况,减轻社会医疗负担。
2. 方法
2.1. 数据收集和处理
本研究的数据源自中国健康与退休纵向研究(China Health and Retirement Longitudinal Study, CHARLS)数据库。CHARLS数据库是由北京大学主持的大型跨学科调查项目。它主要收集中国45岁及以上中老年人的个人基本信息、健康状况、生活方式、经济和家庭状况等数据。采用多阶段分层抽样,通过问卷和体格检查结合的方式收集数据,并且定期跟踪更新,数据质量高、样本量大、内容丰富,数据可共享,为多领域研究提供支持[6]。
本研究从中选取了2015年13,420个样本数据,这些数据包含易于获取的人口特征信息,比如年龄、性别、教育水平、婚姻状况等,还涵盖社区常规生化检查指标,像白细胞计数、总胆固醇、高密度脂蛋白胆固醇、低密度脂蛋白胆固醇、甘油三酯、血糖水平等,总计29个指标。大专以下视为低教育水平,大专及以上视为高教育水平。高血压、糖尿病、心脏病、中风、慢性肺病、慢性肾病、哮喘、肿瘤通过患者自我报告病史获取。吸烟、饮酒史通过询问“你是否吸烟、饮酒?”获取信息。血检指标是在空腹状态下由专家医务人员收集静脉血样,由中心实验室进行分析得出。
在数据处理阶段,缺失值是随机缺失的,具体缺失信息见图S1。鉴于数据完整性对模型训练十分关键,我们采用剔除含有缺失值样本的方式。经此操作,数据集的样本数量从原来的13,420个减少至7546个(如图1)。
注:Logistic:逻辑回归;RF:随机森林;KNN:K-最近邻算法;DT:决策树;MLP:神经网络;CVD:心血管病;HBP:高血压;heart:心脏病;HH:心脏病合并高血压;AUC:曲线下面积。
Figure 1. Flow chart
图1. 流程图
随后,把处理后的数据集随机划分为训练集与验证集,其中训练集占比75%,用于开展模型的训练以及超参数调优工作;验证集占比25%,用来进行模型的性能评估,进而选出最佳模型。
2.2. 模型构建
本研究运用五种常见的机器学习算法构建识别CVD人群模型,具体包括逻辑回归(Logistic Regression, LR)、决策树(Decision Tree, DT)、K-最近邻算法(K-Nearest Neighbors, KNN)、随机森林(Random Forest, RF)以及神经网络(Multilayer Perceptron, MLP)。
LR模型作为广泛应用的二分类算法,借助逻辑函数把线性回归模型的输出转换为概率值,以此预测样本归属于正类或负类的概率[7]。
DT是呈现树形结构的分类器,依靠一系列规则对数据进行分割,每条规则对应数据集中的一个特征,并在特定阈值处实施分割[8]。
KNN属于基于实例的学习方法,通过测算不同特征值之间的距离来开展分类工作。针对待分类样本,该算法会查找训练集中与之距离最近的K个邻居,再依据这些邻居的分类情况预测待分类样本的类别[9]。
RF为集成学习算法,由多个决策树构成,在构建每棵树时随机抽取特征与样本,这不仅增强了模型的泛化能力,还可提高预测准确性、降低过拟合风险,并且能处理大量特征,同时提供特征重要性评估[10]。
MLP是模仿人脑神经元连接的深度学习模型,包含输入层、隐藏层和输出层等多个层级。MLP借助非线性激活函数在各层之间传递信息,进而捕捉数据内的复杂关系[11]。
上述这些算法分别代表了不同的机器学习范式,涵盖线性模型、基于树的模型、基于实例的模型以及深度学习模型,能为识别社区CVD提供全面且多样的视角。
为优化模型性能,本研究采用网格搜索结合交叉验证的方法来选定每种算法的最佳超参数。其中,网格搜索会遍历预定义的参数网格,系统评估所有可能的参数组合,进而找出最优参数设置。对于不同算法,具体调整的超参数如下:针对LR模型,调整正则化参数和惩罚项;对于DT与RF,调整树的深度、分支的最小样本数等参数;在KNN算法中,调整邻居数量和距离度量方式;而对于MLP,则调整隐藏层数量、节点数,以及学习率和迭代次数等参数。
此外,为降低过拟合风险并确保模型具备良好泛化能力,采用了5折交叉验证策略。即把数据集划分成五个子集,每次留出一个子集当作验证集,其余四个子集用于训练,如此重复五次,保证每个子集都有一次作为验证集的机会。
2.3. 模型评估
用验证集评估模型的性能时,我们选择了ROC_AUC作为主要评估指标。ROC_AUC是一个衡量模型区分能力的指标,它考虑了模型在不同阈值下的性能,能够提供关于模型预测准确性的全面信息。通过比较不同算法的ROC_AUC值,我们可以确定哪种算法在识别社区CVD方面表现最佳。另外计算模型的准确度、精确度、召回率和F1分数,准确度
,(TP是真阳性(True Positive),TN是真阴性(True Negative),FP是假阳性(False Positive),FN是假阴性(False Negative)),是分类正确的样本数量与总样本数量的比率。精确度
,它关注模型预测为正类的样本中,实际上也属于正类的样本所占的比例。召回率
,它关注所有实际为正类别的样本中,有多少被正确地预测为正类别。F1分数
,是精确度和召回率的调和平均值,它综合考虑了精确度和召回率,在精确度和召回率之间找到一个平衡点。
根据ROC_AUC值选择表现最优的模型进一步构建心脏病、高血压、心脏病合并高血压的模型。
2.4. 模型解释
SHapley Additive exPlanations (SHAP)是一种用于解释机器学习模型预测结果的方法。该方法以合作博弈论中的Shapley值为基础,能够确定各个特征对模型预测所做的贡献程度[12]。SHAP具备提供局部解释与全局解释的能力。从局部角度来看,它可针对单个样本的预测结果进行解释;而从全局层面出发,它又能用于分析特征在整个数据集范围内对模型预测的总体贡献情况。
3. 结果
3.1. 基线特征
依据纳入与排除标准,剔除缺失数据后,最终共纳入7546例人群(见表1)。在这些人群中,患有CVD的有1770例,其中患心脏病的为672例,患高血压的有1447例,同时患有高血压和心脏病的有349例。
Table 1. Baseline characteristics of populations grouped according to CVD outcomes
表1. 根据CVD结局分组的人群基线特征
|
总人群 |
无 |
有 |
P值 |
|
N = 7546 |
N = 5776 |
N = 1770 |
年龄(岁) |
58.0 [50.0; 65.0] |
55.0 [48.0; 63.0] |
63.0 [56.0; 69.0] |
<0.001 |
性别(n, %) |
|
|
|
<0.001 |
女性 |
5837 (77.4%) |
4344 (75.2%) |
1493 (84.4%) |
|
男性 |
1709 (22.6%) |
1432 (24.8%) |
277 (15.6%) |
|
教育程度(n, %) |
|
|
|
0.058 |
低 |
1669 (22.1%) |
1307 (22.6%) |
362 (20.5%) |
|
高 |
5877 (77.9%) |
4469 (77.4%) |
1408 (79.5%) |
|
体重指数(kg/m2) |
24.2 [21.9; 26.7] |
23.8 [21.6; 26.2] |
25.6 [23.1; 28.0] |
<0.001 |
婚姻状态(n, %) |
|
|
|
0.001 |
已婚 |
6305 (83.6%) |
4871 (84.3%) |
1434 (81.0%) |
|
未婚 |
1241 (16.4%) |
905 (15.7%) |
336 (19.0%) |
|
睡眠时长(小时) |
6.50 [5.00; 8.00] |
7.00 [5.00; 8.00] |
6.00 [5.00; 8.00] |
<0.001 |
生活满意度(n, %) |
|
|
|
0.063 |
1 |
484 (6.41%) |
382 (6.61%) |
102 (5.76%) |
|
2 |
2810 (37.2%) |
2165 (37.5%) |
645 (36.4%) |
|
3 |
3626 (48.1%) |
2756 (47.7%) |
870 (49.2%) |
|
4 |
501 (6.64%) |
389 (6.73%) |
112 (6.33%) |
|
5 |
125 (1.66%) |
84 (1.45%) |
41 (2.32%) |
|
吸烟(n, %) |
|
|
|
<0.001 |
无 |
6737 (89.3%) |
5040 (87.3%) |
1697 (95.9%) |
|
有 |
809 (10.7%) |
736 (12.7%) |
73 (4.12%) |
|
饮酒(n, %) |
|
|
|
<0.001 |
无 |
5681 (75.3%) |
4207 (72.8%) |
1474 (83.3%) |
|
有 |
1865 (24.7%) |
1569 (27.2%) |
296 (16.7%) |
|
居住地(n, %) |
|
|
|
<0.001 |
城镇 |
2087 (27.7%) |
1537 (26.6%) |
550 (31.1%) |
|
农村 |
5459 (72.3%) |
4239 (73.4%) |
1220 (68.9%) |
|
空腹血糖(mg/dl) |
95.5 [88.3; 105] |
93.7 [88.3; 103] |
99.1 [90.1; 112] |
<0.001 |
血红蛋白(g/dl) |
13.2 [12.2; 14.3] |
13.2 [12.2; 14.3] |
13.2 [12.3; 14.2] |
0.322 |
血尿素氮(mg/dl) |
14.4 [12.0; 17.4] |
14.3 [11.8; 17.1] |
14.8 [12.6; 17.9] |
<0.001 |
C反应蛋白(mg/l) |
1.30 [0.70; 2.50] |
1.20 [0.70; 2.40] |
1.80 [0.90; 3.00] |
<0.001 |
糖化血红蛋白(%) |
5.80 [5.50; 6.10] |
5.70 [5.50; 6.00] |
5.90 [5.60; 6.40] |
<0.001 |
低密度脂蛋白(mg/dl) |
102 [83.9; 121] |
101 [83.4; 120] |
106 [86.2; 124] |
<0.001 |
高密度脂蛋白(mg/dl) |
50.6 [44.0; 57.9] |
51.0 [44.4; 57.9] |
49.4 [42.9; 56.4] |
<0.001 |
总胆固醇(mg/dl) |
184 [162; 208] |
182 [161; 206] |
189 [167; 214] |
<0.001 |
甘油三酯(mg/dl) |
119 [85.8; 173] |
113 [82.3; 166] |
137 [96.5; 192] |
<0.001 |
肌酐(mg/dl) |
0.71 [0.62; 0.82] |
0.71 [0.62; 0.82] |
0.71 [0.63; 0.83] |
0.089 |
尿酸(mg/dl) |
4.50 [3.80; 5.40] |
4.40 [3.70; 5.30] |
4.80 [4.10; 5.70] |
<0.001 |
白细胞(109/L) |
5.60 [4.66; 6.70] |
5.52 [4.60; 6.66] |
5.80 [4.89; 6.80] |
<0.001 |
血小板(109/L) |
206 [164; 251] |
206 [164; 251] |
206 [164; 251] |
0.782 |
胱抑素C (mg/l) |
0.79 [0.69; 0.91] |
0.77 [0.67; 0.88] |
0.86 [0.74; 0.97] |
<0.001 |
糖尿病(n, %) |
|
|
|
<0.001 |
无 |
7226 (95.8%) |
5662 (98.0%) |
1564 (88.4%) |
|
有 |
320 (4.24%) |
114 (1.97%) |
206 (11.6%) |
|
肿瘤(n, %) |
|
|
|
0.002 |
无 |
7506 (99.5%) |
5754 (99.6%) |
1752 (99.0%) |
|
有 |
40 (0.53%) |
22 (0.38%) |
18 (1.02%) |
|
慢性肺病(n, %) |
|
|
|
<0.001 |
无 |
7144 (94.7%) |
5553 (96.1%) |
1591 (89.9%) |
|
有 |
402 (5.33%) |
223 (3.86%) |
179 (10.1%) |
|
慢性肾病(n, %) |
|
|
|
<0.001 |
无 |
7304 (96.8%) |
5650 (97.8%) |
1654 (93.4%) |
|
有 |
242 (3.21%) |
126 (2.18%) |
116 (6.55%) |
|
哮喘(n, %) |
|
|
|
<0.001 |
无 |
7396 (98.0%) |
5690 (98.5%) |
1706 (96.4%) |
|
有 |
150 (1.99%) |
86 (1.49%) |
64 (3.62%) |
|
中风(n, %) |
|
|
|
<0.001 |
无 |
7478 (99.1%) |
5752 (99.6%) |
1726 (97.5%) |
|
有 |
68 (0.90%) |
24 (0.42%) |
44 (2.49%) |
|
高血压(n, %) |
|
|
|
0.000 |
无 |
6099 (80.8%) |
5776 (100%) |
323 (18.2%) |
|
有 |
1447 (19.2%) |
0 (0.00%) |
1447 (81.8%) |
|
心脏病(n, %) |
|
|
|
0.000 |
无 |
6874 (91.1%) |
5776 (100%) |
1098 (62.0%) |
|
有 |
672 (8.91%) |
0 (0.00%) |
672 (38.0%) |
|
高血压合并心脏病(n, %) |
|
|
|
0.000 |
无 |
7197 (95.4%) |
6099 (100%) |
1098 (75.9%) |
|
有 |
349 (4.62%) |
0 (0.00%) |
349 (24.1%) |
|
我们对具有不同预后结局的患者之间的特征差异进行了比较,发现多数指标在不同CVD结局人群中均呈现出差异性(P < 0.05)。具体而言,在CVD结局里,患病人群呈现出如下特征:年龄偏大;女性占比较多;未婚者居多;空腹血糖、血尿素氮、C反应蛋白、糖化血红蛋白、低密度脂蛋白、总胆固醇、甘油三酯、尿酸、白细胞水平、胱抑素C以及体重指数水平相对更高;高密度脂蛋白水平更低;无吸烟、饮酒的习惯;患有糖尿病、肿瘤、肺病、肾病、哮喘、中风等疾病;睡眠时间较短;生活满意度较低;多为城镇居民。
3.2. 模型构建
通过对比ROC-AUC值,我们观察到LR、RF以及MLP这几种模型的性能较为出色,这意味着它们能够对患有CVD的人群进行有效识别。其中,LR模型的表现最为突出,其ROC_AUC值达到了0.7644 (95% CI: 0.7397~0.7890) (图2)。
注:Logistic:逻辑回归;DT:决策树;KNN:K-最近邻算法;RF:随机森林;MLP:神经网络;accuracy:准确度;f_means:F1分数;precision:精确度;recall:召回率;roc_auc:接收者操作特征曲线下面积。
Figure 2. ROC curves and performance heatmaps for 5 models
图2. 5种模型的ROC曲线和性能热图
进一步构建各疾病对应的LR模型后发现(见表2),LR模型在识别心脏病、高血压、高血压合并心脏病方面均展现出良好性能。具体来看,LR模型在识别心脏病方面的综合性能要优于识别高血压,其ROC_AUC值为0.7747。同时,识别高血压合并心脏病的LR模型准确率更高(0.7250),这表明该模型在对高血压合并心脏病患者进行识别时,多数情况下能够做出正确的分类决策;而LR模型在识别心脏病人群时的召回率更佳(0.7160),意味着它能够更多地将实际患有高血压的人群识别出来。但各模型的精确度均较低,可能存在假阳性。
3.3. 模型解释
图3呈现了四种LR模型的变量重要性情况。由图可知,年龄、体重指数、糖尿病在四种疾病类型中均位列变量重要性排名的前5位,此外,就具体疾病而言,在心脏病中,居住地、慢性肺病这两个变量在疾病识别方面发挥着重要作用;而在高血压中,尿酸和性别则属于重要变量。
Table 2. Performance of LR models for cardiovascular disease outcomes
表2. 各心血管疾病结局LR模型的性能
|
Accuracy |
Precision |
Recall |
F1 Score |
ROC_AUC |
CVD |
0.6799 |
0.3982 |
0.7111 |
0.5105 |
0.7644 |
heart |
0.6667 |
0.1724 |
0.7160 |
0.2778 |
0.7747 |
HBP |
0.6698 |
0.3307 |
0.7044 |
0.4501 |
0.7505 |
HH |
0.7250 |
0.0963 |
0.6265 |
0.1669 |
0.7495 |
注:CVD:心血管疾病(患有心脏病或高血压);heart:心脏病;HBP:高血压;Accuracy:准确度;Precision:精确度;Recall:召回率;F1 Score:F1分数;ROC_AUC:接收者操作特征曲线下面积。
注:CVD:心血管疾病(患有心脏病或高血压);heart:心脏病;HBP:高血压;age:年龄;BMI:体重指数;DM:糖尿病;smoking:吸烟;UA:尿酸;KD:慢性肾病;gender:性别;Cys_C:胱抑素C;HGB:血红蛋白;drinking:饮酒;sleep_time:睡眠时长;CLD:慢性肺病;life_satisfaction:生活满意度;village:居住地;marital:婚姻状态;stroke:中风;Asthma:哮喘;HDL_C:高密度脂蛋白;TC:甘油三酯;HbA1c:糖化血红蛋白;education:教育水平;TG:总胆固醇;WBC:白细胞计数;Crea:肌酐;LDL_C:低密度脂蛋白;BUN:血尿素氮;PLT:血小板计数;CRP:C反应蛋白;Tumor:肿瘤;FPG:空腹血糖。
Figure 3. Variable importance A: CVD; B: heart; C: HBP; D: HH
图3. 变量重要性A:CVD;B:heart;C:HBP;D:HH
4. 讨论
CVD是中国乃至全球的重大健康威胁之一,早期识别CVD至关重要,本文基于社区人群基本信息和常规血检结果,采用多种机器学习方法构建识别CVD的诊断模型,通过ROC_AUC、准确率、精确度、F1指数、召回率指标评估模型的性能,根据ROC_AUC选择最优模型,进一步基于最优模型构建了各种CVD类型的诊断模型,并将各模型的变量重要性可视化处理。
研究结果显示,在诊断CVD时,LR模型的综合性能表现最优,其ROC_AUC值可达0.7644。基于LR模型构建的针对心脏病、高血压、心脏病合并高血压的诊断模型同样表现出色,其中识别心脏病的性能最佳。这些模型有望成为在人群中开展CVD早期诊断以及大规模筛查的可靠手段。
在我们的研究中,年龄是一个重要变量,这一点在既往诸多研究[13]-[15]中均已得到证实。随着年龄的增长,机体遭受有害物质的慢性损害,细胞出现退行性改变,心血管系统会呈现出病理性变化,诸如细胞新生减少、细胞损伤与凋亡以及血管内皮老化等一系列随年龄增长而产生的改变,致使CVD的发病风险急剧升高。
体重指数[16] [17]、糖尿病[18]在动脉粥样硬化形成机制中有着关键作用。研究表明,肥胖有可能引发血管和代谢风险因素(如血脂异常、高血压等)的发病并使其不断累积[16]。体重指数升高与血液中白细胞介素6及其受体的表达增加存在关联,而白细胞介素6通过提升其成分的合成速率与动脉粥样硬化斑块的发展息息相关[19]。糖尿病导致CVD的机制较为繁杂,涵盖与肥胖、高血压、血脂异常、心肌病变、心血管自主神经病变、遗传等诸多因素的关联[18]。吸烟是CVD的主要可控风险因素之一,机制主要包括以下几个方面:内皮功能损害、血栓形成、胰岛素抵抗[20] [21]。
此外,尿酸[22]是识别高血压的重要因子,但在心脏病诊断中重要性相对较低。研究显示,高尿酸与高血压的发展具有独立相关性,尿酸可能借助激活肾素–血管紧张素系统、沉积尿酸盐晶体、直接损伤内皮功能以及激活多种途径等机制引发高血压[23] [24]。
除上述因素外,生活习惯因素(如吸烟、饮酒、睡眠时间等)、生化指标因素(如胱抑素C、甘油三酯、糖化血红蛋白等)、疾病相关因素(如慢性肾病、中风、哮喘等)等,同样是识别CVD时可参考的因素。
综上所述,对于高龄、肥胖、吸烟、合并糖尿病以及患有高尿酸血症的人群,应当着重进行排查,建议进一步开展检查以评估是否患有CVD,或者采取如减肥、戒烟、控制血糖及尿酸水平等干预措施,延缓病情进展至CVD。
本研究存在一些局限性,由于CVD发生发展机制复杂,可能存在其他未被发现的因素和组合因素。其次,数值型因素与CVD间可能存在非线性关系,进行非线性转换后可能会有更好的预测价值。另外,本研究LR预测模型应用于临床存在挑战,可能需要对阈值进行调整优化以更好区分CVD患者和健康人群。
5. 结论
本研究对5种机器学习模型在识别CVD人群方面进行了比较分析,结果显示这些模型均有着良好的表现。借助这些模型,能够助力识别潜在的CVD人群,进而依据相关重要危险因素,采取针对性的干预措施,以此延缓CVD的发生与发展进程,为CVD的防控工作提供有力支持。
附 录
Figure S1. Missing value visualization
图S1. 缺失值可视化
NOTES
*通讯作者。