摘要: 机器学习正逐渐改变着各行各业,医疗行业也处于变革之中。想不到机器学习不光能诊断患者病情,还能预测患者出院后的情况呢,这个研究方向有点意思,感兴趣的读者快来瞅瞅吧!
随着数据量以及计算机性能的不断提升,机器学习技术正逐渐渗透于各行各业中。计算机视觉、自然语言处理、机器人等领域基本上已经被机器学习算法垄断,正逐步向教育、银行、医疗等传统行业扩张。关于机器学习如何改变传统教育模式,可以参见博主的这篇文章《
使用AR、AI以及大数据改革教育体系——为每位学生打造自己的私人定制学习路线
》。银行业目前对人工智能炒作成分居多,
大多数银行持观望态度,短时间不会利用人工智能取代大部分银行职员工作
。医疗行业应用AI也比较火热,比如利用
AI检测癌症
、
驱动新药发现引擎
、
基因检测
等。而
脓毒症(Sepsis)
是一种医疗行业常见的并发症,本文将使用机器学习预测脓毒症患者的出院后情况。
使用AR、AI以及大数据改革教育体系——为每位学生打造自己的私人定制学习路线
》。银行业目前对人工智能炒作成分居多,
大多数银行持观望态度,短时间不会利用人工智能取代大部分银行职员工作
。医疗行业应用AI也比较火热,比如利用
AI检测癌症
、
驱动新药发现引擎
、
基因检测
等。而
脓毒症(Sepsis)
是一种医疗行业常见的并发症,本文将使用机器学习预测脓毒症患者的出院后情况。
脓毒症是指因感染因素引起的全身炎症反应综合征,严重时可导致器官功能障碍或循环障碍,是严重创伤、烧伤、休克、感染和外科大手术等常见的并发症,因为其症状和发烧、低血压等其它常见疾病非常相像,很难被早期发现,如果不及时治疗,可进一步发展为感染性休克,其住院死亡率超过40%,相当危险。
了解脓毒症患者的最高死亡风险对临床医生的优先护理是有帮助的。团队与
Geisinger
健康护理系统的研究人员合作,使用历史电子健康记录数据(EHR)建立模型来预测脓毒症住院患者在住院期间或出院后90天的全因死亡率(all-cause mortality)。该模型可以指导医疗团队为那些预测为高概率死亡的患者进行仔细监测,并采取有效预防措施。
Geisinger
健康护理系统的研究人员合作,使用历史电子健康记录数据(EHR)建立模型来预测脓毒症住院患者在住院期间或出院后90天的全因死亡率(all-cause mortality)。该模型可以指导医疗团队为那些预测为高概率死亡的患者进行仔细监测,并采取有效预防措施。
数据科学环境
使用
IBM数据科学经验
为数据科学家提供编程环境(三种流行编程语言:Python、Scala和R,两种编程分析工具:Jupyter和Zeppelin),此外,IBM数据科学经验通过业务应用程序实时或批量计分来操作模型,为连续模型检测和再训练集成反馈回路。
IBM数据科学经验
为数据科学家提供编程环境(三种流行编程语言:Python、Scala和R,两种编程分析工具:Jupyter和Zeppelin),此外,IBM数据科学经验通过业务应用程序实时或批量计分来操作模型,为连续模型检测和再训练集成反馈回路。
收集和预处理数据
Geisinger在2006年~2016年获得了超过10000名确诊为败血症的患者数据,这些数据包含人口统计学、住院和门诊、外科手术、医疗史、药物、医院单位之间转移以及实验室结果等记录。
对于每名患者,选择最近的医院和最相关的住院数据,包括住院期间具体的信息,比如手术类型、培养位置(细菌)等。此外,还导出了入院前的总结信息,比如住院前30天的外科手术次数等,没有使用出院后的数据。图1给出了这些基于时间数据的决策:
图1 基于时间序列数据做预测
合并所提供的数据集后,得到的数据集包括10599行,其中每名患者有199个属性(特征)。
预测模型
在数据清洗和特征选择完成后,将任务目标定义为二分类问题:预测脓毒症患者出院后90天内是否死亡。
选择的算法为梯度提升树(Gradient boosted trees, GBT),并通过
XGBoost数据包
实现。由于爱算法的
良好的执行速度和鲁棒性
,一直是机器学习竞赛中流行使用的算法。使用XGBoots另一个动机是微调超参数以提升模型性能的能力。在训练数据中,使用十折交叉验证(ten-fold cross-validation)和网格搜索(GridSearchCV)以迭代的方式选择参数,以最大化
ROC
曲线下的面积(AUC)。
IBM数据科学经验中的一个实例在此可见
。
XGBoost数据包
实现。由于爱算法的
良好的执行速度和鲁棒性
,一直是机器学习竞赛中流行使用的算法。使用XGBoots另一个动机是微调超参数以提升模型性能的能力。在训练数据中,使用十折交叉验证(ten-fold cross-validation)和网格搜索(GridSearchCV)以迭代的方式选择参数,以最大化
ROC
曲线下的面积(AUC)。
IBM数据科学经验中的一个实例在此可见
。
将数据集分为训练集和测试集,其中训练集占60%,测试集占40%。使用训练集训练模型,将训练好的模型参数应用于测试集上,模型性能如图2所示:
图2 XGBoost模型的性能
图2中的一些数据是性能评价指标,比如AUC得分,这个数字越接近于1,则表示模型的能力越能正确的分类正预测(TP),从而减少假阳性。测试结果AUC数据为0.8561,表明模型能够识别出绝大多数脓毒症患者90天内是否死亡,如果预测为死亡,则这些患者可以进行适当的靶向治疗。
对于精确率(precision)和召回率(recall)
,数字越接近于1,表明模型越精确。图2中显示的数据为接近于0.80,即赞成高召回率——目的是尽量减少该模型遗漏最终可能因脓毒症死亡的患者数量。
对于另外的一个评价指标
准确度(Accuracy)
,使用
bootstrap
对训练和测试数据生成1000个变体,然后在这些数据上运行XGBoost模型,并获得每次运行的模型准确率,1000次运行结果的准确度分布为0.77~0.79之间的概率为95%,这意味着建立的模型能够识别出超过四分之三的真实结果。
准确度(Accuracy)
,使用
bootstrap
对训练和测试数据生成1000个变体,然后在这些数据上运行XGBoost模型,并获得每次运行的模型准确率,1000次运行结果的准确度分布为0.77~0.79之间的概率为95%,这意味着建立的模型能够识别出超过四分之三的真实结果。
除了以上评价指标外,模型的
混淆矩阵(confusion matrix)
如图3所示。从图中可以看到,对于测试数据,模型确定了1190例患者为真阳性(预测为死亡的脓毒症患者死亡)和2087例患者为真阴性(预测为生存的脓毒症患者存活)。
混淆矩阵(confusion matrix)
如图3所示。从图中可以看到,对于测试数据,模型确定了1190例患者为真阳性(预测为死亡的脓毒症患者死亡)和2087例患者为真阴性(预测为生存的脓毒症患者存活)。
图3 阴阳性预测
XGBoost还具有确定特征的能力,这种能力并不告知选择的特征是否为死亡或生存的预测因子,但XGBoost生成的信息仍然非常有用,因为可以了解到哪些特征是用于预测死亡的。如图4所示,29.5%的患者都使用“入院年龄”特征来预测死亡。
图4 模型最重要的20个特征
对特征进一步的探索分析,以测试特征如何与死亡结果相对应。虽然上图有助于可视化特征与结果的关系,更重要的是要了解XGBoost训练多个决策树的机制。因此,在探索过程中,XGBoost模型中的重要特征可能与这些结果变量没有明显关系。
如图5所示,诸如“入院年龄”的特征可能表明老年患者相较于年轻患者而言具有更高的死亡比例,另一个例子“血管升压药使用时间”特征可能表明服用升压药的患者死亡率较高,但这些死亡也可能是由于其不好的健康状况导致。
图5 与患者死亡有关的一些重要特征
XGBoost输出的决策树规则可以帮助医生进一步了解如何针对患者制定治疗方案。比如,由于老年患者较高的死亡风险,医疗团队可以特别关注老年患者,检测所服用的血管升压药的持续时间、尽量减少患者在各科室之间转移的次数以减少对易感染患者的影响等。
结论
预测脓毒症患者的全因死亡可指导健康提供者主动监测并采取预防措施以提升患者的存活率。在本文模型中,选择了那些被认为与脓毒症患者死亡有关的重要特征,即机器学习模型可以帮助识别与脓毒症死亡相关联的变量。后续随着数据量的增加,将添加一些更关键特征来改进模型,也可以将该方法应用于其它病症的预测之中,希望产生一个更具可操作的模型,以改善医疗水平。
阅读更多干货好文,请关注扫描以下二维码: