【2023年中国研究生数学建模竞赛华为杯】E题 出血性脑卒中临床智能诊疗建模 Python代码分析

最新更新时间:2023-9-23 23:50

【2023年中国研究生数学建模竞赛华为杯】E题 出血性脑卒中临床智能诊疗建模

在这里插入图片描述

1 题目

1.1 背景介绍

出血性脑卒中指非外伤性脑实质内血管破裂引起的脑出血,占全部脑卒中发病率的10-15%。其病因复杂,通常因脑动脉瘤破裂、脑动脉异常等因素,导致血液从破裂的血管涌入脑组织,从而造成脑部机械性损伤,并引发一系列复杂的生理病理反应。出血性脑卒中起病急、进展快,预后较差,急性期内病死率高达45-50%,约80%的患者会遗留较严重的神经功能障碍,为社会及患者家庭带来沉重的健康和经济负担。因此,发掘出血性脑卒中的发病风险,整合影像学特征、患者临床信息及临床诊疗方案,精准预测患者预后,并据此优化临床决策具有重要的临床意义。

出血性脑卒中后,血肿范围扩大是预后不良的重要危险因素之一。在出血发生后的短时间内,血肿范围可能因脑组织受损、炎症反应等因素逐渐扩大,导致颅内压迅速增加,从而引发神经功能进一步恶化,甚至危及患者生命。因此,监测和控制血肿的扩张是临床关注的重点之一。此外,血肿周围的水肿作为脑出血后继发性损伤的标志,在近年来引起了临床广泛关注。血肿周围的水肿可能导致脑组织受压,进而影响神经元功能,使脑组织进一步受损,进而加重患者神经功能损伤。综上所述,针对出血性脑卒中后的两个重要关键事件,即血肿扩张和血肿周围水肿的发生及发展,进行早期识别和预测对于改善患者预后、提升其生活质量具有重要意义。

医学影像技术的飞速进步,为无创动态监测出血性脑卒中后脑组织损伤和演变提供了有力手段。近年来,迅速发展并广泛应用于医学领域的人工智能技术,为海量影像数据的深度挖掘和智能分析带来了全新机遇。期望能够基于本赛题提供的影像信息,联合患者个人信息、治疗方案和预后等数据,构建智能诊疗模型,明确导致出血性脑卒中预后不良的危险因素,实现精准个性化的疗效评估和预后预测。相信在不久的将来,相关研究成果及科学依据将能够进一步应用于临床实践,为改善出血性脑卒中患者预后作出贡献。

在这里插入图片描述

图1. 左图脑出血患者CT平扫,右图红色为血肿,黄色为血肿周围水肿

1.2 数据集介绍及建模目标

赛题提供了160例(100例训练数据集+60例独立测试数据集)出血性脑卒中患者的个人史、疾病史、发病及治疗相关信息、多次重复的影像学检查(CT平扫)结果及患者预后评估,该部分信息可在“表1 患者列表及临床信息”中查询。如图1为脑出血患者CT平扫,红色为血肿区域,黄色为水肿区域。赛题提供影像学检查数据,包括各个时间点血肿/水肿的体积、位置、形状特征及灰度分布等信息。体积及位置信息可在“表2-患者影像信息血肿及水肿的体积及位置中查询。形状及灰度分布信息可在“表3-患者影像信息血肿及水肿的形状及灰度分布中查询。

赛题目标:通过对真实临床数据的分析,研究出血性脑卒中患者血肿扩张风险、血肿周围水肿发生及演进规律,最终结合临床和影像信息,预测出血性脑卒中患者的临床预后。

目标变量:发病48小时内是否发生血肿扩张:1是;0否。 发病后90天 mRS:0-6,有序等级变量。其中mRS是评估卒中后患者功能状态的重要工具,详见附件2相关概念。

临床信息:相关信息在“表1-患者列表及临床信息中获取。

ID:患者ID。

n 训练数据集:sub001至sub100,共计100例。包含:患者信息、首次及所有随访影像数据及90天mRS。

n 测试数据集1:sub101至sub130,共计30例。包含:患者信息、首次影像数据。不包含:随访影像数据及90天mRS。

n 测试数据集2:sub131至sub160,共计30例。包含:患者信息、首次及所有随访影像数据。不包含:90天mRS。

入院首次影像检查流水号:一个14位数字编码。前8位代表年月日,后6位为顺序编号(注意:不是时分秒)。流水号是影像检查的唯一编码,具体影像检查时间点可通过对应流水号在“附表1-检索表格-流水号vs时间中检索。

年龄: 岁

性别:男/女

脑出血前mRS评分:0-6,有序等级变量

高血压病史:1是0否

卒中病史:1是0否

糖尿病史:1是0否

房颤史:1是0否

冠心病史:1是0否

吸烟史:1是0否

饮酒史:1是0否

发病相关特征,共计2字段。

血压:收缩压/舒张压。单位: 毫米汞柱

发病到首次影像检查时间间隔:单位:小时

治疗相关特征,共计7字段。

脑室引流:1是0否

止血治疗:1是0否

降颅压治疗:1是0否

降压治疗:1是0否
镇静、镇痛治疗:1是0否
止吐护胃:1是0否
营养神经:1是0否

影像相关特征,共计84字段/时间点。

血肿及水肿的体积和位置信息在“表2-患者影像信息血肿及水肿的体积及位置”中获取,包含了:每个时间点血肿(Hemo)总体积及水肿(ED)总体积及不同位置的占比。体积占比定义:血肿/水肿在该位置的体积占总体积大小的比例,取值范围为:0-1。如:0代表该区域没有发生血肿/水肿,1则代表该患者所有血肿/水肿均发生在该区域,可通过占比换算出该位置绝对体积。本赛题采用通用模板,区分左右侧大脑前动脉(ACA_L, ACA_R),左右侧大脑中动脉(MCA_L,MCA_R),左右侧大脑后动脉(PCA_L,PCA_R),左右侧脑桥/延髓(Pons_Medulla_L,Pons_Medulla_R),左右侧小脑(Cerebellum_L,Cerebellum_R)共十个不同位置,具体位置和参考文献见附件2相关概念。综上,总体积:2个字段(单位:10-3ml),位置:20个字段。在每个时间点,体积及位置特征共计22个字段。

血肿及水肿的形状及灰度分布在“**表3-患者影像信息血肿及水肿的形状及灰度分布”**的两个不同标签页存放,可通过流水号检索对应数据。每个时间点血肿及水肿的形状及灰度特征,反映目标区域内体素信号强度的分布(17个字段)及三维形状的描述(14个字段),因此,在每个时间点,血肿及水肿的形状+灰度分布特征共62字段。

注:重复影像数据根据临床真实情况提供,重复时间个体间可能存在差异。

1.3 请建模回答如下问题

(1) 血肿扩张风险相关因素探索建模。

a) 请根据“表1”(字段:入院首次影像检查流水号,发病到首次影像检查时间间隔),“表2”(字段:各时间点流水号及对应的HM_volume),判断患者sub001至sub100发病后48小时内是否发生血肿扩张事件。

结果填写规范:1是0否,填写位置:“表4”C字段(是否发生血肿扩张)。

如发生血肿扩张事件,请同时记录血肿扩张发生时间。

结果填写规范:如10.33小时,填写位置:“表4”D字段(血肿扩张时间)。

是否发生血肿扩张**可根据血肿体积前后变化,具体定义为:后续检查比首次检查绝对体积增加≥6 mL或相对体积增加≥33%。

注:可通过流水号至“附表1-检索表格-流水号vs时间”中查询相应影像检查时间点,结合发病到首次影像时间间隔和后续影像检查时间间隔,判断当前影像检查是否在发病48小时内。

b) 请以是否发生血肿扩张事件为目标变量,基于“表1” 前100例患者(sub001至sub100)的个人史,疾病史,发病相关(字段E至W)、“表2”中其影像检查结果(字段C至X)及“表3”其影像检查结果(字段C至AG,注:只可包含对应患者首次影像检查记录)等变量,构建模型预测所有患者(sub001至sub160)发生血肿扩张的概率。

注:该问只可纳入患者首次影像检查信息。

结果填写规范:记录预测事件发生概率(取值范围0-1,小数点后保留4位数);填写位置:“表4”E字段(血肿扩张预测概率)。

(2)血肿周围水肿的发生及进展建模,并探索治疗干预和水肿进展的关联关系。

a) 请根据“表2”前100个患者(sub001至sub100)的水肿体积(ED_volume)和重复检查时间点,构建一条全体患者水肿体积随时间进展曲线(x轴:发病至影像检查时间,y轴:水肿体积,y=f(x)),计算前100个患者(sub001至sub100)真实值和所拟合曲线之间存在的残差。
结果填写规范:记录残差,填写位置“表4”F字段(残差(全体))。

b) 请探索患者水肿体积随时间进展模式的个体差异,构建不同人群(分亚组:3-5个)的水肿体积随时间进展曲线,并计算前100个患者(sub001至sub100)真实值和曲线间的残差。

结果填写规范:记录残差,填写位置“表4”G字段(残差(亚组)),同时将所属亚组填写在H段(所属亚组)。

c) 请分析不同治疗方法(“表1”字段Q至W)对水肿体积进展模式的影响。

d) 请分析血肿体积、水肿体积及治疗方法(“表1”字段Q至W)三者之间的关系。

(3)出血性脑卒中患者预后预测及关键因素探索。

a) 请根据前100个患者(sub001至sub100)个人史、疾病史、发病相关(“表1”字段E至W)及首次影像结果(表2,表3中相关字段)构建预测模型,预测患者(sub001至sub160)90天mRS评分。

注:该问只可纳入患者首次影像检查信息。

结果填写规范:记录预测mRS结果,0-6,有序等级变量。填写位置“表4”I字段(预测mRS(基于首次影像))。

b) 根据前100个患者(sub001至sub100)所有已知临床、治疗(表1字段E到W)、表2及表3的影像(首次+随访)结果,预测所有含随访影像检查的患者(sub001至sub100,sub131至sub160)90天mRS评分。

结果填写规范:记录预测mRS结果,0-6,有序等级变量。填写位置“表4”J字段(预测mRS)。

c) 请分析出血性脑卒中患者的预后(90天mRS)和个人史、疾病史、治疗方法及影像特征(包括血肿/水肿体积、血肿/水肿位置、信号强度特征、形状特征)等关联关系,为临床相关决策提出建议。

表1-患者列表及临床信息.xlsx

表2-患者影像信息血肿及水肿的体积及位置.xlsx

表3-患者影像信息血肿及水肿的形状及灰度分布.xlsx

表4-答案文件.xlsx

附表1-检索表格-流水号vs时间.xlsx

附件2-相关概念.docx

2 问题分析

2.1 问题一

针对问题1的第一小问:

注意:发病到首次检查需要一定时间,这个在表1的【发病到首次影像检查时间间隔】列可以获取到每个病人的具体数据,比如去医院需要排队等因素。

该问题只需要将进行简单的统计处理,不需要建立数学模型,但是需要对数据进行一定的处理,是为了对后边的问题做准备工作。

针对问题1的第二小问:

该问题为回归问题,将上述计算得到的数据作为标签,将题目中指定的字段作为特征,进行回归分析。可以使用常见的回归模型进行求解,注意,该问题只考虑首次检查的信息,一定要仔细看题。

2.2 问题二

针对问题2的第一小问:

注意:每个病人包含多条记录,此问题首先需要先计算每个病人的发病到检查时间,这个采用问题一中的方法即可,然后需要根据表2提取水肿体积(ED_volume),建立y=f(x)的线性方程,然后使用方程进行预测,计算预测值与实际值的差作为残差。

针对问题2的第二小问:

这里需要进行亚类划分,可以查阅相关文献,找到划分标准。选择相应的特征进行聚类,聚类个数为(3-5个),可根据自己材料确定。然后采用问题2第一小问的方法对每个聚类拟合一个y=f(x)的线性方程,重复上述步骤。

针对问题2的第三小问:

可以使用统计分析和一些统计检验的方法分析不同治疗方法(“表1”字段Q至W)对水肿体积进展模式的影响。

针对问题2的第四小问:

可以使用相关性分析(皮尔逊、斯皮尔曼)等方法,也可以考虑使用回归分析的方法。

2.3 问题三

针对问题3的第一小问:

此问题为多分类问题,可以使用相应的机器学习方法进行建模。例如:决策树、支持向量机、XGB、神经网络等。

针对问题3的第二小问:

解决思路同上,在使用更多特征的情况下进行建模。

针对问题3的第三小问:

分析几个类别特征的关联关系,这里可以使用上述的相关性分析方法,也可以构建更为复杂的模型,考虑因果关系。

3 代码实现

3.1 问题一

(1)第一小问

import pandas as pd
import pandas as pd
from datetime import datetime, timedelta

data1 = pd.read_excel('竞赛发布数据/表1-患者列表及临床信息.xlsx')
data2 = pd.read_excel('竞赛发布数据/表2-患者影像信息血肿及水肿的体积及位置.xlsx')


# 将数据按照患者ID合并
merged_data = data1.merge(data2, on="ID")

# 创建结果表格
result = pd.DataFrame(columns=['ID', '首次影像检查流水号', '是否发生血肿扩张', '血肿扩张时间(单位小时)'])

# 遍历每个患者
for index, row in merged_data.iterrows():
    patient_id = row['ID']
    first_exam_time = row['发病到首次影像检查时间间隔']
    first_exam_num = row['入院首次影像检查流水号']
    
    # 查找首次影像检查结果
    first_exam = 'HM_volume'
    first_exam_volume = row[first_exam]
    
    # 查找后续影像检查结果
    follow_up_exams = ['HM_volume.{}'.format(i) for i in range(1, 9)]
    
    blood_expansion = False
    blood_expansion_time = ''
    
    for exam in follow_up_exams:
        if row[exam] and (row[exam] - first_exam_volume >= 6 or (row[exam] - first_exam_volume) / first_exam_volume >= 0.33):
            blood_expansion = True
            blood_expansion_time = exam.split('.')[-1]  # 获取血肿扩张时间点
            break
    
    # 将结果添加到结果表格中
    result = result.append({
    
    'ID': patient_id,
                            '首次影像检查流水号': first_exam_num,
                            '是否发生血肿扩张': 1 if blood_expansion else 0,
                            '血肿扩张时间(单位小时)': blood_expansion_time}, ignore_index=True)

# 保存结果到Excel表格
result.to_excel('result1-1.xlsx', index=False)

在这里插入图片描述

(2)第二小问

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 读取数据
data1 = pd.read_excel('竞赛发布数据/表1-患者列表及临床信息.xlsx')
data2 = pd.read_excel('竞赛发布数据/表2-患者影像信息血肿及水肿的体积及位置.xlsx')
data3 = pd.read_excel('竞赛发布数据/表3-患者影像信息血肿及水肿的形状及灰度分布.xlsx')

# 将数据按照患者ID合并
merged_data = pd.merge(data1, data2.iloc[:, :24], on='ID')
merged_data = pd.merge(merged_data, data3, left_on='首次检查流水号',right_on='流水号')
# 分割血压列
merged_data[['高压','低压']] = merged_data['血压'].str.split('/', expand=True).astype(float)

# 删除原始血压列
merged_data_temp = merged_data.drop(columns=['血压','90天mRS', '数据集划分', '入院首次影像检查流水号','脑出血前mRS评分','备注', '流水号'])

# 将类别变量进行编码
merged_data_temp = pd.get_dummies(merged_data_temp, columns=['性别'])

features = merged_data_temp.columns[1:]
# 填充缺失值
merged_data2 = merged_data_temp.fillna(0)

# 选择需要的特征和目标变量
result = pd.read_excel('result1-1.xlsx')
Y = result['是否发生血肿扩张'][0:100]


# 划分训练集和测试集
train_data = merged_data2[0:100]
test_data = merged_data2[100:]

# 基于随机森林建立模型
model = RandomForestClassifier(n_estimators=100, random_state=42)

# 拟合模型
model.fit(train_data[features], Y)

# 预测概率
predictions = model.predict_proba(test_data[features])[:, 1]

# 输出结果
result2 = pd.DataFrame({
    
    '患者ID': test_data['ID'], '是否发生血肿扩张概率': predictions})
result2.to_excel('result1-2.xlsx', index=False)

在这里插入图片描述

3.2 问题二

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 问题三

在这里插入图片描述
在这里插入图片描述

4 完整资料

请下载完整资料
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43935696/article/details/133191333