2025年亚太中文赛B题第一版本超详细解题思路
亚太中文赛作为2025年暑期第一场数模竞赛,难度约为0.5-0.6个国赛。本文将为大家详细的带来B题超详细的解题思路。
其中B题数据均在网上可以找到公开来源,具体如下所示
技术参考网站
基于统计检验与多模型对心脏病数据的分析与预测
https://www.heywhale.com/mw/project/68287347e0112fbd79e75963
中风数据集疑似来源
https://www.heywhale.com/mw/dataset/648d46ae9de7b81463a94e2b/file
相关项目
https://www.heywhale.com/mw/dataset/648d46ae9de7b81463a94e2b/project
肝硬化数据来源
https://www.kaggle.com/datasets/abuchionwuegbusi/cirrhosis-patient-survival-prediction
数据介绍 1974 年至 1984 年期间,424 名 PBC 患者转诊至梅奥诊所,有资格参加测试 D-青霉胺药物的随机安慰剂对照试验。其中,最初的 312 名患者参加了试验,并且拥有大部分全面的数据。其余 112 名患者没有参加临床试验,但同意记录基本指标并接受生存跟踪。其中 6 名患者在诊断后很快就无法追踪,除了随机试验的 312 名患者外,还留下了其中 106 人的数据。
问题1:数据预处理与基础统计分析
问题描述:对疾病数据集进行预处理,并分析各个特征与疾病发生的关系。
进行数据清洗、缺失值填补、标准化等步骤,使用描述性统计与可视化工具(如直方图、散点图)分析不同特征与疾病发生的相关性,描述性统计分析:均值、中位数、方差、相关系数等。
问题一主要分为数据清洗与预处理、基础统计分析、可视化分析。
1.1 数据清洗与预处理
缺失值处理:检查每个数据集中的缺失值,并决定如何处理这些缺失值。常见的处理方式包括删除含缺失值的行或用均值、中位数或众数填充缺失数据。
数据转换:将类别变量(如性别、是否患有高血压、是否吸烟等)转换为数值型变量,以便于机器学习模型使用。可以使用LabelEncoder 或 OneHotEncoder 进行转换。
· 类变量编码:
二分类:Label Encoding (0,1)
多分类:One-Hot Encoding 或 Target Encoding
· 数值变量标准化:使用StandardScaler或MinMaxScaler
标准化与归一化:对于一些具有较大数值范围的特征(如年龄、血糖水平等),可以进行标准化或归一化处理,以提高模型训练的效果。
具体来讲我们需要首先进行数据清洗,(由于样本之间独立 互不相连,这里可以直接选择删除处理),具体如下所示
表格 | 指标名称 | 原因 | 处理 |
stroke.csv | gender | 存在第三性别删除 | |
bmi | 存在缺失值 | 删除 | |
smoking_status | 存在12个21岁以下少年吸烟 | ||
heart.csv | RestingBP | 静息血压[毫米汞柱]存在为0的个体 | 删除 |
cirrhosis.csv | Cholesterol | 存在缺失值 | 删除 |
Copper | 存在缺失值 | 删除 | |
Trygli cerides | 存在缺失值 | 删除 |
后续模型中我们需要输入数据,而原始表格数据存在大量的文字信息,我们这里应该进行转码处理,即将文字信息进行量化处理,具体如下所示
表格 | 转码指标 | 转码前 | 转码后 |
stroke.csv | gender | 男 | 1 |
女 | 0 | ||
ever_married | yes | 1 | |
no | 0 | ||
work_type | children | 1 | |
Govt_job | 2 | ||
Never_worked | 3 | ||
Private | 4 | ||
Self-employed | 5 | ||
Residence_type | Urban | 1 | |
Rural | 0 | ||
smoking_status | formerly smoked | 1 | |
never smoked | 2 | ||
smokes | 3 | ||
Unk0wn | 4 |
表格 | 转码指标 | 转码前 | 转码后 |
cirrhosis.csv | N_Days | C | 1 |
CL | 2 | ||
D | 3 | ||
3-peni1illamine | 1 | ||
Pla1ebo | 2 | ||
Sex | M | 1 | |
F | 0 |
表格 | 转码指标 | 转码前 | 转码后 |
heart.csv | Sex | M | 1 |
F | 0 | ||
ChestPainType | ASY | 0 | |
TA | 1 | ||
ATA | 2 | ||
NAP | 3 | ||
RestingECG | Nor1al | 1 | |
ST | 2 | ||
LVH | 3 | ||
ExerciseAngina | N | 0 | |
Y | 1 | ||
ST_Slope | 0lat | 1 | |
Dow0 | 2 | ||
3 | 3 |
我们后续基于处理后的数据进行了计算各数据集的均值、标准差、最小值、最大值、中位;统计三种疾病的患病率/死亡率;计算完整的相关系数矩阵;统计显著性检验(方差分析(ANOVA):检验连续变量对疾病的影响、卡方检验:检验分类变量与疾病的关联性)
【因数据预处理不同,数值上略有不同很合理】
患病率汇总:
中风患病率:4.26%
心脏病患病率:55.29%
肝硬化死亡率:40.22%
Stroke各特征与中风的相关性:
age: 0.232
hypertension: 0.143
heart_disease: 0.138
ever_married: 0.105
work_type: 0.080
Residence_type: 0.006
avg_glucose_level: 0.139
bmi: 0.042
smoking_status: -0.076
Heart各特征与心脏病的相关性:
Age: 0.282
Sex: 0.305
ChestPainType: -0.469
RestingBP: 0.118
Cholesterol: -0.231
FastingBS: 0.268
RestingECG: 0.062
MaxHR: -0.401
ExerciseAngina: 0.495
Oldpeak: 0.404
ST_Slope: -0.608
Cirrhosis各特征与死亡状态的相关性:
N_Days: -0.385
Drug: -0.036
Age: 0.225
Sex: 0.178
Ascites: 0.291
Hepatomegaly: 0.292
Spiders: 0.229
Edema: 0.261
Bilirubin: 0.427
Cholesterol: 0.190
Albumin: -0.271
Copper: 0.395
Alk_Phos: 0.277
SGOT: 0.265
Tryglicerides: 0.227
Platelets: -0.087
Prothrombin: 0.374
Stage: 0.321
问题2:疾病预测模型
问题描述:基于特征建立疾病预测模型,评估不同疾病(心脏病、中风、肝硬化)的患病概率。
可以使用分类算法(如逻辑回归、支持向量机、随机森林)来预测疾病的发生概率,并使用交叉验证和混淆矩阵评估模型的性能。
可能使用的模型:
逻辑回归:适合处理二分类问题。
支持向量机(SVM):在高维空间有效分类。
随机森林:集成学习方法,适用于处理复杂数据。
对于问题二,我们需要对不同的数据进行不同的处理方式,对连续变量进行标准化处理。并基于基于问题一的相关性分析结果选择重要特征。下面为了初步展示,我们实现了三种经典的机器学习算法:
逻辑回归:线性模型,解释性强,适合医学应用
支持向量机(SVM):非线性模型,适合小样本数据
随机森林:集成学习,能处理特征交互,提供特征重要性
最终结果如下所示是
--- Stroke模型性能对比 ---
模型准确率精确率召回率特异性F1分数AUC
逻辑回归0.95720.00000.00000.99890.00000.8148
SVM0.95820.00000.00001.00000.00000.5000
随机森林0.95720.00000.00000.99890.00000.7842
--- Heart模型性能对比 ---
模型准确率精确率召回率特异性F1分数AUC
逻辑回归0.85250.84260.90100.79270.87080.9094
SVM0.77050.75210.87130.64630.80730.5000
随机森林0.81970.80910.88120.74390.84360.9021
--- Cirrhosis模型性能对比 ---
模型准确率精确率召回率特异性F1分数AUC
逻辑回归0.78180.81250.59090.90910.68420.9325
SVM0.78180.75000.68180.84850.71430.5000
随机森林0.80000.82350.63640.90910.71790.8960
其他可以选择的模型,如下所示
问题3:多疾病关联与综合风险评估
问题描述:构建一个综合风险评估模型,预测患者同时患有心脏病、中风和肝硬化的概率。
对于本问题
年龄(Age)
Stroke数据集:age
Heart数据集:Age
Cirrhosis数据集:Age
特点:三个数据集都有,数值型,可直接对齐
性别(Sex/Gender)
Stroke数据集:gender (0=女, 1=男)
Heart数据集:Sex (0=女, 1=男)
Cirrhosis数据集:Sex (0=女, 1=男)
特点:三个数据集都有,编码一致
胆固醇(Cholesterol)
Stroke数据集:❌ 没有此特征
Heart数据集:✅ Cholesterol
Cirrhosis数据集:✅ Cholesterol
使用年龄以及性别,还有利用医学等价性对齐的特征将Stroke数据集中胆固醇进行合理转换。
单疾病风险预测
心脏病预测:基于年龄+性别+胆固醇
肝硬化预测:基于年龄+性别+胆固醇
中风预测:基于年龄+性别(因为缺少胆固醇数据)
多元回归:分析多个特征对患病风险的影响。
问题4:预防措施建议
八仙过海、各显神通,根据分析结果,提出针对心脏病、中风和肝硬化的预防建议。