ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

数学建模国赛备赛全流程:数据处理、模型构建与论文写作指南

2026/9/2 22:40:56 拓冰建站 浏览量
数学建模国赛备赛全流程:数据处理、模型构建与论文写作指南 1. 引言国赛拼的不是智商而是流程掌控力每年到了夏天数学建模国赛的备战话题就开始在各种群里刷屏。我见过太多队伍的状态是这样的赛前资料存了几个G论文模板下载了十来个Python库装了一堆结果三天赛程真正开始时光是一道数据处理就把半天耗进去了或者第一天晚上就急着套模型第二天发现数据规律跟假设完全不匹配只能全部推翻重来更常见的是模型跑通了、图也画了最后论文写得像实验报告评委看三分钟就失去了耐心。很多第一次参赛的同学会把国赛想象成“高智商比拼”但真正拿国奖的队伍往往不是算法最强的队伍而是流程掌控力最强的队伍。数学建模国赛的实质是一场72小时的限时科研交付。你需要完成理解一个陌生的实际问题 → 设计数学表达 → 编写代码求解 → 验证结果 → 用论文说服评委。这里任何一个环节掉链子都会导致整体崩盘。这篇文章会按实战顺序把整个备赛和参赛流程拆成一套可执行的框架从团队分工、必备工具到数据处理、三大核心模型再到真题全流程演示、AI辅助的合规用法与论文撰写规范。如果你现在还是“零基础”看完这篇文章后你至少能明白国赛考什么、什么时候该做什么、遇到问题该查哪里。2. 赛前准备与团队分工拿奖的第一步不是学算法而是定规矩2.1 国赛到底在评什么全国大学生数学建模竞赛CUMCM每年有数万支队伍参赛题目通常分为两种导向数据分析与统计建模题给一张或若干张数据表让你做预测、分类、评价或优化例如2025年的C题“蔬菜类商品的自动定价与补货决策”。物理机理与优化决策题偏工程和运筹需要用微分方程、规划模型或仿真来模拟一个物理过程例如2023年的B题“多波次导弹发射中的规划问题”。但无论题目属于哪种评委最看重的是四件事假设合理性、模型正确性、结果可验证性、论文表达清晰度。这四件事并不要求你掌握多前沿的算法而是要求你把一套标准流程走到位。2.2 三个人怎么分工国赛建模队伍标准配置是三人建模手、编程手、论文手。这里要注意分工不等于“各管一摊”而是每个阶段有主要负责人但所有人都必须知道整体进度。建模手负责构建数学表达式、寻找合适模型、推导算法流程。他必须能在拿到题目的前2小时内给出至少2个候选建模方向。编程手负责把数学模型变成可运行的代码并做数据清洗、结果可视化。他的核心产出是一个能反复跑通的代码仓库而不是一次性脚本。论文手负责全文结构、摘要撰写、图表规范和文字润色。国赛论文的摘要极其关键因为评委第一轮先看摘要摘要不过关论文基本没戏。推荐的备赛节奏是赛前至少完整合练2次每次严格按72小时模拟。合练的目的不是做出多漂亮的题而是磨合流程——谁负责计时、谁负责记录问题、每天几点同步一次。2.3 必备工具清单根据近年国赛的实际场景下面这套工具链足够覆盖90%以上的任务类别推荐工具用途编程语言Python 3.8数据处理、建模、可视化、机器学习科学计算NumPy、SciPy、Pandas数值计算、插值、优化、数据清洗可视化Matplotlib、Seaborn论文图表建模辅助Scikit-learn、StatsModels回归、分类、时间序列优化求解SciPy.optimize、PuLP、ortools线性规划、整数规划文档协作OverleafLaTeX或 Word论文排版团队协作GitHub / Gitee 私有仓库代码版本管理思维整理XMind / 幕布赛题拆解、模型方案对比有一点要特别提醒不要在赛中去学新工具。如果你的队友只会用Excel做数据处理那就用Excel千万不要在第一天临时学Pandas。比赛期间的工具必须是你已经跑通过的工具。3. 数据处理国赛中 80% 的队伍输在第一步很多新手拿到赛题后第一反应是找模型这是非常危险的误区。国赛的数据题通常会在附录里给你好几张CSV或Excel表格数据量几十万行并不罕见。如果数据不清理、不探索、不构造特征任何模型都跑不出有说服力的结果。3.1 数据处理的标准流程完整的数据处理流程通常包括以下六个环节数据读取与合并、缺失值处理、异常值处理、归一化/标准化、特征构造、训练集与测试集拆分。先看一个标准的数据读取与合并示例import pandas as pd import numpy as np # 文件路径./data/ sales pd.read_csv(./data/sales_detail.csv, encodingutf-8) price pd.read_csv(./data/price_daily.csv, encodingutf-8) goods pd.read_csv(./data/goods_info.csv, encodingutf-8) # 查看数据形状与字段 print(sales.shape) print(sales.columns.tolist()) print(sales.head()) # 合并数据注意核对主键避免笛卡尔积 df sales.merge(price, on[product_id, date], howleft) df df.merge(goods, onproduct_id, howleft) print(df.isnull().sum())这段代码的逻辑是先读取三张原始表然后按主键把它们合并成一张宽表。merge时要特别小心how参数如果关联字段有重复值很容易产生行数膨胀。合并后第一件事就是检查缺失值因为后续所有建模都建立在数据完整性的基础上。3.2 缺失值与异常值的判断标准缺失值处理不是一刀切“删掉”或“填0”而是要看业务含义。以蔬菜定价问题为例某天某品类销量缺失可能是门店未营业可以用前7天同一日期的平均值填充。批发价格缺失可能影响成本计算需要用相邻日期插值。销量为负或价格小于0直接判定为异常需要剔除或标记。下面是一个缺失值填充函数的示例def fill_missing(df, target_col, group_col, window7): 按 group_col 分组用前 window 天的均值填充缺失值 df df.sort_values([date]) df[target_col _fill] df.groupby(group_col)[target_col].fillna( df.groupby(group_col)[target_col].transform( lambda x: x.rolling(window, min_periods1).mean() ) ) return df # 使用示例 df fill_missing(df, target_colsales_volume, group_colcategory_name)异常值方面常用方法包括3σ原则计算均值与标准差超出均值±3倍标准差的值视为异常。IQR四分位距法把低于Q1-1.5×IQR或高于Q31.5×IQR的值视为异常。业务规则法例如单价高于历史最高价2倍基本可以判定为录入错误。对异常值不要直接删除建议先把它设成NaN再用缺失值方法填充这样能保留数据量的同时降低噪声。3.3 特征构造让模型从数据里看到更多信息数据清洗只是第一步国赛拿奖队伍通常还会做特征工程。以2025年C题蔬菜定价为例可以从原始数据中构造这些特征时间特征星期几、是否节假日、月份、季度。历史统计特征最近7天销量均值、最近7天销量标准差、上一天销量。价格相关特征批发价格的7日移动均值、价格波动率。交叉特征销量与价格的比值价格弹性、品类内销量占比。# 时间特征 df[date] pd.to_datetime(df[date]) df[weekday] df[date].dt.weekday df[month] df[date].dt.month df[is_weekend] df[weekday].apply(lambda x: 1 if x 5 else 0) # 滚动统计特征 df[sales_lag7] df.groupby(product_id)[sales_volume].transform( lambda x: x.shift(7) ) df[sales_roll_mean7] df.groupby(product_id)[sales_volume].transform( lambda x: x.rolling(7, min_periods1).mean() ) df[price_roll_std7] df.groupby(product_id)[price].transform( lambda x: x.rolling(7, min_periods1).std() )这些特征会直接影响后续模型的天花板。在国赛数据题里模型精度往往不取决于算法多深而取决于特征是否充分反映业务规律。4. 三大核心模型从数据规律到优化决策虽然国赛题目变化多端但归纳起来最常出现的模型方向有三类机器学习预测模型、优化决策模型、评价与聚类模型。下面分别介绍它们的适用场景与代码框架。4.1 机器学习预测模型回归与时间序列当题目问“预测未来销量/价格/人数”时首选是回归类模型。常用方法包括线性回归 / 岭回归 / Lasso可解释性强适合基线。随机森林 / XGBoost / LightGBM能捕捉非线性关系是国赛数据题的常胜将军。时间序列模型ARIMA、Prophet适合强时序依赖的数据。以蔬菜销量预测为例可以使用 LightGBM 快速建立基线from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error import lightgbm as lgb features [weekday, month, is_weekend, sales_lag7, sales_roll_mean7, price_roll_std7, price] X df[features] y df[sales_volume] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) model lgb.LGBMRegressor( n_estimators500, learning_rate0.05, max_depth7, num_leaves31, random_state42 ) model.fit(X_train, y_train) y_pred model.predict(X_test) print(MAE:, mean_absolute_error(y_test, y_pred))LightGBM 的优势是训练快、对缺失值不敏感但它的缺点是调参空间大新手容易“过拟合到训练集”。因此在国赛中建议先用线性回归跑通流程再逐步尝试树模型每次都要在验证集上对比效果而不是只看训练集表现。4.2 优化决策模型线性规划与整数规划当题目问“如何安排生产/运输/补货使利润最大或成本最小”时核心是优化模型。这类题目的标准写法是目标函数 决策变量 约束条件。以2025年C题为例你需要在给定批发价和销售价的条件下决定每个品类每天的补货量使得总收益最大化。下面是一个简单的线性规划求解示例from scipy.optimize import linprog # 假设有两种蔬菜A和B # 最大化收益: 3*x1 2*x2 # 约束条件: x1 x2 100, x1 60, x2 50, x1,x2 0 c [-3, -2] # linprog 默认求最小值所以取负号 A_ub [[1, 1]] b_ub [100] bounds [(0, 60), (0, 50)] result linprog(c, A_ubA_ub, b_ubb_ub, boundsbounds, methodhighs) print(result.x) # 最优解 print(-result.fun) # 最大收益这里最关键的是把实际业务翻译成数学表达式。很多队拿到优化题第一反应是暴力枚举但一旦决策变量超过三维暴力枚举就不可行了。建议在写代码前先在纸上把问题严格写成“目标、变量、约束”三段式。4.3 评价与聚类模型层次分析、熵权法、K-Means当题目让你“评价多个方案优劣”或“对样本分类”时常见选择是层次分析法AHP、熵权法、TOPSIS、K-Means聚类。其中层次分析法适合主观判断较多的评价但一致性检验容易不通过。熵权法 / 变异系数法用数据客观定权适合与AHP做对比。K-Means聚类适合无监督分类例如把不同品类按销售模式分组。熵权法的核心是把每个指标归一化后计算信息熵信息熵越小表示该指标越重要。具体公式是归一化正向指标(x_{ij} \frac{x_{ij}-\min(x_j)}{\max(x_j)-\min(x_j)})计算指标比重 (p_{ij} \frac{x_{ij}}{\sum_i x_{ij}})计算熵值 (e_j -\frac{1}{\ln n}\sum_i p_{ij}\ln p_{ij})计算权重 (w_j \frac{1-e_j}{\sum_j(1-e_j)})这类模型写代码不难难的是说明白为什么选这个评价方法。建议在论文里给出两个方法的交叉验证这样更让评委信服。5. 真题全流程演示以2025年C题蔬菜定价为例2025年国赛C题是一道非常典型的数据分析与优化综合题可以帮你把前面的知识串起来。题目逻辑大体是你拿到某超市多个品类蔬菜的销售流水数据、批发价格数据和商品信息需要通过数据分析建立定价与补货决策模型。5.1 第一步读懂问题与数据拿到题后第一个小时不要写代码而是画一张“问题地图”已知量是什么给出哪些表要求预测什么预测时间窗口是多长要求决策什么决策频率是按周还是按天评价标准是什么是收益最大、成本最小还是损耗最小以C题来说预测对象是未来一周的销量决策对象是每天的补货量与定价策略。5.2 第二步先做基线模型再逐步改进很多队伍一开始就上复杂模型结果数据还没处理好。正确做法是先快速跑通一个基线——用最近7天平均销量作为预测值然后用这个结果作为基准线。接下来每一版模型都跟这个基线比较如果提升不明显就要回头检查特征或数据。# 基线策略使用前7天平均销量作为下周预测 baseline_pred df.groupby(product_id)[sales_volume].transform( lambda x: x.rolling(7, min_periods1).mean().shift(1) ) baseline_mae mean_absolute_error(df[sales_volume].iloc[7:], baseline_pred.iloc[7:]) print(baseline_mae)这么做有两个好处一是帮助你检查数据管道是否正确二是给论文增加一个“模型对比”的段落证明你的改进有实际价值。5.3 第三步把预测结果接入优化模型只做完预测还不够C题还要求决策。因此预测出的销量要作为约束条件代入补货优化模型。例如每日补货量不超过预测销量的1.2倍且总成本不能超过预算目标函数是最大化总毛利。这就是“预测模型 优化模型”的组合拳。国赛近两年的趋势很明显单纯的数据分析不够单纯的理论建模也不够必须把预测和决策串成一条完整的业务链路。6. AI 辅助建模能用但必须用在正确的位置现在国赛期间使用AI已经成为常态。但要注意国赛规则对AI辅助有明确限制论文里必须声明使用了哪些AI工具、用在哪些环节。合规使用AI是可以显著提升效率的。6.1 AI 适合做的事情以下使用AI的方式既安全又高效解释陌生概念比如“什么是熵权法”“ARIMA的阶数怎么选择”。Debug帮助把报错信息直接贴给大模型让它帮你定位问题。数据清洗代码生成让AI生成某个特定清洗逻辑的Pandas代码。摘要润色等你写出摘要初稿后用AI压缩到300字以内但要保留全部关键数字。以一个数据处理场景为例你可以这样向AI提问我有一张销售表字段包括 date, product_id, sales_volume, price。 现在要把缺失的 sales_volume 按同 product_id 前7天均值填充 同时把 price 超过均值3倍标准差的记录标记为异常并设为空值。 请给出Pandas实现要求保留原始列名返回完整代码。AI 生成的代码通常可以直接运行但你必须逐行理解否则无法回答评委的答辩问题。6.2 AI 绝对不能做的事情切忌让AI直接生成整篇论文也不要让AI编造实验结果。国赛评委会重点检查数字的一致性和逻辑自洽AI生成的“通用表述”和虚构数据一旦被识破后果非常严重。更稳妥的判断是AI是你的效率工具但建模思路、模型推导、结果分析、论文撰写的主体逻辑必须由人完成。把AI当作全能参谋可以但当作代写枪手不行。6.3 推荐提示词模板平时练习时可以沉淀一套自己的提示词模板你是数学建模竞赛指导老师。我正在做[题目简称]已知[数据字段/背景]。 我现在使用的模型是[模型名]目前遇到的问题是[问题描述]。 请从竞赛角度给我[3个改进方向]并说明每个方向的利弊。这种提示词能让AI输出更聚焦、更可操作而不是空泛的“你可以考虑优化模型”。7. 论文撰写摘要决定奖项上限论文是评委判断你工作质量的唯一介质。代码跑得再漂亮图表做得再精美如果论文表达混乱一样拿不到奖。国赛论文的标准结构通常包括摘要、问题重述、问题分析、模型假设、符号说明、模型建立与求解、模型检验、模型评价与推广、参考文献和附录。7.1 摘要怎么写摘要是一篇论文的“门面”。国赛评委每天要看几十篇论文真正完整读完的很少但每篇摘要都会看。摘要必须包含以下要素解决的问题是什么。用了什么模型和方法。数据如何处理。得到的关键数值结果例如 RMSE0.213利润率提升18%。模型有什么改进或者创新。下面是一个摘要结构示例本文针对某超市蔬菜类商品的自动定价与补货问题提出了一套基于数据预测和优化决策的联合建模方案。 首先针对销售流水数据缺失与异常并存的特点采用按品类分组的滚动均值插补法和3σ异常修正策略构建了完整可用的数据集。 其次基于时间特征、滞后特征和价格波动特征使用LightGBM建立销量预测模型测试集MAE为0.21较基线模型降低32%。 最后以预测销量为核心约束建立以总毛利最大为目标的线性规划模型给出各品类每日补货量与定价策略。 本模型的亮点在于将预测与决策贯通为一条完整链路具有较强的可复现性与业务落地价值。摘要中不要出现“可能”“大概”这类模糊词汇数字要准确结构要完整300字左右为宜。7.2 图表规范论文图表要遵循几个基本原则每张图必须有图号和图题例如“图1 不同品类周销量趋势对比”。坐标轴必须有变量名和单位。颜色风格统一不要“大红大紫”。表格使用三线表格式不要贴Excel截图。特别提醒Matplotlib 默认字体不支持中文在画图前必须设置中文字体否则图上的中文会显示为方框这是每年都有人犯的低级错误。下面给出一个能直接运行的中文字体配置代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, PingFang SC] plt.rcParams[axes.unicode_minus] False # 示例绘制销量折线图 plt.figure(figsize(10, 5)) plt.plot(df[date], df[sales_volume], label日销量) plt.xlabel(日期) plt.ylabel(销量kg) plt.title(某品类日销量时间序列) plt.legend() plt.grid(alpha0.3) plt.show()如果运行环境是云服务器或LinuxSimHei字体可能不存在推荐使用font_manager动态加载字体文件import matplotlib.font_manager as fm # 假设字体文件位于 ./fonts/simhei.ttf font_path ./fonts/simhei.ttf fm.fontManager.addfont(font_path) plt.rcParams[font.family] fm.FontProperties(fnamefont_path).get_name()8. 常见错误与压线检查清单根据历年参赛情况下面这些错误重复率极高错误现象可能原因解决方式摘要超出了半页没有控制字数精炼到300字突出数字结果图上的中文显示为方框未设置中文字体使用SimHei或动态加载字体附录代码和正文模型不一致多次修改模型后没同步定稿前用最终代码重跑一遍数据表格出现大量NaN合并时主键选错检查merge的关联字段和how参数模型结果与摘要数字对不上改参数后忘记更新摘要摘要中所有数字在正文中必须能查到参考文献格式混乱没有统一格式模板使用GB/T 7714规范提交文件格式错误未检查MD5码赛前按官网要求测试一次提交流程国赛交卷环节有一个极易忽略的细节MD5码。比赛要求上传论文的MD5码一旦提交后修改过文件MD5码就会变化。每年都有队伍因为传错文件、MD5码不匹配而被认定为违规。建议在比赛最后一小时完成以下压线操作用最终代码重新跑一遍确保图表与结果一致。核对摘要数字与正文数字是否一致。用压缩软件打包确认压缩包命名符合要求。计算MD5码并记录。在截止时间前至少30分钟完成上传不要卡在最后1分钟。MD5码的计算可以在终端里完成# Windows PowerShell Get-FileHash .\论文.pdf -Algorithm MD5 # macOS / Linux md5 论文.pdf这一步看似简单却关系到整个队伍72小时的努力能否被正确接收。9. 赛前30天训练计划与总结如果你离国赛还有一个月建议按下面的节奏安排第1周基础补漏Python的Pandas和Matplotlib至少各跑10个小练习。熟悉国赛论文模板精读一篇往年优秀论文重点看摘要和模型结构。第2周专项突破把近三年题目按类型分类数据题、规划题、物理题。每个类型完整做一次小规模练习。重点训练数据处理速度要求自己能在1小时内完成一张十万行数据表的清洗和特征构造。第3周全真模拟和队友找一套往年真题严格按72小时流程模拟。结束后用3小时复盘时间花在哪里、数据管道是否顺畅、论文是否有逻辑断点。模拟期间不使用任何没跑通过的库不临时学新算法。第4周总结固化整理自己的“模型工具箱”每个模型对应的适用场景、核心代码、常见坑。整理自己的“论文模板”摘要套路、图表样式、常见的模型评估表。整理代码目录结构确保三天赛程中查找代码不超过1分钟。最后想说国赛是一个“完成比完美更重要”的比赛。绝大多数队伍最后提交的论文离完美差距很大但评委打分看的不是绝对完美程度而是在限时条件下呈现出的完整科研工作流。数据清洗做到位、模型对比做扎实、论文摘要写清楚你的成绩不会差。建议先把这篇文章里的代码和流程过一遍再用最近一年的真题做一次模拟。流程跑通一次之后你会发现自己对国赛的理解会上一个台阶。