1. 一个真实的便利店痛点:关东煮备货到底难在哪
1.1 损耗和缺货,是同一枚硬币的两面
我在研究这个项目之前,先认真蹲过几天便利店,也跟店长聊过。很多人没注意过,关东煮这个品类在便利店里非常特殊:它不像矿泉水、薯片,卖了没卖都能放着;也不像便当,当天没卖完可以报废走流程。关东煮是“半成品持续加热”模式,萝卜、鱼丸、豆腐、魔芋丝泡在汤里,从早上开锅到晚上关火,口感和损耗都在变化。
备多了,到了晚上九点还没卖完,整锅倒掉——一锅成本少说几十上百块,我见过某些门店一天报废三锅,一个月白干好几天。备少了,下午五点半到七点的高峰期断货,顾客问一句“鱼丸还有吗”,你说“卖完了”,对方扭头就走,连带着可能把一瓶饮料的钱也省了。体感上,缺货比损耗更痛,因为一个是看得见的浪费,一个是算不清的损失。
这个场景最麻烦的地方在于:关东煮的销量不是一个稳定的数。 它跟天气、星期、节假日、周边有没有活动、甚至是不是发薪日都有关。店长靠经验备货,本质上是在用一个模糊的传统模型做预测,遇到连续阴雨天、突然降温、周五晚高峰,经常翻车。
所以我想做的事情很简单:把“经验”换成“算法”,用机器学习对单日关东煮销量做预测,给店长一个数字参考——今天备多少份,区间是多少,如果天气骤变要不要加量。这个项目最终选择的技术路线,就是标题里那套:粒子群优化支持向量机。
1.2 影响销量的因素,远比你想象的复杂
做预测之前,得先搞清楚销量到底被什么驱动。我梳理了一下,关东煮销量大致受这几类因素影响:
- 天气与温度:这是最敏感的变量。气温一下降,关东煮销量几乎是硬涨;反之,夏天超过三十度,关东煮就成了冷柜的陪衬。这里不仅要看当天气温,最好还看“温差”和“与上周同期相比的温度变化”。
- 时间周期:周末和工作日销量曲线不一样;节假日、大型体育赛事直播、商场促销日都有明显扰动。
- 周边竞争:隔壁新开了一家麻辣烫店,你的关东煮销量可能直接掉两成,这种数据光靠历史序列模型很难捕捉。
- 门店自身操作:几点换汤、几点加料、店员会不会主动推“关东煮+饮料套餐”,都是人为变量。
传统上,店长拍脑袋备货,本质是大脑里在跑一个非常粗糙的模式匹配:“今天周几、什么天气、大概多少人路过”。但人的记忆和处理能力有限,能记住最近三天就不错了,很难系统地把过去三个月的规律全部找出来。
这也解释了为什么线性回归、简单的时间序列模型在这个场景里不够用——销量和温度、星期、节假日之间不是一条直线关系,而是非线性的、互相耦合的。我需要一个能拟合非线性关系的模型,这时候支持向量机(SVM)就进入了我的视野。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方案选型:为什么是SVM,又为什么需要PSO
2.1 为什么线性回归和时间序列模型不顶用
先说线性回归。它能用,但只是在“温度下降、销量上升”这种粗粒度上有效。问题是,现实数据里影响销量的变量太多,而且变量之间有交互作用:同样是温度10度,周一和周六不一样;同样是周六,下小雨和出太阳不一样;同样是阴天,如果昨天暴热今天骤冷,销量又会冲高。把这种关系硬压成一条直线,预测结果必然是“高估平常日、低估异常日”。
再说ARIMA这类时间序列模型。它适合数据规律平稳、周期性明显的序列,比如电力负荷、交通流量。但便利店销量受事件性因素扰动太大,比如突然一场寒潮、一次社区活动,ARIMA很难把这些“外生变量”纳入进来。当然可以在ARIMA里加外生回归项,也就是SARIMAX,但变量选择和模型诊断的过程非常繁琐,而且对数据长度要求高——要想把每个星期几的效应都估计出来,至少需要几个月甚至一年的日度数据,小便利店往往没有这么长的积累。
2.2 支持向量回归(SVR)对销量数据的天然优势
支持向量机SVM大家听得比较多的是分类场景,比如垃圾邮件识别、图像分类。但SVM同样可以做回归,叫做支持向量回归(SVR)。它的核心思路不是去拟合数据的具体走势,而是找到一个可以容忍一定误差的“管道”,让尽可能多的样本点落在管道内部,同时让管道尽可能平滑。
这个思路对销量预测有两个好处:
- **对异常值不敏感
