Skip to content
AdamsF-creatorPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

2025年全国大学生数学建模竞赛 C 题 —— NIPT 时点选择与胎儿异常判定

本项目为 2025 年全国大学生数学建模竞赛 C 题(NIPT 时点选择与胎儿异常判定)的完整解决方案,包含数据预处理、四个问题的建模与求解代码,以及全部可复现的实验结果。

项目简介

无创产前检测(Non-Invasive Prenatal Testing, NIPT)通过检测孕妇外周血中游离胎儿 DNA 来评估胎儿染色体异常风险。本项目围绕以下四个问题展开:

问题 主题 核心方法
问题一 男胎 Y 染色体浓度(Y_Conc)随孕周的增长规律 线性混合效应模型(LMM)+ Logit 变换
问题二 基于 BMI 分组的最佳 NIPT 检测时点决策 高斯过程回归(GPR)+ AFT 生存分析 + 遗传算法(GA)
问题三 多因素协同下的时点优化与自适应达标比例 多元 AFT + Elastic-Net 特征筛选 + 遗传算法
问题四 女胎染色体(13/18/21 号)异常判定 多通道分类器 + 批次去偏校准 + SMOTE + 一致性投票

项目结构

2025C/
├── data.xlsx                          # 原始数据(男胎检测数据 / 女胎检测数据 两个 Sheet)
├── nipt-coding-guide-v2.md            # 建模规范文档(Spec)
├── nipt_processed_data.csv            # 预处理后的统一数据集(37 列,1687 条样本)
├── step1_data_preprocessing.py        # 步骤一:数据预处理
├── step2_problem1_yconc_lmm.py        # 步骤二:问题一(Y 染色体浓度增长规律模型)
├── step3_problem2_bmi_decision.py     # 步骤三:问题二(基于 BMI 分组的最佳时点决策)
├── step4_problem3_multivariate_decision.py  # 步骤四:问题三(多因素协同时点优化)
├── step5_problem4_female_aneuploidy.py      # 步骤五:问题四(女胎异常判定)
├── problem1_outputs/                  # 问题一输出(模型摘要、系数表、ICC、轨迹图)
├── problem2_outputs/                  # 问题二输出(最优策略、AFT 参数、灵敏度分析)
├── problem3_outputs/                  # 问题三输出(4×9 策略矩阵、P 灵敏度分析)
├── problem4_outputs/                  # 问题四输出(患者级预测、混淆矩阵、信号诊断)
└── .vscode/                           # VSCode 配置

数据说明

  • data.xlsx:竞赛原始数据,包含 男胎检测数据 与 女胎检测数据 两个工作表;
  • nipt_processed_data.csv:由 step1_data_preprocessing.py 生成的标准化数据,列名统一为英文(如 Patient_ID、Gestational_Week、BMI、GC_Total、Y_Conc、Z_13/Z_18/Z_21、Aneuploidy_Status、Healthy_Outcome 等),并新增 GA(孕周浮点数值)与 Quality_Pass(GC 质控标记)两列。

环境依赖

  • Python 3.9+(已在 Python 3.9 环境下运行验证)
  • 主要依赖库:
numpy
pandas
scipy
statsmodels
scikit-learn
matplotlib
lightgbm
imblearn

安装依赖:

pip install numpy pandas scipy statsmodels scikit-learn matplotlib lightgbm imblearn

快速开始

按顺序运行以下脚本即可完整复现全部结果:

# 1. 数据预处理(生成 nipt_processed_data.csv)
python step1_data_preprocessing.py

# 2. 问题一:Y 染色体浓度增长规律模型
python step2_problem1_yconc_lmm.py --plot

# 3. 问题二:基于 BMI 分组的最佳 NIPT 时点决策
python step3_problem2_bmi_decision.py

# 4. 问题三:多因素协同时点优化(含 P 四档灵敏度分析)
python step4_problem3_multivariate_decision.py --p-sweep

# 5. 问题四:女胎染色体异常判定
python step5_problem4_female_aneuploidy.py

各脚本均支持 --csv 指定输入数据、--output-dir 指定输出目录等参数,可通过 python <脚本名> -h 查看全部选项。

各问题建模方法与结果

问题一:Y 染色体浓度增长规律关系模型

建模思路:同一孕妇存在多次纵向测量,因此以孕妇个体(Patient_ID)作为随机效应建立线性混合效应模型(LMM);为防止预测浓度越界,对 Y 染色体浓度作 Logit 变换后建模,固定效应包含孕周(GA)与 BMI 的一次、二次项(均值中心化)。

关键结果(REML 估计,631 条有效记录 / 251 位孕妇):

| 固定效应 | 系数 | 标准误 | z | P>|z| | | :--- | ---: | ---: | ---: | ---: | | Intercept | -2.603 | 0.034 | -76.82 | <0.001 | | GA_c | 0.036 | 0.004 | 9.08 | <0.001 | | GA_c² | 0.003 | 0.001 | 3.79 | <0.001 | | BMI_c | -0.023 | 0.011 | -2.10 | 0.036 | | BMI_c² | -0.001 | 0.002 | -0.68 | 0.499 |

  • 组内相关系数 ICC = 0.7297,说明孕妇个体间差异解释了大部分变异,纵向混合模型是必要的;
  • 孕周对 Y 浓度有显著正效应(且二次项显著,增长略呈加速趋势);
  • BMI 对 Y 浓度有显著负效应(血液稀释效应),BMI² 项不显著。

问题二:基于 BMI 分组的最佳 NIPT 时点决策

建模思路:三段式流程 ——

  1. GPR 轨迹插值:用高斯过程回归(ConstantKernel × RBF + WhiteKernel)对每位孕妇的 BMI 时序轨迹在孕周 [10, 25] 区间内平滑插值;
  2. AFT 生存分析:以“Y 浓度首次达到 4%”为事件、未达标为右删失,拟合 LogNormal 加速失效时间模型 ln(T) = β0 + β1·BMI + σ·W,得到任意时点的累积达标概率 F(t);
  3. 遗传算法优化:求解 4 条 BMI 分界线 [b₁, b₂, b₃, b₄] 与 5 个组别推荐时点 [t₁, …, t₅],最小化未达标风险与检测延误惩罚的加权和(0.7 : 0.3),并满足各组保障率 ≥ 95%、分界线有序、时点单调等约束。

关键结果(基准场景 kappa = 1.0):

AFT: ln(T) = 2.1125 + 0.0177 × BMI,  sigma = 0.2169
最优分界线 b = [28.19, 31.12, 32.04, 34.45]
推荐时点   t = [20.53, 20.75, 21.42, 21.95, 25.00]
最小保障率 0.9524,平均保障率 0.9738,综合加权风险 3615.36

同时提供了检测噪声场景 kappa ∈ {0.75, 1.00, 1.25, 1.50} 的灵敏度分析:噪声越大推荐时点越靠后,kappa ≥ 1.25 时 95% 保障率约束在 [10, 25] 孕周窗口内不可行(高 BMI 孕妇无法在 25 周前达标)。

问题三:多因素协同下的时点优化与自适应达标比例

建模思路:将协变量扩展为 BMI、Age、Height、Initial_Weight,先用 Elastic-Net 惩罚回归筛选显著特征,再拟合多元 LogNormal AFT 模型,最后用遗传算法针对不同保障率门限 P 求解最优策略。

关键结果:Elastic-Net 保留了 BMI 与 Initial_Weight,剔除 Age、Height;默认 P = 0.95 时最优策略为:

最优分界线 b = [31.05, 31.73, 33.86, 35.55]
推荐时点   t = [20.52, 20.99, 21.69, 22.20, 25.00]

保障率门限 P 灵敏度分析(4×9 决策策略矩阵):

P b₁ b₂ b₃ b₄ t₁ t₂ t₃ t₄ t₅
0.50 31.14 33.90 35.76 38.92 14.46 15.29 15.80 16.86 18.77
0.75 31.15 33.78 35.33 38.69 16.73 17.65 18.01 19.11 21.72
0.90 31.61 34.06 35.99 39.07 19.08 20.12 20.85 22.21 25.00
0.99 28.19 28.37 28.83 29.01 22.69 23.00 23.22 23.45 25.00

结论:达标保障率要求越高,推荐检测时点越晚;P = 0.99 时在孕周 [10, 25] 窗口内无法满足全部组约束,输出为最优尽力解。

问题四:女胎染色体异常判定

建模思路:

  1. 批次去偏校准:用健康男胎对照样本对各染色体 Z 值关于 GC、BMI、Total_Reads 线性回归,得到校准残差 Z;
  2. 多通道专家模型:为 13/18/21 号染色体分别建立独立二分类通道(特征 = 校准 Z + 染色体 GC + BMI + Age + Total_Reads + Mapped_Ratio),用 SMOTE 缓解样本失衡,梯度提升分类器(优先 LightGBM,未安装时回退 HistGradientBoosting);
  3. 刚性安全守门人:|Z_calibrated| ≥ 3.0 时一票否决强制判阳性;
  4. 患者级一致性投票:同一孕妇多次检测至少 2 次异常方确诊(检测次数 < 2 时 1 次异常即报警)。

评估方式:患者级分层 5 折交叉验证(避免同一孕妇样本泄漏),结果如下:

通道 患者数 Precision Recall F1
T13 147 0.121 0.222 0.157
T18 147 0.194 0.233 0.212
T21 147 0.071 0.167 0.100
任意异常 147 0.385 0.568 0.459

诚实说明:信号诊断显示本数据集中异常样本与正常样本在校准 Z 上几乎不可分,|Z| ≥ 3 硬红线对真实阳性几乎不触发,指南要求的 100% 召回在现有特征下不可达;输出为忠实评估值,不进行虚假报告。

输出文件说明

problem1_outputs/(问题一)

文件 说明
problem1_model_summary.txt LMM 模型摘要(REML,含固定效应与随机效应方差)
problem1_fixed_effects.csv 固定效应系数表(含 Wald 检验 p 值)
problem1_random_effects.csv 随机效应方差协方差
problem1_icc.csv ICC 等汇总指标
problem1_yconc_trajectory.png Y 染色体浓度随孕周增长轨迹图

problem2_outputs/(问题二)

文件 说明
problem2_strategy.csv 基准场景最优策略(4 条分界线 + 5 个推荐时点)
problem2_strategy_kappa*.csv 各 kappa 场景最优策略
problem2_aft_params.csv LogNormal AFT 模型参数
problem2_group_stats*.csv 各组 BMI 区间、推荐时点、样本量、保障率与风险明细
problem2_kappa_sweep.csv / _report.txt kappa 灵敏度分析结果与偏差报告
problem2_model_summary.txt 模型与策略汇总
problem2_decision_curves.png 决策曲线图

problem3_outputs/(问题三)

文件 说明
problem3_strategy.csv 默认 P = 0.95 场景最优策略
problem3_strategy_matrix.csv P 四档(0.50/0.75/0.90/0.99)4×9 决策策略矩阵
problem3_strategy_P*.csv 各 P 档最优策略
problem3_elasticnet_screening.csv Elastic-Net 特征筛选结果
problem3_aft_params.csv 多元 AFT 模型参数
problem3_group_stats*.csv 各组保障率与风险明细
problem3_p_sweep.csv / _report.txt P 灵敏度分析结果与偏差报告
problem3_model_summary.txt 模型与策略汇总
problem3_decision_curves.png 决策曲线图

problem4_outputs/(问题四)

文件 说明
problem4_metrics.csv 各通道(T13/T18/T21/ANY)患者级评估指标
problem4_model_summary.txt 患者级评估报告(混淆矩阵、信号诊断、数据限制说明)
problem4_patient_predictions.csv 患者级预测明细
problem4_signal_diagnostic.csv 校准 Z 的分布统计与
problem4_z_diagnostics.png Z 值诊断图

复现说明

  1. 原始数据以 data.xlsx 形式提供,运行 step1_data_preprocessing.py 生成 nipt_processed_data.csv;后续各步骤自动优先读取该文件,若不存在则回退读取 data.xlsx;
  2. 问题二、三中的遗传算法存在随机性,可通过 --seed 参数固定随机种子;默认结果与仓库内输出一致;
  3. 问题四若未安装 LightGBM,将自动回退到 scikit-learn 的 HistGradientBoostingClassifier,结果可能略有差异。

说明

  • 本仓库为数学建模竞赛练习/复现项目,代码与结果仅供学习交流使用;
  • 数据与竞赛题目版权归竞赛主办方所有,请勿用于商业用途。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages