日期:2026-08-08
这个项目的客户是一家区域性烘焙连锁,门店一百六十多家,集中在三个地级市。他们有自己的中央工厂,夜里两点开工,天亮前把面包、蛋糕、三明治送到各门店。产品保质期短的只有当天,长的也不过三天。麻烦就出在报货这一环:每天下午四点前,店长要在群里报第二天要什么、要多少,全凭手感。年轻店长报得保守,下午三点货架就空了;老店长图省事按上周照抄,遇上天气突变或者旁边写字楼放假,晚上一堆面包只能当报废处理。
财务给的数字挺扎眼,全年报废金额占了短保品类营收的百分之九点几,而同期缺货带来的销售损失还没法量化。老板一开始想的是"上个系统让店长填得规范点",我们评估下来觉得方向不对。规范填表解决不了预测问题,得把报货这件事从人的经验里抽出来一部分,交给数据。
系统底座用的是 XpShop 新普MALL 的门店订货与供应链模块,在上面扩了短保业务需要的几块能力。
门店侧,店长每天下午登录小程序看到的不再是空白报货单,而是一张系统预填好的建议单:每个 SKU 给出建议数量、上周同期实际销量、昨日剩余、以及一句简短的调整理由(比如"明日周边中学放假,建议下调")。店长可以改,但改动幅度超过百分之三十要填原因,这个原因后面会回流到模型。
工厂侧,所有门店报货在晚上七点截单,系统按产线、按醒发时间、按配送线路做二次排产,把"要做什么"变成"几点做、哪条线做、几点装车"。配送车按线路拼单,早班司机手机上拿到的是带门店送达时序的任务单。
门店收货时扫码,每个批次带生产时间和效期,货架上贴电子价签,临期两小时自动切到折扣价。当天卖不掉的,闭店前扫码做报废登记,系统按门店、按品类、按原因归因。
预测这块,我们没有一上来就上复杂模型。第一版用的是加权移动平均加上节假日和天气修正因子,跑了三周,整体误差比店长手感低了一点点,但在几个特殊门店上错得离谱。拆开看才发现问题:学校旁边的店和写字楼里的店,销量曲线完全是两种形状,混在一个模型里做当然拟合不好。后来按门店客流画像做了聚类,分成校园型、写字楼型、社区型、交通枢纽型四类,每类单独训练,误差才降下来。这一步我们绕了大概两周弯路,如果一开始就先看数据分布,能省下来。
排产联动是第二个坎。工厂原来的排产系统只认"总量",不认"送达时序"。同样是一千个可颂,先送城东还是先送城西,工厂不关心,但门店很关心,因为早上七点半开门的店等不到八点半才出炉的货。我们的做法是在报货截单后先跑一遍配送线路规划,把每个门店的期望送达时间倒推成工厂的出炉截止时间,再把这个截止时间作为约束灌给排产。工厂的排产逻辑本身没大改,只是多了一个时间窗约束。
效期追踪最容易被忽视,实际上是损耗归因的地基。我们给每个生产批次生成批次码,托盘、周转筐、门店收货、货架补货、临期折扣、报废登记,全链路扫这一个码。有了批次粒度,才能回答"这批报废到底是工厂多做了、配送晚了、还是门店卖不动"这个问题。
案例片段(已脱敏): 某校园型门店 8 月 12 日报废归因明细:
批次 B20260812-03 全麦吐司 计划 40 / 实收 40 / 售出 22 / 临期折扣售出 5 / 报废 13,归因标签自动打成"需求预测偏高"。同一天另一门店批次 B20260812-11 肉松卷 计划 60 / 实收 60 / 售出 60 / 缺货记录 3 次,归因"预测偏低"。系统把这两条同时推给区域督导,第二天建议单里前者下调 30%、后者上调 15%。 排产时间窗约束的一段配置:早班配送线路 A 覆盖 12 家门店,最早开门 07:00,倒推工厂出炉截止 05:20,装车截止 05:50。线路 A 上的所有 SKU 在排产系统里被打上deadline=05:20标签,产线排程时优先级高于线路 C(最早开门 09:30)。
系统跑了四个月,短保品类报废率从百分之九点几降到百分之四点二左右,绝对值上一年能省下的金额,老板自己算完就没再纠结项目投入了。缺货率从原来抽样统计的百分之十一降到百分之五以内,下午三点以后货架空掉的情况明显少了。门店报货这件事本身的耗时,从店长平均每天十五分钟压到三分钟以内,多数时候就是看一眼建议单点确认。工厂这边,因为排产带上了时间窗,早班配送准时率从百分之八十三提到百分之九十六。短保品类的毛利率整体提了约两个百分点,主要来自报废减少和临期折扣的精细化。文中数据为项目复盘口径,已做脱敏。
做短保生意的系统,最核心的其实不是订货界面做得多漂亮,而是能不能把"预测偏差"这件事量化到批次粒度。没有批次码,所有的损耗分析都是拍脑袋。我们在这个项目上最值的一笔投入就是早早把批次码打通了全链路。
预测模型不要迷信统一模型。门店之间的差异往往比时间序列本身的规律更大,先做业务聚类,再做预测,比堆算法有效。我们试过直接上梯度提升树喂全量特征,效果还不如分群之后的简单模型稳,这个结果当时挺出乎意料。
店长的修改权限要留。完全不让改,一线抵触;完全放开改,模型永远学不到东西。要求大幅修改必须填原因,既保住了灵活性,也拿到了宝贵的负反馈样本。这些原因文本后来成了模型特征工程里很有用的一块。
还有一点是工厂和门店的协同节奏。截单时间往前挪半小时,工厂排产就从容很多,但门店会抱怨来不及看当天下午的销售。这个平衡点我们前后调了三次才定在晚上七点,没有理论最优解,只能试。
批次码用的是"日期加产线加流水"的可读编码,扫码枪和手机摄像头都能识别,工厂老师傅肉眼也能看懂,这在推行初期减少了不少抵触。电子价签的临期折扣是本地规则驱动,门店断网时也能按预设时间切价,不依赖云端下发。报废登记做了强制拍照,不是为了防店员,是为了区分"卖不掉"和"运输压坏"这两类完全不同的损耗,早期没拍照的时候这两类混在一起,归因全乱。建议单的生成放在凌晨批处理,避免下午高峰跟交易系统抢资源。督导看的损耗看板只保留四个指标,报废率、缺货率、建议单采纳率、归因分布,多了没人看。
短保业务的数字化,落地阻力往往不在技术侧,在门店的信任感。头一个月建议单采纳率只有百分之四十,店长们普遍觉得"机器不懂我们店"。我们做的不是去说服,而是每周把"如果按建议单执行,报废会少多少"的对比数据发到店长群。数据自己会说话,两个月后采纳率上到百分之七十八。信任这件事急不来,也糊弄不过去。