MCM/ICM C题代码手(数据处理与建模落地)
目标
- •把题面附件数据变成“可复现的分析流水线”(读取→清洗→特征→训练→评估→出图/表)。
- •确保:无泄露、可重复、可解释、输出能直接用于论文。
默认技术栈(可根据项目约束调整)
- •包管理:
uv(默认) - •Python:
pandas/numpy/scipy - •建模:
scikit-learn(通用),必要时statsmodels(统计推断) - •可视化:
matplotlib/seaborn
默认项目骨架(建议)
目标:让“拿到题面数据 → 一键复现图表/表格/区间”的路径最短。
- •
data/raw/:题面原始附件(只读) - •
data/processed/:清洗后的数据(可复现生成) - •
src/:特征、训练、评估核心逻辑 - •
scripts/:可执行入口(例如scripts/run_all.py) - •
outputs/figures/:论文用图(png/pdf) - •
outputs/tables/:论文用表(csv/tex) - •
outputs/predictions/:预测与区间结果(csv)
uv 依赖管理(默认约定)
- •使用
pyproject.toml管理依赖,uv.lock锁定版本。 - •依赖分组建议:
- •runtime:
pandas numpy scipy scikit-learn matplotlib seaborn - •dev:
ruff black(可选)
- •runtime:
可复现要求:报告中出现的任何图表/表格,必须能由 uv 环境运行脚本生成。
工作流
- •
建立数据入口(I/O 层)
- •读取 csv/tsv/xlsx 时固定:编码、缺失值标记、日期解析、dtype。
- •对每个原始文件输出:行数、列数、主键唯一性、时间范围。
- •
数据清洗(Clean)
- •统一:列名风格、单位、时区/日期格式。
- •处理:
- •重复(按主键去重或聚合)。
- •缺失(删除/插补/单独类别/用模型可接受的方式)。
- •异常(winsorize/截断/规则过滤)。
- •
特征工程(Features)
- •时间序列/事件序列:滚动窗口、滞后项、变化率、累计量。
- •类别:one-hot/target encoding(注意泄露)。
- •文本(如 2020C):TF-IDF/情感词典/简易主题(优先轻量可解释)。
- •
切分与验证(No Leakage)
- •时间序列:滚动窗口验证(不要随机打乱)。
- •结构化独立样本:train/valid/test + CV。
- •任何“当天决策”题(如交易策略):严格使用
<= t数据。
- •
训练与基线对比
- •至少实现:
- •baseline 模型(简单稳健)。
- •improved 模型(更强但仍可解释)。
- •输出统一对比表:指标均值 + 波动(std 或区间)。
- •至少实现:
5.1 实验记录(Minimal Reproducibility)
- •固定并输出:随机种子、数据版本(文件名+时间戳)、特征列表、训练/验证切分规则、关键超参。
- •强制保存:
- •训练配置(json/yaml/py dict 皆可)
- •关键中间产物(清洗后数据、特征矩阵索引、预测结果)
- •不确定性区间(推荐 bootstrap)
- •对预测或性能指标做 bootstrap:
- •输出 90%/95% 区间。
- •明确 resampling 单位(行/天/比赛/国家等),避免破坏相关结构。
- •对预测或性能指标做 bootstrap:
6.1 炫技模块(选做,但必须“能复现 + 能验收 + 能成图”)
- •原则:每加一个高级模块,至少多产出 1 张图/1 张表/1 个区间,并能在报告中解释“带来什么改进”。
- •时间序列/策略题:Rolling Origin (Time Series CV)
- •做法:训练集永远只用过去,测试点随时间滚动。
- •交付物:不同窗口/步长下的误差箱线图或均值±区间。
- •分布无关预测区间:Conformal/Ensemble Interval
- •做法:用校准集残差构造区间(避免强分布假设)。
- •交付物:empirical coverage(覆盖率)+ 平均区间宽度。
- •变化点检测(Change Point)
- •做法:对关键序列(得分差、胜率、热度、价格收益等)做变化点标注。
- •交付物:变化点标注图 + 变化点前后特征差异表。
- •概率校准(Calibration)
- •做法:若输出概率/风险,补充 calibration curve 或 reliability diagram。
- •交付物:Brier/LogLoss + 校准曲线。
- •Ablation / Sensitivity
- •做法:删除关键特征/改变关键超参/改变切分策略,观察性能与区间变化。
- •交付物:消融对比表(含区间)。
- •出图出表(论文友好)
- •统一图风格:字号、线宽、配色、注释。
- •每张图必须能回答一个子问题(不要炫技)。
- •输出:
- •关键结果图(趋势/对比/重要性)。
- •数据质量图(缺失热力图/异常分布)。
质量门槛(交付前自检)
- •同一份代码重复运行结果一致(固定随机种子/版本)。
- •训练/验证划分方式在报告中可解释且无泄露。
- •所有图表都有标题、轴标签、单位、数据来源(题目附件/外部数据)。
- •如使用“炫技模块”:必须能一键复现到图表与数值(不要只在正文描述)。
- •默认交付口径:
- •图:
outputs/figures/ - •表:
outputs/tables/ - •预测/区间:
outputs/predictions/
- •图: