
1. 项目概述当数学建模遇上生鲜供应链超市里蔬菜的价格每天都在变今天西红柿三块九毛八明天可能就四块五了。货架上的蔬菜今天堆得满满当当明天可能就空了一大片。这背后远不是店长拍脑袋决定的。尤其是在大型连锁商超面对数百种蔬菜每天要做出定价和补货决策既要保证利润又要减少损耗还要让顾客觉得实惠这简直是个不可能完成的任务。2023年高教社杯全国大学生数学建模竞赛的C题就把这个真实的商业难题抛给了参赛者如何用数学模型和算法为蔬菜类商品实现自动定价与补货决策这不仅仅是一道数学题它是数据科学、运筹学与零售商业的完美交汇点。题目提供了真实的销售流水数据要求我们像一名真正的供应链分析师或商业智能工程师一样从数据中挖掘规律构建模型最终输出一套能指导日常经营的决策系统。核心目标非常明确在满足市场需求的前提下最大化商超的整体收益同时将因滞销导致的损耗降到最低。对于参赛的学生来说这是一个绝佳的机会将课本上的线性规划、时间序列预测、机器学习算法应用于一个充满烟火气的实际问题中。而对于行业从业者而言这道题所探讨的思路正是当下零售业数字化转型、精细化运营的核心课题。2. 核心问题拆解定价与补货的“不可能三角”要解决这个自动决策问题我们首先要理解其中的矛盾与约束。蔬菜销售管理本质上是在平衡一个“不可能三角”利润、损耗和客户满意度。定价高了单件利润高但可能卖不动导致损耗定价低了销量可能上去但毛利薄且可能过早售罄影响客户体验。补货多了货架丰满但卖不完就烂掉补货少了虽然损耗低但损失了销售机会顾客也会因空货架而流失。2.1 定价决策的核心影响因素定价绝非孤立行为它是一系列动态因素共同作用的结果。成本与保质期这是定价的底线和紧迫性来源。蔬菜的进货成本是基础而其短暂的保质期通常只有1-3天带来了巨大的时效压力。距离保质期越近商品的价值衰减越快定价策略必须更加激进以加速清仓。历史销售规律与需求预测昨天的销量如何上周同一天呢有没有明显的周末效应、节日效应通过分析历史销售数据我们可以预测未来一天或特定时段的需求。需求预测是定价和补货的共同基石预测得越准决策就越科学。品类关联与替代效应蔬菜之间不是孤立的。西红柿涨价了顾客可能会多买些黄瓜绿叶菜整体价格高根茎类蔬菜的销量可能上升。在定价时需要考虑品类之间的交叉价格弹性进行协同定价避免内部竞争。市场竞争与消费者心理虽然题目可能未直接给出竞争对手数据但消费者对蔬菜价格有心理预期。定价需要符合“常规定价-促销定价”的节奏例如将某些单品定为引流品低价吸引客流而将其他品项定为利润品。2.2 补货决策的核心考量维度补货决策与定价决策紧密耦合主要回答“补什么、补多少、什么时候补”。需求预测驱动补货量的首要依据就是对未来需求的预测。预测销量是100公斤那么就需要考虑现有库存和安全库存计算出净需求。库存持有成本与缺货成本这是一对经典权衡。库存持有成本包括仓储空间占用、资金积压以及最大的风险——损耗成本。缺货成本则是销售机会的损失以及可能导致的顾客忠诚度下降。补货模型需要在两者之间找到平衡点。供应链约束现实中有很多限制。比如供应商有最小起订量物流车辆有载重和容积限制超市后仓的仓储容量和前台货架的陈列空间有限。补货决策必须在这些硬约束条件下进行。品项优先级当资源如资金、仓储空间有限时需要确定哪些蔬菜优先补货。这可以基于毛利率、周转率、战略重要性如引流品等多个指标综合评定。3. 解题思路与模型框架设计面对这样一个复杂问题我们需要一个系统性的建模框架。整体思路可以遵循“数据预处理 - 需求预测 - 联合决策建模 - 输出与评估”的流程。3.1 第一阶段数据理解与深度清洗题目提供的销售流水数据是宝藏但也是“脏”数据。第一步必须进行彻底清洗和特征工程。处理缺失值与异常值对于缺失的销售记录需根据前后时间点或同类商品数据进行合理插补。对于销量为0或极高的异常记录要结合具体日期如节假日、店庆判断是真实情况还是数据错误。构建时间序列特征这是预测的关键。需要为每个商品、每个日期构建丰富的特征基础时序特征前一天销量、前一周同期销量、移动平均3天、7天。时间属性特征星期几周一至周日效应、是否为周末、是否为法定节假日、月中/月末发薪日效应。促销特征当日是否促销、促销力度、连续促销天数。构建商品关联特征计算品类之间的历史销量相关系数作为替代或互补关系的初步指标。注意数据清洗阶段切忌盲目删除数据。特别是对于销量为0的记录需要区分是“缺货导致的0”还是“有货但没人买的0”。这通常需要结合库存数据判断若题目未提供则需在后续模型中进行特别处理例如引入“缺货标识”特征。3.2 第二阶段需求预测模型选型需求预测的准确性直接决定后续决策的成败。对于蔬菜这类高频、波动大的商品单一模型往往力不从心推荐采用集成或分层预测的思路。单品级预测适用于重点品项对销售额高、流量大的核心单品如西红柿、黄瓜可以采用更复杂的模型。传统时序模型SARIMA季节性自回归移动平均模型能很好地捕捉固定周期如周度的季节性。这是很多参赛队的首选基线模型。机器学习模型使用LightGBM或XGBoost这类树模型将上一阶段构建的所有时间特征、商品特征作为输入进行训练。这类模型能自动处理非线性关系对促销等事件的响应建模更灵活。品类级聚合预测适用于长尾品项对于很多销量小、波动剧烈的蔬菜单独预测方差会很大。可以先预测整个品类如“绿叶菜类”的总需求再根据历史销售占比分解到各个单品。这能提升长尾商品的预测稳定性。融合预测将SARIMA的线性时序捕捉能力与LightGBM的特征学习能力结合例如将SARIMA的预测结果作为特征输入LightGBM或者对两者的预测结果进行加权平均往往能取得更稳健的效果。3.3 第三阶段定价-补货联合优化模型这是整个赛题最核心、最具挑战性的部分。定价和补货必须联合优化因为它们是相互影响的。这里介绍一个基于两阶段随机规划的实用框架。第一阶段基于预测的需求制定补货计划。目标在满足预测需求概率分布的前提下最小化预期总成本进货成本 预期损耗成本 仓储成本。 约束供应商供货能力、仓库容量、货架陈列量、最小采购批量等。 这个阶段输出一个补货订单量。第二阶段给定补货量制定动态定价策略。目标在商品整个销售周期内如到保质期前实现收益最大化。这本质上是一个收益管理问题类似于航空公司卖机票。 我们可以建立一个价格-需求响应模型。例如假设需求D(p)与价格p呈线性关系D(p) a - b*pa, b可通过历史数据估计。那么在库存为Q、剩余销售时间为T的情况下我们可以构建一个动态定价模型来求解最优价格路径。 更实际的可以将其离散化将一天分为多个时段每个时段根据剩余库存和剩余时间调整价格。模型会倾向于在早期设定较高价格捕捉对价格不敏感的顾客在临近保质期时大幅降价以清空库存。将两者循环迭代将第二阶段定价策略下产生的新的需求预测因为价格变了需求也会变反馈回第一阶段重新优化补货量直至两者变化趋于稳定。3.4 第四阶段模型求解与输出联合优化模型通常是一个混合整数非线性规划问题直接求解困难。在实际参赛中可以合理简化。分解求解先固定价格用线性规划求解最优补货量再固定补货量用动态规划或启发式算法求解最优定价。如此迭代几次得到一个满意解。启发式算法当商品数量众多时精确算法计算开销太大。可以采用模拟退火、遗传算法等元启发式算法来搜索补货量价格表这个组合空间的最优解。输出结果最终需要输出一份清晰的决策表包含每个蔬菜品项在未来计划期如未来一周内每天的建议补货量和建议定价。同时应提供一份模型性能评估报告例如与历史实际数据相比采用该模型决策后的预期利润提升百分比、损耗降低百分比。4. 实操难点与关键技巧实录纸上谈兵容易真正把模型建起来并跑通会遇到无数个坑。下面分享几个从实战中总结的关键技巧。4.1 如何处理“零销量”日这是蔬菜数据中最常见也最棘手的问题。零销量可能意味着1正常销售但无人购买2全天缺货。如果不加区分会严重误导预测模型。技巧如果数据包含库存信息可以简单判断当日结束库存 0 且销量为0则为情况1当日结束库存为0则可能是情况2或售罄。若无库存数据可以结合历史序列判断如果零销量日前后都是高销量且该日非特殊日期则缺货可能性大。处理时可以将明确的缺货日数据标记并剔除出训练集或将其需求视为“潜在但未满足的需求”在预测时进行补偿。4.2 需求预测中的“促销峰”与“节后谷”促销会带来销量暴增但之后往往伴随几天的销量低迷消费者囤货了。节日如春节前后需求模式与平日完全不同。技巧对于促销不要只用“是否促销”这个二值特征。建议构建“促销强度”折扣力度、“距上次促销天数”、“连续促销天数”等特征。对于节日效应最佳做法是将节日期间的数据单独拿出来训练一个“节日模型”或者为节日日期设置一个虚拟变量。绝对不能用平日的模型去预测春节的销量。4.3 定价模型中的参数估计价格-需求响应模型D(p) a - b*p中的参数a潜在市场规模和b价格敏感系数如何估计技巧直接使用历史价格和销量数据进行线性回归结果往往不可靠因为价格和销量受众多因素混杂。一个更好的方法是寻找“自然实验”。比如查找历史上同一种蔬菜在相似日期如相邻两周的周二但价格不同的情况对比其销量差异。这近似于控制了其他因素可以更干净地估计价格弹性。如果这样的数据点很少可以考虑使用面板数据模型同时控制商品固定效应和时间固定效应。4.4 补货模型中的“损耗成本”量化损耗成本是模型的关键输入但它不像进货成本那样明确。技巧损耗成本不应简单等于进货成本。因为蔬菜损耗后不仅损失了商品成本还产生了垃圾处理费用并占用了仓储和人力。一个实用的近似方法是损耗成本 进货成本 * 损耗损失系数1。这个系数可以设定为1.5到2.0表示损耗带来的实际损失比商品成本本身更高。通过调节这个系数可以控制模型对损耗的厌恶程度从而在“激进销售”和“保守备货”之间取得平衡。5. 常见问题排查与方案优化即使模型搭建完成在测试和模拟运行中也会出现反直觉或不合理的结果。以下是一些典型问题及其排查思路。5.1 问题模型建议对某些蔬菜永远不补货排查首先检查该蔬菜的历史毛利率是否极低或为负模型可能判定其销售是“亏本买卖”。其次检查预测需求是否长期为0或极低可能是预测模型未能捕捉该品项的需求。优化1) 引入战略品项清单。有些蔬菜如便宜的大白菜可能不赚钱但能吸引客流属于“引流品”。在模型中可以为这类商品设置最低陈列量约束强制补货。2) 复查需求预测模型对于长尾商品采用品类聚合预测法。5.2 问题动态定价建议的价格波动过于剧烈比如上午10元下午就降到5元排查这通常是价格-需求响应模型中的价格弹性系数b估计得过大或者优化模型未考虑价格变化的菜单成本和消费者感知。优化1) 在目标函数中增加一项“价格变动惩罚”惩罚相邻时段或相邻日期间过大的价格变动使价格曲线更平滑。2) 约束价格变化幅度例如“当日价格不得超过昨日价格的±20%”。这更符合商业实践避免顾客反感。5.3 问题模型在模拟历史数据时利润很高但感觉不靠谱排查可能存在“数据泄露”或“过拟合”。例如在预测第N天的需求时不小心使用了第N天当天的价格信息这在历史数据中是已知的但在实际预测未来时是不可知的。优化严格遵守时间序列交叉验证。训练模型时只能用历史信息预测未来。例如用1-100天的数据预测101天的需求然后用1-101天的数据预测102天的需求以此类推。评估模型性能要用这种滚动预测的结果而不是用模型去“拟合”整个历史序列。5.4 问题联合优化模型计算时间太长无法处理300种蔬菜排查这是复杂度带来的必然问题。两阶段随机规划或动态规划随商品数量增加计算量呈指数级增长。优化采用分层分解策略。将300种蔬菜按品类、销售额重要性分级。A类商品Top 50采用完整的联合优化模型精细决策。B类商品采用简化模型例如补货采用(s, S)策略库存低于s时补货至S定价采用成本加成法并每周根据A类商品模型输出的市场氛围微调加成率。C类商品长尾采用规则化决策。例如补货量上周日均销量定价固定毛利率定价。 这样在保证核心品项决策最优化的同时控制了整体计算复杂度。这道赛题的魅力在于它没有标准答案。它逼着我们从数据清洗的脏活累活干起到特征工程的奇思妙想再到模型选择的权衡取舍最后到结果调优的反复打磨。整个过程就是一个完整的数据科学项目闭环。最终的解决方案一定是数学模型、业务逻辑和工程实践三者的结合体。它考验的不仅是编程和数学能力更是对商业问题本质的理解和将复杂问题合理简化的智慧。在实际操作中我发现最大的挑战往往不是算法本身而是对数据中那些“怪异”点的合理解释以及对模型输出的那些“反常识”结果的业务化修正。这或许就是数学建模从赛场走向实战的关键一步。