数学建模竞赛解题指南:从时序预测到联合优化决策 📅 2026/8/17 7:14:15 1. 赛题回顾与核心挑战解析每年九月的全国大学生数学建模竞赛C题往往因其数据量大、背景新颖、对综合建模能力要求高而备受关注。2023年的C题也不例外它聚焦于一个极具现实意义的领域——蔬菜类商品的自动定价与补货决策。题目给出了某商超一个多月内数百种蔬菜的销售流水、损耗记录以及商品分类信息要求参赛者建立数学模型解决定价与补货两大核心问题。这听起来像是商超运营部门的日常工作但背后却是一道融合了数据分析、时序预测、优化决策和商业理解的综合性难题。对于参赛队伍而言这道题目的挑战是多维度的。首先数据是典型的零售业数据包含了销售明细、损耗明细和商品信息表。数据量大且杂如何高效地清洗、整合并从中提取出对建模有用的特征是第一个门槛。其次定价和补货是相互耦合的决策。定价影响销量销量决定库存消耗和补货需求补货量又影响库存成本、损耗率进而可能反过来影响定价策略。如何将这两个问题在一个统一的模型框架下进行刻画是建模的核心。最后模型需要具备可解释性和一定的鲁棒性因为最终的论文需要向“商超负责人”汇报模型不能是一个黑箱其决策逻辑需要能让业务人员理解。从更深的层次看这道题考察的是学生将学术理论应用于复杂现实场景的能力。它不像一些纯理论优化题可以套用现成的算法也不像一些纯数据分析题只做预测。它要求你从业务出发定义目标如商超收益最大化考虑约束如日补货总量上限、单品陈列量上下限并处理不确定性如销量预测的误差、损耗的不确定性。优秀的论文必然是在数据处理、模型构建、求解算法和结果分析四个环节都做得扎实的作品。2. 数据处理从原始流水到建模特征的蜕变拿到题目数据后很多队伍会迫不及待地开始建模但老手都知道在数学建模中数据处理的时间往往占到一半以上并且直接决定了模型的天花板。2023年C题的数据处理有几个关键步骤和易错点。2.1 数据清洗与整合销售流水和损耗记录表通常通过单品编码和日期与商品信息表关联。第一步是检查并处理缺失值、异常值。例如某些单品在某些日期销售量为0这是正常现象可能没售出还是数据缺失需要结合前后日期销量和是否补货来判断。损耗数据中的异常大值是真实损耗如大批量变质还是录入错误这里通常需要结合业务常识设定阈值进行过滤。更关键的是数据整合。我们需要构建一个以单品编码和日期为联合主键的“面板数据”。每一行代表一个单品在一天内的状态包含字段如日期、单品编码、分类编码、是否打折、销售单价、销售数量、损耗数量、成本单价等。这个整合过程涉及大量的merge或join操作务必小心处理键值唯一性和数据对齐避免出现重复或丢失。2.2 特征工程的思路原始数据字段有限直接用于预测和优化效果不佳必须构造衍生特征。这体现了对业务的理解。对于销量预测模型可以考虑以下特征时序特征滞后特征如前1天、3天、7天的销量、是否打折、滑动窗口统计量如过去7天平均销量、销量标准差、星期几、是否为节假日。商品自身特征所属大类如花叶类、食用菌、是否易腐可通过损耗率历史均值判断、平均成本价。竞争与关联特征同分类下其他单品的平均价格、销量体现内部竞争或互补该单品历史价格弹性需计算。营销特征当前是否处于打折状态以及已经连续打折的天数。对于损耗预测特征可以包括历史平均损耗率、近期销量销量大可能意味着流转快损耗低、商品保质期特性题目未直接给出需从品名或分类中间接推断、库存持有天数当天的期初库存/日均销量这是一个非常关键的特征。注意特征工程不是越多越好。在有限的时间和算力下应优先构建业务逻辑强、与目标变量相关性高的特征。避免使用“未来数据”例如不能用当天的实际销量来预测当天的损耗必须使用历史或当天的先验信息。2.3 数据集划分的陷阱很多论文在这里犯错。由于我们需要预测未来一周10月1-7日的销量和损耗并进行补货定价决策因此绝对不能随机划分训练集和测试集。必须严格按照时间顺序划分。通常会用9月1-24日的数据作为训练集9月25-30日的数据作为验证集用于调整模型参数和提前停止训练最终模型在全部9月数据上训练用于预测10月1-7日。任何在特征构建或模型训练中泄露了9月25日之后信息的行为都会导致模型评估过于乐观在实际预测中崩盘。3. 模型构建销量预测、损耗估计与联合优化框架这是论文最核心的部分直接决定了作品的深度和高度。一个完整的解决方案通常包含三个子模型并形成一个决策闭环。3.1 销量预测模型的选择与对比销量预测是定价和补货的基础。2023年优秀论文中常见的模型有几类传统时序模型如ARIMA、SARIMA。适用于有明显自相关性和季节性的单品。但C题数据仅一个多月季节性周度可能不明显且ARIMA模型难以融入多特征如价格、是否打折。机器学习模型如LightGBM、XGBoost。这是本届主流且效果较好的选择。树模型能自动处理特征交互对缺失值不敏感且能方便地融入各种构造的特征。对于数百个单品可以训练一个全局模型所有单品数据一起训练并加入单品编码作为类别特征也可以为每个单品或每类单品单独训练模型。全局模型效率高可能捕捉跨单品的泛化模式单独训练更精细但计算量大且可能过拟合。深度学习模型如LSTM、GRU。理论上适合时序预测但对于本题数据量每个单品仅30多条记录来说很容易过拟合且训练时间远长于树模型。除非进行了精巧的架构设计如共享嵌入层否则不占优势。在实际操作中LightGBM是性价比最高的选择。它训练速度快支持类别特征并能输出特征重要性为模型解释提供依据。关键步骤是将日期转化为数值型时序特征后划分时序数据集进行网格搜索或贝叶斯优化寻找最佳超参数如n_estimators,max_depth,learning_rate并在验证集上监控早停。3.2 损耗率的估计方法损耗预测比销量预测更难因为损耗数据更稀疏、波动更大。直接预测每天的绝对损耗量非常不稳定。更稳健的做法是预测损耗率损耗量/销量损耗量。方法一历史均值法。计算每个单品历史平均损耗率作为未来预测值。简单粗暴但忽略了销量、库存等因素的影响。方法二回归模型。将损耗率作为目标变量使用销量、库存持有天数、商品类别、历史平均损耗率等特征建立回归模型如Beta回归因为损耗率是0-1之间的值。这是更科学的做法。方法三集成在优化模型中。不单独预测损耗率而是在后续的补货优化模型中将损耗视为一个与库存量正相关的随机变量或函数直接进行优化。在优秀论文中常将方法二和方法三结合。先用一个轻量级模型预测出基准损耗率在优化模型中作为一个输入参数并允许其在一定范围内波动。3.3 定价与补货联合优化模型这是整个赛题的精华也是最体现建模功力的地方。目标函数很明确商超总收益最大化销售收入 - 采购成本 - 损耗成本。约束条件来自题目各单品每天补货量的总和有上限。各单品每天早晨的陈列量即前日库存当日补货有上下限。定价约束如参考历史价格波动幅度限制。难点在于销量是价格的函数。你需要一个需求函数来描述这种关系。常用的是线性需求函数Q a - b*P或弹性不变的需求函数Q k * P^(-e)。其中参数a, b或k, e需要通过历史数据拟合得到。这里就与销量预测模型关联起来了你可以用销量预测模型在假设不同价格下预测出对应的销量从而反推出近似的需求函数参数。于是优化模型可以构建如下决策变量未来7天每个单品每天的补货量R[i,t]和销售单价P[i,t]。目标函数Maximize Σ_t Σ_i [ P[i,t] * S[i,t] - C[i] * R[i,t] - θ * L[i,t] ]。其中S[i,t]是由价格P[i,t]通过需求函数/销量预测模型得出的预测销量L[i,t]是预测损耗量与库存量相关C[i]是成本价θ是损耗成本系数。约束条件上述的补货总量约束、陈列量约束、价格约束以及库存平衡方程I[i,t1] I[i,t] R[i,t] - S[i,t] - L[i,t]。这个模型是一个大规模的、带约束的非线性规划问题因为目标函数中的S[i,t]是P[i,t]的非线性函数。直接求解非常困难。常用的简化策略是两阶段法第一阶段定价。假设补货量充足先为每个单品单独求解一个使当日预期利润最大化的价格。这可以解析求解对利润函数求导或数值求解。第二阶段补货分配。在给定第一步算出的最优价格和对应预测销量的基础上将有限的补货总量资源像“背包问题”一样分配给各个单品使得在满足陈列量约束下总预期收益最大。这可以用整数规划或启发式算法如贪心算法按单位补货量带来的边际收益排序求解。两阶段法虽然是一种近似但大大降低了求解难度且结果具有可解释性在论文中易于阐述。4. 求解算法、结果分析与可视化呈现模型建立后需要将其求解并呈现结果这部分是论文说服力的关键。4.1 求解算法的实现对于两阶段模型定价阶段对于线性需求函数Q a - bP利润π (P-C)*(a-bP)令导数为零可得最优价P* (a bC) / (2b)。你需要为每个单品拟合出a和b。对于更复杂的需求函数或包含损耗的模型可以使用scipy.optimize中的函数如minimize对每个单品进行单变量优化。补货分配阶段这是一个带约束的线性/整数规划问题。可以使用PuLP、ortools等建模库调用CBC、GLPK等求解器。如果问题规模太大单品数*天数也可以采用贪心算法计算每个单品-天组合的“单位补货量预期收益”从高到低分配补货量直到满足总量约束或单品陈列量上限。在编程实现时务必注意代码的效率和可复现性。使用向量化操作代替循环将通用步骤封装为函数。最终应能输出未来7天每个单品的建议售价和补货量表格。4.2 模型检验与敏感性分析不能只给出结果就说模型好必须进行检验。历史回测用9月最后几天的数据将你的模型“套用”回去看看如果按照模型的建议定价补货相比历史实际数据收益是否有所提升。这是最直接的检验。敏感性分析这是加分项。分析关键参数变动对结果的影响。例如需求价格弹性估计有误差怎么办将弹性系数上下浮动10%观察总收益的变化。补货总量约束收紧或放松对总收益和单品分配有何影响损耗率预测不准对模型稳健性影响多大 通过敏感性分析你可以向“商超负责人”说明模型在什么情况下依然可靠什么情况下需要谨慎使用这体现了模型的实用性和你的思考深度。4.3 可视化与论文表述数学建模竞赛本质上是“作文”竞赛。清晰的图表胜过千言万语。可视化绘制核心单品的历史销量、价格、损耗时序图展示数据规律。用热力图展示不同类别商品在未来一周的建议补货量分布。用散点图展示建议价格与历史均价的对比并标注那些调价幅度大的单品。绘制敏感性分析结果的柱状图或折线图。论文表述问题重述部分不要照抄题目要用自己的话提炼核心问题与约束。模型假设要合理且必要例如“假设短期内消费者的购买偏好稳定”、“假设单品成本价在预测期内不变”。符号说明表格要清晰、完整。模型建立部分要有清晰的逻辑推导从目标到约束一步步展开。模型求解部分要写清楚算法步骤可以配流程图。结果分析部分要结合图表进行阐述说明为什么模型会给出这样的决策其商业含义是什么。模型评价与推广要客观说明本模型的优点、局限性以及可能的改进方向。最后一篇优秀的2023年C题论文必然是一份严谨的数据分析报告、一份逻辑自洽的数学模型说明书和一份具有可行性的商业建议书的结合体。它不仅仅是在解一道数学题更是在模拟一个数据分析团队解决真实商业问题的完整流程。