Press "Enter" to skip to content

慢性肾脏病预测:一个新的视角

利用SHAP构建与医学文献一致的可解释模型

Robina Weermeijer在Unsplash上的照片

介绍

肾脏通过排除血液中的废物、毒素和多余的液体来维持身体健康。慢性肾脏病(CKD)是一种肾脏不能有效过滤血液的疾病,导致液体和废物在血液中积聚,长期下去可能导致肾脏衰竭。[1] CKD影响全球超过10%的人口,并预计到2040年将成为全球损失寿命年数的第五大原因。[2]

在本文中,我的目标不是构建一个能够准确预测患者CKD发生的模型,而是检查使用标准机器学习算法开发的最佳模型是否也是医学文献中最有意义的模型。我使用了SHAP(SHapley Additive exPlanations)的原则,这是一种解释机器学习模型输出的博弈论方法。

医学文献说什么?

医学文献将CKD的发展和进展与一些关键症状联系在一起。

  1. 糖尿病和高血压:糖尿病和高血压是与CKD相关的两个最重要的危险因素。在2011年至2014年在美国进行的一项研究中,CKD(3-4期)的患病率在糖尿病患者中为24.5%,在糖尿病前期患者中为14.3%,在非糖尿病患者中为4.9%。在同一研究中,CKD的患病率在高血压患者中观察到为35.8%,在高血压前期患者中为14.4%,在非高血压患者中为10.2%。[2]
  2. 血红蛋白和红细胞水平下降:肾脏产生一种叫做促红细胞生成素(EPO)的激素,帮助生成红细胞。在CKD中,肾脏无法产生足够的EPO,导致贫血,即血液中红细胞和血红蛋白水平下降。[3]
  3. 血清(血液中的)肌酐浓度升高:肌酐是正常肌肉和蛋白质分解的废物,肾脏通过排除多余的肌酐来清除血液中的肌酐。在CKD中,肾脏无法有效清除多余的肌酐,导致血液中肌酐水平升高。[4]
  4. 尿比重降低:尿液比重是肾脏浓缩尿液的指标。患有CKD的患者尿比重降低,因为肾脏失去了有效浓缩尿液的能力。[5]
  5. 血尿和尿白蛋白:血尿和尿白蛋白分别指尿液中存在红细胞和白蛋白。通常,肾脏的过滤器可以防止血液和白蛋白进入尿液。然而,这些过滤器的损伤会导致血液(或红细胞)和白蛋白进入尿液。[6][7]

数据集

本文使用的数据集是Kaggle上提供的“慢性肾脏病”数据集,最初由UCI在其机器学习仓库中提供。它包含来自400名患者的数据,包括24个特征和1个二元目标变量(CKD不存在= 0,CKD存在= 1)。特征的详细描述可以在此处找到。

数据预处理

CKD数据集中有很多缺失值需要在进一步分析之前进行插补。这个图表显示了缺失数据的可视化表示,黄线表示该列中的缺失值。

缺失数据的可视化表示(由黄线表示)

缺失值的填充方法如下:

  1. 对于数值特征,使用中位数填充缺失值。由于均值对异常值敏感,而中位数不敏感,因此使用中位数作为中心值的更好选择。
  2. 分类特征’rbc’和’pc’分别缺失了38%和16.25%的数据。由于这是大量的缺失数据,将缺失值填充为’unknown’。在这种情况下,使用众数不是最佳决策,因为将这么大一组观察结果归类到同一类别中有一定的风险。
  3. 其他所有分类特征的缺失数据少于或等于1%。因此,使用它们各自的众数填充缺失值。

构建模型并使用SHAP进行可解释性检查

在填充缺失值后,将数据分为训练集和测试集(70-30分割),并运行了一个简单的随机森林分类模型。测试准确率达到100%,即模型能够100%正确分类之前未见过的患者。下面是混淆矩阵。

当模型在测试数据上运行时生成的混淆矩阵

现在我们有一个很好的分类模型。但是,如果我们对解释性感兴趣,即每个特征对预测的正面或负面影响如何?哪些特征对预测起到最重要的作用?结果是否与临床发现一致?这些是SHAP可以帮助我们回答的问题。

SHAP是一种基于博弈论的数学方法,可以通过计算每个特征对预测的贡献来解释任何机器学习模型的预测。它可以帮助我们确定对预测起到最重要作用的特征以及它们对目标变量的影响方向。[8]在测试数据上拟合了一个SHAP解释器,并生成了全局特征重要性图,如下所示。

使用SHAP生成的全局特征重要性图

推动预测的前三个最重要的特征是血红蛋白水平(’hemo’),尿液比重(’sg’)以及患者尿液中是否有红细胞(’rbc_normal’)。由于特征重要性是通过对所有给定样本的该特征的绝对SHAP值取平均得出的,该图仅提供了重要性顺序的信息,而不提供影响方向的信息。让我们生成一个更具信息性的图表,既包含重要性顺序,又包含影响方向。

使用SHAP生成的蜜蜂图

这个蜜蜂图是展示数据集中前几个重要特征对模型预测影响的好方法。粉红色的点表示被预测为慢性肾脏病(CKD)的患者,蓝色的点表示被预测为非CKD的患者。现在我们知道了推动预测的前几个最重要的特征,让我们看看它们的影响方向是否与本文中早期介绍的临床发现一致。

  1. 糖尿病(’dm_yes’)和高血压(’htn_yes’)与慢性肾脏病的存在相关。这与临床发现一致,尽管预计它们在全局重要性方面更高,因为它们是与慢性肾脏病相关的重要风险因素。
  2. 血红蛋白水平低(’hemo’),红细胞压积低(’pcv’:血液中红细胞的体积百分比)和红细胞计数低(’rc’)与慢性肾脏病相关。这也与临床发现一致,因为患有慢性肾脏病的患者无法产生足够的红细胞。
  3. 尿液比重低(’sg’)与慢性肾脏病相关,临床上可以解释为肾脏失去了浓缩尿液的能力。
  4. 尿液中白蛋白含量高(’al’)和血清肌酐(’sc’)水平高与慢性肾脏病相关,这与临床发现一致,因为肾脏失去了有效过滤血液的能力。
  5. 尿液中有红细胞或异常尿液(’rbc_normal’;一个二元分类特征,值为1表示尿液正常没有红细胞,值为0表示尿液异常可能含有红细胞)与慢性肾脏病相关。这支持临床发现,因为血尿在患有慢性肾脏病的患者中更常见。

总结来说,顶级特征及其对预测的影响方向与医学文献一致。

结论

本文有两个主要要点:

  1. 医学文献将CKD的发展和进展与ML模型用于分类预测患者是否预测为CKD的顶级特征相关联。
  2. 这些顶级特征对目标变量的影响方向支持临床发现,表明该模型不仅在预测CKD方面准确率达到100%,而且具有医学意义,其结果完全可解释。

本研究的一个可能限制是样本量较小。一旦有更多数据可用,应在更大的患者群体中测试该模型是否继续具有高准确性。此外,有趣的是看到在更大的患者群体中特征的重要性顺序是否发生改变。

在医学领域中,最准确的模型并不总是最有意义的模型。在本研究中,使用SHAP检查我们的模型是否符合医学文献。该模型的优势在于它不仅高度准确,而且易于解释,并得到临床发现的支持。该模型在远程医疗中非常有用,可以用于识别患有CKD风险较高的患者。未来的研究可以涉及研究个体观察,并查看模型的哪些特征在个体层面上驱动预测。

此项目的代码可以在这里找到。本文中所有图片均由我通过Google Colab生成。

参考文献

原始数据集的许可证: L. Rubini, P. Soundarapandian和P. Eswaran,慢性肾脏病(2015),UCI机器学习存储库(CC BY 4.0)

Kaggle上的“慢性肾脏病”数据集:https://www.kaggle.com/datasets/mansoordaku/ckdisease

原始SHAP文档:https://shap.readthedocs.io/en/latest/api_examples.html#plots

[1] 慢性肾脏病基础知识(2022),疾病控制与预防中心

[2] C.P. Kovesdy,慢性肾脏病流行病学:2022年更新(2022),肾脏国际补充杂志

[3] H. Shaikh,M.F. Hashmi和N.R. Aeddula,慢性肾脏病性贫血(2023),国家医学图书馆

[4] 血清(血液)肌酐(2023),国家肾脏基金会

[5] J.A. Simerville,W.C. Maxted和J.J. Pahira,尿液分析:全面回顾(2005),美国家庭医生

[6] P.F. Orlandi等,血尿作为慢性肾脏病和死亡进展的危险因素:来自慢性肾脏不全队列(CRIC)研究的发现(2018),BMC肾脏病

[7] 蛋白尿(2016),国家糖尿病和消化和肾脏疾病研究所

[8] R. Bagheri,SHAP值及其在机器学习中的应用简介(2022),Towards Data Science

Leave a Reply

Your email address will not be published. Required fields are marked *