ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

数学建模竞赛:基于数据驱动的供应链优化与定价补货决策

数学建模竞赛:基于数据驱动的供应链优化与定价补货决策 1. 赛题核心与破题方向从“蔬菜类商品”到“供应链优化”每年高教社杯全国大学生数学建模竞赛国赛的C题通常被认为是三道题中综合性最强、最贴近实际应用场景的题目。2023年的C题也不例外它聚焦于一个看似日常却蕴含复杂数学问题的领域蔬菜类商品的自动定价与补货决策。很多同学拿到题目看到“蔬菜”、“超市”这些字眼可能会觉得题目“接地气”但恰恰是这种贴近生活的背景往往隐藏着对数学建模综合能力的深度考察。这道题的本质不是一个简单的预测或分类问题而是一个典型的数据驱动的供应链优化决策问题。题目给出了某生鲜商超的销售流水明细要求我们基于历史销售数据解决两个核心问题一是对单个品类的蔬菜进行日补货总量和定价策略的制定二是对各个蔬菜品类进行未来一周的日补货总量预测。这直接指向了零售业的核心痛点如何在需求不确定、商品易损耗蔬菜有保质期的情况下实现利润最大化或成本最小化。因此破题的关键在于理解我们不是在做一个纯粹的销量预测而是在销量预测的基础上叠加了库存管理和定价决策的优化模型。从数据角度看题目提供了销售明细这意味着我们拥有丰富的结构化数据商品编码、品类、销售量、销售单价、销售日期。这为我们进行时间序列分析、关联规则挖掘、以及构建需求预测模型提供了基础。但题目也留下了巨大的建模空间如何定义“售罄”如何量化定价对销量的影响即需求弹性如何将蔬菜的损耗如腐烂成本纳入模型这些都需要我们基于合理的假设构建数学模型来刻画。所以面对这道题我们的思路不能停留在简单的回归预测上。一个完整的解题框架应该包含数据预处理与特征工程 → 需求预测模型构建 → 集成定价与库存的联合优化模型 → 模型求解与结果分析。接下来我将逐一拆解每个环节的核心思路、可选的模型方法以及需要特别注意的“坑”。2. 数据预处理从原始流水到建模可用特征原始销售流水数据是建模的基石但直接使用往往效果不佳。高效的数据预处理能极大提升后续模型的性能与可靠性。对于C题数据预处理的核心目标是将原始的交易记录转化为能够反映每日、每个品类供需状况的特征变量。2.1 核心数据聚合与关键指标计算首先我们需要将数据按日期和商品品类或单品进行聚合。这是最基本的一步目的是得到每个品类每日的汇总信息。需要计算的指标至少包括日销售总量这是需求最直接的体现。日平均销售单价注意这里不能简单求均值因为可能存在促销或价格变动。更合理的做法是计算加权平均单价销售额/销售量或者直接分析价格分布。日销售时长/是否售罄题目隐含了“售罄”的概念。我们需要定义一个规则来判断某日某品类是否售罄。例如可以检查该品类在当日最后一条销售记录的时间是否接近营业结束时间或者当日销售量是否异常高接近历史峰值。定义一个二进制变量“是否售罄”作为后续需求预测的重要标签。日库存水平需推算这是一个难点因为数据中没有直接的进货量。一个合理的假设是当日初始库存 前一日剩余库存 当日补货量。而当日剩余库存 当日初始库存 - 当日销售量。我们可以设定一个初始库存如第一天的数据然后通过迭代和优化来反推每日的大致补货量。更精细的做法是将“补货量”作为一个待优化的变量在模型中与销售量一起求解。2.2 特征工程构建影响需求的关键变量仅仅使用历史销量作为特征是不够的。我们需要构建能够解释销量变化的特征。这些特征可以分为以下几类时间特征这是最重要的特征之一。包括绝对时间年、月、日。周期特征星期几周一至周日、是否为周末、是否为节假日需要外部日历数据、是否为月初/月末。时序特征相对于某个固定点如赛季开始的偏移量。历史销量特征滞后特征过去1天、3天、7天、14天、30天的销量。这对于捕捉短期趋势和周期性非常有效。滚动统计特征过去N天的平均销量、销量标准差、最大值、最小值。这反映了近期需求的水平和波动性。同比/环比特征与上周同一天、上月同一天的销量比。这对具有强周、月周期性的商品尤其重要。价格特征自身价格当日平均价格、价格相对于近期均值的变动率。交叉价格可以考虑相关品类如替代品、互补品的价格作为特征但这需要更复杂的数据关联分析。事件与状态特征是否促销可以从价格异常降低或销量激增中间接推断。是否售罄如前所述这是一个强标签也反映了当日供给是否充足。库存水平推算低库存可能抑制销量缺货高库存可能伴随促销。注意特征不是越多越好。需要进行特征相关性分析、重要性排序如使用树模型的特征重要性避免多重共线性。对于时间序列数据要特别注意避免“未来信息泄露”即不能用未来的数据如明天的价格来预测今天的需求。2.3 处理缺失值与异常值生鲜销售数据中异常值很常见。例如某天因系统问题记录不全或某天因大型团购导致销量暴增。对于缺失的日期如超市歇业可以考虑直接删除或进行插值但需谨慎。对于异常值需要分析其产生原因可解释的异常如法定节假日、恶劣天气、促销活动导致的销量剧增。这类异常值不应简单删除而应将其作为特殊事件通过引入哑变量0-1变量来刻画。不可解释的异常可能是数据记录错误。可以通过统计方法如3σ原则或业务规则进行识别并采用前后均值填充、中位数填充或直接删除。3. 需求预测模型选型与构建在获得干净、富含特征的数据后下一步就是构建需求预测模型。这是整个课题的基础预测的准确性直接决定了后续补货和定价决策的质量。模型的选择需要权衡预测精度、可解释性、计算复杂度以及对时序特征的捕捉能力。3.1 经典时间序列模型对于有明显趋势和季节性的品类传统时间序列模型是很好的基线模型。ARIMA/SARIMA模型适用于平稳或可差分平稳的单变量时间序列。SARIMA是其季节性扩展版本。优点是理论成熟、可解释性强能提供预测区间。缺点是对多变量外生特征如价格、促销的支持较弱需要手动进行平稳性检验和参数定阶过程繁琐。指数平滑模型如Holt-Winters同样适用于具有趋势和季节性的序列。它通过加权平均历史数据来预测未来权重随时间指数衰减。实现简单对于周期性明显的需求预测效果不错。实操心得在国赛有限的时间内不建议将主要精力花在精细调优ARIMA上。可以将其作为一个基准模型快速跑出结果用于对比后续更复杂模型的提升效果。使用statsmodels库可以方便实现。3.2 机器学习回归模型当引入了丰富的特征后机器学习模型通常能取得更好的效果。树模型XGBoost/LightGBM这是本次竞赛的强力推荐模型。它们能自动处理特征间的非线性关系对缺失值不敏感并且能够给出特征重要性排序模型可解释性相对较好。LightGBM在处理大规模数据时效率更高。我们可以将时间序列问题转化为监督学习问题用过去N天的特征包括滞后特征来预测未来第T天的销量。支持向量回归SVR与神经网络SVR在小样本、非线性问题上表现可能不错但调参复杂且对大数据量支持一般。神经网络如多层感知机MLP、循环神经网络RNN理论上具有很强的拟合能力但对于这道题的数据量和赛程时间来说训练、调参成本高容易过拟合且可解释性差不是首选。构建监督学习框架的关键步骤定义训练集和测试集绝对不能随机划分必须按时间顺序划分。例如用前80%的日期数据做训练后20%做测试以模拟真实的预测场景。创建滞后特征这是将时间序列转化为表格数据的关键。为每个样本某天某品类添加过去几天的销量、价格等作为特征。模型训练与验证使用时间序列交叉验证TimeSeriesSplit而不是普通的K折交叉验证来评估模型性能防止信息泄露。性能评估回归问题常用的指标有均方根误差RMSE、平均绝对误差MAE、平均绝对百分比误差MAPE。MAPE由于具有百分比解释性在此类业务问题中更受青睐。3.3 集成策略与模型融合单一模型可能有其局限性。可以采用模型融合策略来提升预测的稳健性和精度。简单加权平均将ARIMA、LightGBM等不同模型的预测结果进行加权平均。权重可以根据各模型在验证集上的表现如RMSE的倒数来确定。Stacking用初级模型如ARIMA、LightGBM的预测结果作为新特征训练一个次级模型如线性回归进行最终预测。这种方法潜力更大但实现更复杂需要小心过拟合。避坑指南很多队伍在预测环节花费过多时间追求极致的预测精度如MAPE降低0.5%而忽略了本题的核心是“决策优化”。预测模型达到一个合理的精度例如在测试集上MAPE小于15%后就应及时进入下一阶段。决策模型对预测误差有一定的鲁棒性。4. 定价与补货联合优化模型这是本题的精华和难点所在。我们需要建立一个数学模型在需求预测的基础上同时决定补货量和销售价格以实现商超的目标通常是日均利润最大化。这本质上是一个随机优化问题或动态规划问题因为未来的需求是不确定的。4.1 模型要素定义首先我们需要明确定义模型中的各个要素决策变量Q_t第t天对某品类的补货量决策变量。P_t第t天该品类的销售单价决策变量。状态变量I_t第t天开始时的库存水平。I_t I_{t-1} Q_{t-1} - D_{t-1}其中D_{t-1}是第t-1天的实际需求量。外部输入D_t(P_t)第t天的需求量它是价格P_t的函数同时也是一个随机变量。我们可以用上一节的需求预测模型来估计其期望值E[D_t | P_t]并估计其波动性方差。C蔬菜的单位进货成本假设恒定或可从数据中推算。S蔬菜的单位残值过期后处理的价格通常远低于成本甚至为负表示处理成本。H单位库存持有成本每日。目标函数最大化计划期如T天内的总期望利润。总利润 Σ_{t1}^T [ 销售收入 - 进货成本 - 缺货损失 - 持有成本 - 损耗成本 ]其中销售收入 P_t * min(实际需求量, 可用库存)。缺货损失当需求大于库存时损失了潜在的销售收入。可以引入缺货惩罚系数。损耗成本期末未售出库存的损失(C - S) * 期末剩余库存。4.2 需求作为价格的函数价格弹性这是连接定价与补货的关键。我们需要刻画需求量如何随价格变动即需求的价格弹性。一个常用的模型是线性需求函数D_t(P_t) a_t - b_t * P_t ε_t其中a_t表示第t天的潜在市场规模受星期、季节等因素影响b_t是价格敏感系数ε_t是随机误差项。如何估计参数a_t和b_t我们可以利用历史数据对不同日期类型如周一、周末分别进行回归分析。将历史数据中的“日销量”作为因变量“日平均价格”作为自变量同时控制其他时间特征星期几、节假日等进行线性回归得到的斜率就是b的估计值截距结合其他特征值可以反映a_t。4.3 优化模型建立与简化求解完整的随机动态规划模型求解非常复杂。在竞赛中我们可以采用合理的简化将其转化为一个确定性规划模型或两阶段模型。方法一基于期望值的确定性模型假设我们忽略随机性用需求的期望值E[D_t(P_t)]代替随机需求D_t(P_t)。那么对于单品类单日的问题模型可以简化为Maximize: Profit P * min(Q, D(P)) - C * Q - h * I (忽略损耗和缺货细节) Subject to: D(P) a - b*P (需求函数) P, Q 0这是一个带约束的非线性规划问题因为目标函数中有min函数和P*D(P)项。我们可以进一步分析最优定价P*可以通过求导得到当需求函数为线性时P* (a C) / (2b)。这是经典的经济学定价公式。给定最优价格P*可以计算出对应的期望需求D* a - bP*。最优补货量Q*则应考虑需求的不确定性。一个经典的方法是Newsvendor Model报童模型。在报童模型中最优补货量满足F(Q*) (P - C) / (P - S)其中F(·)是需求量的累积分布函数。(P - C) / (P - S)被称为临界分位数。这意味着我们应该让补货量满足“需求小于等于该量的概率”等于这个临界比值。这个比值衡量了“多进货一个单位带来的边际收益售出赚P-C”与“边际损失未售出亏C-S”之间的权衡。方法二分阶段决策框架我们可以将问题分解为两个阶段预测阶段使用时间序列/机器学习模型预测未来一段时间内在不同价格水平下的需求分布。这需要我们对多个潜在价格点进行预测模拟。优化阶段将预测结果需求分布输入到一个优化模型中。这个优化模型可以是一个数学规划模型如混合整数规划其决策变量是每日的价格和补货量目标函数是期望利润最大化约束包括库存平衡方程、价格变动范围等。可以使用PuLPPython或Lingo等优化求解器来求解。核心技巧对于多品类联合补货问题会更复杂因为可能存在总库存容量、总补货预算等约束。这时优化模型就升级为一个带约束的多商品报童问题。我们可以先按单品类分别计算其“单位资源贡献率”如期望利润/占用库存空间然后按照贡献率高低在总约束下分配资源。这体现了运筹学中的“贪婪算法”思想。5. 模型求解、结果分析与论文呈现有了模型最后一步就是求解并将思路清晰地展现在论文中。这部分直接决定了论文的评分。5.1 求解工具与实现预测模型Python的scikit-learn,lightgbm,statsmodels库是绝对主力。数据处理用pandas可视化用matplotlib或seaborn。优化模型对于简单的解析解如报童模型公式直接编程计算即可。对于复杂的数学规划推荐使用PuLP适合线性/整数规划或CVXPY适合凸优化等建模库调用如CBC、GLPK免费或Gurobi、CPLEX学术免费许可等求解器。模拟验证由于我们的模型基于许多假设如需求分布形式必须进行蒙特卡洛模拟来验证策略的有效性。即根据估计的需求分布随机生成成千上万条可能的需求路径然后在每条路径上模拟运行我们制定的补货定价策略计算平均利润、缺货率、损耗率等指标并与一些基准策略如固定补货量、固定价格进行比较。5.2 结果分析维度在论文中不能只给出冷冰冰的“第几天补多少定多少价”的表格。必须进行深入分析敏感性分析关键参数如进货成本C、价格弹性b、损耗残值S的变化如何影响最优决策和最终利润这能体现模型的稳健性和你的思考深度。策略对比将你的优化策略与几种简单策略对比例如经验策略每日补货量为前几日平均销量。单纯预测策略按预测需求补货价格固定。通过对比平均利润、缺货频率、库存周转率等指标突出你模型的优越性。可视化呈现用图形展示需求预测的效果预测值与实际值对比图、价格与销量的关系散点图、库存水平随时间变化的模拟图、不同策略的利润分布箱线图等。一图胜千言。5.3 论文书写要点国赛论文评审时间紧清晰的逻辑和专业的呈现至关重要。摘要用一段话浓缩整个工作针对什么问题用了什么方法具体到模型名称如“结合LightGBM需求预测与报童模型的联合优化框架”得到了什么结果关键指标提升百分比有何特色与结论。避免空洞描述。模型假设清晰列出所有主要假设如需求服从正态分布、价格弹性为常数、不考虑竞争对手等并说明其合理性。这是建模严谨性的体现。符号说明在模型建立前用表格列出所有主要变量、符号及其含义。模型建立分小节阐述从问题分析到模型推导逻辑连贯。重点公式需编号并做解释。模型求解说明使用了什么软件、什么算法、关键参数如何设置。优缺点与推广客观评价自己模型的优点如贴合实际、考虑全面和缺点如假设较强、未考虑某因素并提出可行的改进方向或推广到其他场景如其他生鲜产品、电商库存管理。这体现了思维的完整性。最后一点个人体会数学建模竞赛尤其是国赛比拼的不仅仅是模型的高深和复杂更是问题分析的透彻性、模型假设的合理性、求解过程的严谨性以及论文表述的清晰性。对于C题这种开放性的优化问题选择一个清晰的、可实现的、逻辑自洽的建模路径远比堆砌复杂算法但解释不清要有效得多。从数据清洗到特征构建从预测到优化每一步都要想清楚“为什么这么做”并在论文中讲好这个“故事”。祝各位在比赛中能稳定发挥取得好成绩。
返回列表