国赛C题实战:从数据洞察到最优补货的数学建模全解析 📅 2026/7/13 12:07:30 1. 从生鲜商超补货难题到数学建模实战生鲜商超的蔬菜补货是个让人头疼的问题。我去年帮本地一家连锁超市做数据分析时就深有体会——凌晨4点就要做补货决策但这时候你既不知道今天具体能进到什么货也不清楚每种菜该定什么价。更麻烦的是蔬菜保鲜期短放一天品相就变差卖不出去就得扔这损耗率看得老板直摇头。数学建模国赛的C题就是针对这个现实痛点设计的。它给出了四个关键数据集商品基础信息、三年销售流水、批发价格和近期损耗率。我们要做的就是从这些原始数据出发通过数据清洗、关联分析、预测建模和优化算法最终给出收益最大化的补货方案。这整个过程就是一个标准的数据科学项目实战。2. 数据预处理与关联分析实战2.1 数据清洗的坑我帮你踩过了拿到附件数据后别急着建模我吃过这个亏。首先得检查数据质量销售流水里常有录入错误比如白菜单价标成100元/斤批发价格数据可能有缺失特别是节假日前后损耗率的统计口径要统一用Python做清洗时这几个操作特别实用# 处理异常值 df df[(df[price] 0) (df[price] 100)] # 填充缺失值 df[cost] df.groupby(category)[cost].transform(lambda x: x.fillna(x.median()))2.2 销售规律的可视化技巧分析销售分布时别只看平均数。我习惯用这个组合拳先看品类销售热力图发现西兰花在周末销量激增再用箱线图看单品分布发现生姜存在极端高销量日最后用移动平均线看趋势某些叶菜有明显的季节性关联分析要选对方法品类间用Pearson相关系数线性关系单品间用Spearman秩相关非线性关系聚类时先用肘部法则确定K值别随便设个3或53. 品类补货的预测与优化模型3.1 销售预测的实战经验预测未来一周销量时我对比过多种方法ARIMA时间序列适合有强季节性的品类XGBoost能融合天气、节假日等外部因素集成模型将前两者组合效果最好这里有个小技巧把批发价格变化率作为特征加入模型预测准确率能提升15%左右。具体代码框架如下from xgboost import XGBRegressor model XGBRegressor(objectivereg:squarederror) model.fit(X_train[[历史销量,价格变化率,星期几]], y_train)3.2 优化建模的注意事项建立收益最大化模型时这几个约束条件最容易忽略库存容量限制别订太多没地方放最小陈列量要求货架不能太空损耗率的非线性增长多放一天损耗激增用PuLP建模时目标函数可以这样设定prob lpSum([(p[i]-c[i])*q[i] - l[i]*q[i] for i in items]) # 收益毛利-损耗4. 单品补货的整数规划实战4.1 问题三的建模关键点单品选择是个典型的0-1整数规划问题有这些特殊要求单品总数控制在27-33个之间每个选中单品至少进货2.5kg要兼顾各品类的均衡性在Gurobi中处理这类问题建议这样设置变量x m.addVars(items, vtypeGRB.BINARY) # 是否选择该单品 q m.addVars(items, lb2.5) # 每个单品的补货量4.2 定价策略的实用技巧基于模型结果定价时我总结出几个经验高损耗率单品适当提高溢价如叶菜类15%关联性强的组合套餐可打折促销凌晨补货时段的价格要比下午低5-8%实际操作中可以用这个公式做基准定价 基准价 批发价 × (1 品类平均加成率) × (1 - 损耗率)^0.55. 模型验证与业务落地5.1 敏感性分析怎么做才靠谱很多同学只分析±10%的变化这不够。我建议对需求预测做±30%的冲击测试检查当损耗率翻倍时模型是否稳健模拟批发价格突然上涨20%的情况用Python可以快速实现蒙特卡洛模拟results [] for _ in range(1000): perturbed_demand demand * np.random.normal(1, 0.2) results.append(model.evaluate(perturbed_demand))5.2 业务落地的三个陷阱最后给几个实战建议模型结果要换算成采购员的操作清单比如西兰花30kg定价5.8元留出5%的灵活调整空间应对突发情况每天记录实际销售数据反馈优化模型记得在凌晨4点生成补货建议时自动添加这条备注今日推荐主打单品西红柿黄瓜组合套餐预计可提升整体收益12%