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或5
3. 品类补货的预测与优化模型
3.1 销售预测的实战经验
预测未来一周销量时,我对比过多种方法:
- ARIMA时间序列:适合有强季节性的品类
- XGBoost:能融合天气、节假日等外部因素
- 集成模型:将前两者组合效果最好
这里有个小技巧:把批发价格变化率作为特征加入模型,预测准确率能提升15%左右。具体代码框架如下:
from xgboost import XGBRegressor model = XGBRegressor(objective='reg: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, vtype=GRB.BINARY) # 是否选择该单品 q = m.addVars(items, lb=2.5) # 每个单品的补货量4.2 定价策略的实用技巧
基于模型结果定价时,我总结出几个经验:
- 高损耗率单品适当提高溢价(如叶菜类+15%)
- 关联性强的组合套餐可打折促销
- 凌晨补货时段的价格要比下午低5-8%
实际操作中,可以用这个公式做基准定价: 基准价 = 批发价 × (1 + 品类平均加成率) × (1 - 损耗率)^0.5
5. 模型验证与业务落地
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%"