ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

数学建模国赛备赛指南:从数据处理到AI辅助,六条线串起完整流程

数学建模国赛备赛指南:从数据处理到AI辅助,六条线串起完整流程 数学建模国赛不是比谁背的模型多而是比谁能在三天左右的时间里把一道陌生的实际问题拆清楚、算出来再写成一篇能让评委看明白的论文。对于零基础或者只有一点编程底子的本科生来说最需要的不是囤一百篇论文而是先把工具、数据、模型、真题、AI、论文这六条线串起来。这篇备赛指南按真实比赛推进顺序展开环境准备、数据处理、三大模型、真题拆解、AI辅助、论文收尾每一段都是可以直接照着执行的动作。如果你现在只会Python基础语法或者连pandas都没怎么用过这篇文章可以直接跟。我见过很多队伍模型背得很熟最后却败在数据没清理干净、图表画得混乱、摘要没有回答题目本身。国奖和省级奖项之间差的往往不是智商而是流程控制。1. 先搞清楚比赛的真实节奏再定备赛顺序1.1 比赛不是熬夜大赛是有限时间里的项目管理第一次参赛的队伍很容易高估模型的难度低估流程管理的难度。真正走到国奖答辩或者评审环节你会发现评委更看重的是问题理解准不准、数据处理扎不扎实、论文能不能把过程和结果说清楚。模型本身反而常常是成熟的现成方法关键看你会不会选、会不会改、会不会解释。所以备赛顺序应该是先练工具操作再练数据处理然后按评价、预测、优化三条线掌握模型最后用真题把整个流程完整跑一遍。不要第一天就去啃《数学建模算法与应用》里最难的章节那不是北极星那是劝退书。1.2 零基础的第一目标完整跑通一道旧题零基础真正的门槛不是看不懂公式而是“跑不动、报错看不明白、结果出来了却不知道对不对”。所以第一个目标定低一点能拿一道过往真题用Python或者Matlab跑出数值结果然后把结果解释成一段人话最后写进论文。我给零基础队伍的建议是不要一上来就啃完整本教材先找一道数据量不大、问题结构清晰的旧题走通“读题—调数据—写代码—出图表—写摘要”全流程。等你完整走完一遍再回头看那些模型理论和公式你会非常清楚每个公式是给哪一步用的。1.3 组队分工“一个数学、一个编程、一个写作”不够用三人队伍的分工不能只看表面学科。我的经验是三个人里必须有一个能快速看懂数据文件一个能写出可运行代码一个能对着模型图把推导过程讲清楚。但这三种角色不能割裂因为最后论文是要三个人共同填的。文档管理也要提前约定好。数据文件单独放一个目录代码按“01_数据清洗、02_模型、03_可视化”命名论文用在线文档协作。否则最后合稿的时候很容易出现三个人写的摘要风格完全不一致图表编号也从1到30乱跳。注意零基础队伍最容易踩的坑不是模型太难而是最后一天还在改代码、导数据、画图论文根本没时间认真写。2. 工具链先把环境装整齐后面会快非常多2.1 Python环境是主线Matlab和Excel做辅助大多数赛题用Python都能完成我不建议零基础队伍同时学Python和Matlab两套环境。优先把Python装好理由很简单生态完整pandas、numpy、matplotlib、scikit-learn、scipy这些库覆盖了数据清洗、建模、可视化的绝大多数需求而且报错信息在中文互联网里能搜到大量解决方案。建议安装Anaconda直接集成Python和常用库省去一个个pip install的麻烦。比赛前确认以下事情Jupyter Notebook能否正常启动、pandas/numpy/matplotlib能否正常导入、scikit-learn是否装好、LaTeX或者Word模板是否下载到位。不要等到比赛当天晚上6点才在群里问为什么import matplotlib报错。Matlab在部分优化类问题和矩阵运算上确实有优势但也有不少学校没有正版授权。如果你的学校有正版授权可以把它当成第二工具平时用Python验证比赛时擅长哪个用哪个。但我不建议两支完全的新手队在三天里同时切换两套环境精力会不够用。Excel也别丢。很多人觉得Excel很初级实际上读取数据、快速查看数据分布、检查列名、做简单透视表Excel比pandas快很多。比赛前期用Excel做人工检查后期用Python做批量处理搭配起来非常舒服。2.2 可视化不要只依赖一个库matplotlib是最基本的选择但画出来的图有时候确实不够精致。建议辅助使用seaborn它基于matplotlib画热力图、分布图、箱线图都很方便代码量也少。如果队伍里有同学熟悉Plotly可以用它做交互式图表但在论文里最后放出来的应该还是静态高清图交互图更适合自己查看数据规律。画图时先做的不是调颜色而是确认坐标轴标签、单位、图例、标题是否完整。很多论文里的图横纵坐标没有单位评委一看就知道是随手画的。换位思考一下如果图上的信息都读不出来谁会相信你的模型算出来60分还是80分2.3 目录、路径、版本命名比赛前就定好这是很多队伍完全忽略的问题。比赛开始后数据文件一般会放在压缩包里文件名可能带日期或者乱码。我建议一拿到题目就建一个固定目录结构project/ ├── data/ # 原始数据不允许改动 ├── code/ # 按01、02、03编号的脚本 ├── figure/ # 论文要用的高清图 ├── docs/ # 论文草稿、参考资料、AI对话记录 └── output/ # 中间结果和最终结果代码里不要用绝对路径统一用相对路径否则换一台电脑之后所有代码都会跑断。变量命名也尽量一致比如data_raw表示原始数据data_clean表示清洗后的数据model_result表示模型输出。这些小事平时看起来无所谓在三天高压状态下能帮你少掉很多头发。3. 数据处理大多数队伍翻车都翻在这里3.1 先看数据文件结构再写代码拿到数据后的第一件事不是急着调用pd.read_csv而是先打开文件看看有几张表、每张表有多少行多少列、列名都是什么、有没有明显乱码。我通常先做两步用Excel打开文件快速看前20行和后20行。用Python打印每个数据文件的shape、dtypes、isnull().sum()。这两步加起来最多10分钟但能避免很多低级错误。比如某张表的列名里藏着空格或者某一列其实是字符串类型直接跑模型时会报TypeError。这种问题靠肉眼扫一遍就能发现靠报错反推反而浪费时间。3.2 缺失值和异常值不能“一刀切”处理缺失值要按列和业务含义来决定策略不要全表填充0也不要直接把有缺失的行全部删除。我常用的判断顺序是缺失比例小于5%可以考虑直接删除对应行。缺失比例在5%到30%之间优先用该列均值、中位数或前后值插值填充。缺失比例超过30%就要谨慎。如果这一列对题目结果影响很大考虑用回归或机器学习方法预测缺失值如果影响不大可以删掉这一列。异常值检测也类似。常见的判断方法包括3σ原则和四分位距IQR方法。但要注意异常值不等于错值。在销售数据里某些极端值可能代表促销活动或者特殊情况不能直接删掉要结合题目背景判断。如果某条数据明显超出物理常识比如成本是负的、时间格式错位、城市名有乱码那才是真正需要清洗的对象。3.3 量纲、单位和编码问题要提前处理很多比赛的数据集不会提前帮你统一单位。比如有的表用万元有的表用元有的用日期字符串有的用时间戳有的省份编码是数字有的是带字母的地区码。统一量纲和单位是第一优先级。数值型特征如果要做距离类模型比如聚类、KNN、神经网络通常要做归一化或者标准化。常用的MinMaxScaler把数据压缩到[0,1]StandardScaler把数据变成均值为0、方差为1。但如果是决策树、随机森林这类基于分割的模型归一化影响不大。这里要注意不要把所有特征都丢进同一个scaler里类别型特征需要单独做编码比如OneHotEncoder。3.4 怎样验证数据清洗后的结果数据清洗完之后不要直接冲到建模环节。先做一次快速验证对比清洗前后的行数变化、各列均值变化、缺失值比例。如果填充缺失值导致某一列均值剧烈变化说明填充策略可能有问题。另一个有效动作是画分布图把清洗前后的关键特征分布放在同一张图里对比。这个步骤虽然简单但能直观发现异常。比如某列填充后出现大量完全相同的值那显然不对。我一般会用一张汇总表记录每一步清洗操作删了多少行、填充了哪几列、用什么方法、为什么这么做。这张表最后可以放到论文附录里也能在后续写模型假设时直接引用。4. 三大模型体系不是背模型是给问题配钥匙4.1 评价类模型先定指标再选权重评价类问题是国赛里最常见的类型之一题目一般会要求你“评价某几个方案或者对象”。核心不是倒公式而是选指标和确定权重。常用的评价方法包括层次分析法AHP、熵权法、TOPSIS、秩和比法、灰色关联度分析。AHP适合指标之间有明显层次关系且能通过一致性检验的场景熵权法更适合数据客观充分、想避免主观赋权争议的场景TOPSIS通常用来对多个方案排序展示出相对贴近程度。我在实际比赛里最常用的组合是层次分析法定权重TOPSIS做排序。这套组合容易解释、计算量不大评委也熟悉。但要注意AHP的主观性会被评委挑战所以判断矩阵的构造要给出理由不要随便填1到9。4.2 预测类模型先看数据量再选复杂度预测类问题强调利用历史数据推测未来。如果只有十几条数据就别上深度学习了灰色预测GM(1,1)反而在小样本场景下更合适。如果数据量中等且线性关系明显线性回归和ARIMA已经够用。如果数据量大且特征关系非线性可以上随机森林、XGBoost或者BP神经网络。选择预测模型时不要盲目追求高精度。评委看重的是你能否解释模型为什么适合这道题。比如你选择ARIMA就要说明数据通过了平稳性检验并给出AIC或者BIC比较选择随机森林就要说清楚为什么它能处理特征之间的非线性关系以及如何做特征重要性排序。4.3 优化类模型约束条件比目标函数更关键优化类问题通常出现在“怎样安排生产”“怎样调度车辆”“怎样分配资源”这类场景。大家最常见的做法是线性规划和整数规划。但真正决定建模水平的是约束条件的提取。好多队伍目标函数写得漂亮却漏掉了产能上限、库存容量、运输时间窗这些现实约束最后结果在理论上很完美实际却完全不可行。拿到优化问题时先把数据里所有限制条件列成一二三条再写代码。如果问题太大可以考虑启发式算法比如遗传算法、模拟退火、粒子群。它们不保证全局最优但能在可接受时间内给出一个较优解。论文里要写清楚为什么精确求解困难为什么选择这个启发式参数怎么设置的结果稳定性如何。4.4 模型选择判断表这里给一张通用判断表方便比赛时快速定位问题类型典型提问方式常用模型需要注意的点评价类评价、排序、比较、打分AHP、熵权法、TOPSIS指标筛选和权重来源要解释预测类预测、估计、未来趋势回归、灰色预测、ARIMA、随机森林先看数据量再看平稳性和特征关系优化类安排、调度、分配、最小最大线性规划、整数规划、遗传算法约束条件必须列全避免理想化分类类识别、分类、判断逻辑回归、SVM、随机森林注意数据均衡性和指标选择关联/聚类类划分、归类、关联分析KMeans、层次聚类、Apriori需要确定聚类数和业务解释性5. 真题拆解不要只看答案要练拆题动作5.1 三遍读题法很多队伍拿到题目后直接开始百度“这类题用什么模型”结果读题只读了个大概最后结论跑偏。我的建议是三遍读题法第一遍快速通读搞清楚题目给了几张表、哪些数据文件、要回答几个小问。先画出题的骨架。第二遍逐段精读把每个小问的输入、输出、约束条件写下来。比如第一问要求“对数据进行分析并给出规律”那输出就应该是一组统计特征和可视化图表第二问要求“建立模型预测未来”那输出就应该是一组预测值和误差指标。第三遍反向检查把每个数据文件和每个小问对齐确认没有多余数据被忽略也没有哪个问题没有对应数据。这一步能防止你写到后面发现“哦原来还有个表没用”。5.2 把子问题映射到数据表和输出结果我用这道模板来拆解所有真题子问题1输入哪些数据 - 做什么处理 - 用什么模型 - 输出什么结果 子问题2输入哪些数据 - 做什么处理 - 用什么模型 - 输出什么结果拆完之后你会发现其实每道题的链条都很短难的是把链条里的每一环都走扎实。比如2024年国赛里的某些数据决策类题目往往第一问是让选手从数据里提取关键特征和规律第二问做模型建立与求解第三问写分析建议或者优化方案。这类题目看起来复杂本质上就是“先描述再预测再优化”三步。5.3 赛后复盘三个问题就够了比赛结束后不要急着发朋友圈拿出半天时间复盘。我只让队伍回答三个问题哪一步花的时间最多是数据处理、模型调试还是论文排版如果重新做一遍哪些环节可以提前准备好有哪些报错反复出现能不能整理成自己的排错清单这样跑一次真题复盘比盲目刷五道旧题更有效。因为国赛题目年年变但读题、数据处理、模型选择、论文写作这些环节是不变的把流程打磨顺畅才能以不变应万变。6. AI应用到底怎么用才不会翻车6.1 AI在备赛和比赛里的三个有效场景这几年大语言模型越来越普及数学建模比赛中用AI辅助已经是很自然的事。但用得好的队伍是在提效用得差的队伍是在“降智”。我总结的三个有效场景代码调试。把报错信息、代码片段、输入数据格式一起发给AI让它定位问题。这比自己在几百行代码里找半天快得多。概念解释和模型选型。当你不确定某个模型适不适合当前数据时可以用“我有N条数据、目标是预测某指标、特征包含哪些列”这种提示词让AI先帮你做一轮初步筛选。撰写辅助。包括把复杂推导过程用通俗的话解释一遍、生成图表标题、润色摘要。但所有内容都要自己读一遍并修改不能直接复制粘贴。6.2 提示词设计把模糊需求变成可执行任务很多同学问AI效果不好是因为提示词太模糊。你问“这个数据怎么处理”AI只能给你一堆通用建议。你应该直接告诉它我有684条数据包含3列数值特征和1列日期。目标是预测未来30天的销售额。 当前使用的模型是梯度提升树。运行时出现报错ValueError: Input contains NaN。 请检查我的数据清洗代码并指出可能产生缺失值的步骤。这种具体描述比“我的模型报错了怎么办”有效得多。再比如写摘要时可以先给AI一段你算出来的结果然后要求把以下内容整理成竞赛论文摘要不超过300字注意保留 1. 题目要求解决的问题 2. 每个小问采用的方法 3. 每个小问的主要数值结果 4. 关键词3到5个。这里要注意AI生成的东西只是初稿最终稿一定要由队伍里最懂问题的那个人来改。因为AI很容易把“合理但虚假”的表述写进去比如“结果准确率高达99%”这种话一旦出现在论文里会被评委直接质疑。6.3 AI生成代码和论文的边界用AI生成代码是可以的但生成之后必须本地运行测试。我见过很多AI写的代码使用了不存在的API或者过时的库版本不测试就塞进论文最后只能翻车。用AI辅助论文时边界更清晰一点模型公式推导、算法原理、问题理解这些核心内容必须自己写AI可以帮你润色和调整语序。数据结果必须来自真实代码运行不能靠AI编一个数字。论文提交前要确认原创性所有外部内容都要经过修改和消化。比赛考察的是你的建模能力和科研表达能力AI只是工具不是代笔。建议把每次和AI对话的关键内容复制到单独的txt文件里注明日期和用途。后期写论文或者做复盘时这些记录能帮你快速找回当时的思路也能避免重复让AI解决同一个问题。7. 论文撰写摘要和图表才是拿奖的门面7.1 摘要怎么写摘要的重要性怎么强调都不为过。很多评委在分类评审时先看摘要基本决定这篇论文是进国奖候选还是只拿省奖。摘要不要写“本文建立了A模型和B模型”这种空洞句式而是要把每个问题用什么方法、得到什么数值结果、有什么结论写清楚。我习惯的摘要结构是针对问题一首先对表2数据进行统计分析和可视化发现XX规律 然后建立XX模型求得XX方案的最优结果为XX 最后通过XX检验验证了模型的稳定性。 针对问题二……注意每个小问都要有结果数字这是摘要和“文章简介”的本质区别。如果没有具体数字评委很难相信你真的算过。7.2 图表和排版规范图表是论文的骨架排版是论文的皮肤。一条经验每张图放到论文里之前先问自己三个问题坐标轴有没有单位图例能不能区分这张图是否支撑上下文里的结论表格也是一样不要直接把pandas输出的DataFrame截图放上去。删掉多余列保留关键结果加上三线表格式评委看起来才舒服。如果学校每年提供了模板最好提前下载模板并在里面写几个示例熟悉字体、字号、页边距、公式格式。不要等到最后一天晚上才从Word模板里调整公式编号那种体验真的很难受。7.3 模型假设、灵敏度分析和附录模型假设不能乱写也不能不写。假设的目的是把现实问题简化到可计算的范围但同时要让评委接受。比如“假设某一时段内数据变化率保持稳定”“假设运输过程中无意外延误”“假设题目给出的数据真实可靠”。假设过多论文显得不够真实假设过少模型可能被评委一个问题问住。灵敏度分析是很多人容易丢分的地方。所谓灵敏度分析就是看参数变化时结果变化大不大。以预测模型为例可以观察样本量减少10%、20%时预测误差如何变化以优化模型为例可以观察目标函数中某一权重变化时方案排序是否改变。这部分能反映出你对结果的谨慎程度。附录不要贴整段没有任何注释的代码。可以让附录代码保留关键部分并加注释说明“这里是数据清洗”“这里是模型求解”“这里是绘图”。至于中间过程的大量输出不需要全部放进去。支撑材料里可以放完整代码和结果文件但论文本身要控制篇幅。7.4 最终检查清单提交前一个晚上不要通宵乱改模型参数而是按这个清单逐项检查论文页数是否符合比赛要求。摘要是否每个小问都有结果。正文章节编号是否连续。图表编号是否对应正文引用顺序。公式是否统一编号。参考文献格式是否统一。支撑材料里代码能否在干净环境里运行。所有文件名是否规范没有“最终版”“最最终版”这种命名。把这份清单提前打印出来或者存在手机里比赛结束后不管多困都要走一遍。很多队伍就是倒在了最后的格式和文件细节上非常可惜。备赛数学建模国赛最怕的不是没有天赋而是该准备的没准备该检查的没检查。工具顺手、数据干净、模型匹配、论文清楚四个环节都守住你离国奖就不远了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进