先说结论:做 family grouping(产品族聚类),别凭感觉、别抄竞品,就做一件事——把过去 90 天的订单行数据导出来,算出哪些 SKU 总是出现在同一张订单里(这就是 warehouse slotting family grouping affinity 的核心),再把亲和度高的货放进相邻库位。做完这一步,大多数仓的单均拣选行程能明显缩短。这个坑我见过三次,每次都是同一个死法:凭经验把"看起来像一家人"的货放一起,结果订单数据一算,根本不是一家人。

为什么订单数据比你的感觉靠谱?因为人的直觉是按品类想的,订单是按场景想的。你觉得洗发水该和护发素放一起,没错;但数据可能告诉你,洗发水真正的"铁搭档"是旅行装分装瓶——因为买洗发水的那批人正在准备出差。品类思维分的是货架,场景思维分的是订单。拣选员走的是订单的路,不是品类的路。

亲和度怎么算:三个数,一个都不能少

Family grouping 的计算借的是购物篮分析那套东西,三个指标:

第一,support(同单占比):SKU A 和 B 同时出现在同一张订单里的订单数,占总订单数的比例。这个数告诉你"这对组合有多常见"。

第二,confidence(条件概率):出了 A 的订单里,有多少比例同时出了 B。这个数告诉你"看到 A,基本可以确定 B 也要拣"。

第三,lift(提升度):实际同单率除以随机情况下的预期同单率。lift 大于 1,说明这对组合是真有缘,不是各自都好卖碰巧撞上的。

为什么三个都要?只看 support,你会把两个各自都是爆品的 SKU 误判成一家人(它们跟谁都同单);只看 confidence,你会捡到"买了游艇的人也买了游艇蜡"这种 support 低到没意义的组合。三个数一起看,筛出来的才是真亲和。阈值设多少?没有标准答案,我的起始建议是 support 和 confidence 都先卡一个你觉得"不算太松"的值,跑两周看效果再调——阈值是调出来的,不是算出来的。

五步落地:从订单导出到产品族库位落位

第一步:导出 90 天订单行数据,清洗三类脏数据。 从 WMS 或 OMS 导出订单行明细,字段至少要有订单号、SKU、下单时间。清洗掉三类:退货单(它反映的是退货逻辑,不是购买逻辑)、单行订单(只有一个 SKU,对亲和度计算零贡献)、测试单和内部领用单。数据窗口 90 天是经验值:太短会被大促带偏,太长会把过季组合算进来。季节性强的品类(圣诞装饰、泳季用品),单独拿旺季数据再算一版。

第二步:算 SKU 对的三个指标,输出亲和度排名表。 SKU 多的仓(上万个),SKU 对是天文数字,先做减法:只算过去 90 天动销过(出过至少一单)的 SKU;动销排名后 50% 的长尾 SKU,直接按品类归位,不参与计算——它们一年出不了几单,为它们调库位是浪费。输出一张表:SKU A、SKU B、support、confidence、lift,按 lift 排序。

第三步:人把关,过六道硬约束。 数据算出来的是"缘分",能不能放一起,人说了算。六道约束一条一条过:重量(重的放下层、轻的放上层,亲和组合里重的那个不能为了聚类被架到高处)、体积(大件和小件别硬塞同一库位)、温区(常温和冷藏再亲也不能放一起)、效期(效期短的不能被亲和组合拖慢周转)、危险品(化学品和食品再亲也得分区,这是法规)、易碎(易碎品和重货相邻可以,同库位不行)。这一步没有商量余地,数据再亲,约束不过就拆开。

第四步:落位规则——高亲和放相邻,不放同一库位。 这是全文最重要的一句,反常识但救过很多人:亲和度再高的两个 SKU,也不要放进同一个库位,要放进相邻的两个库位(同一巷道、同一侧、步行两三步的距离)。为什么?同库位混放,拣选员要在一堆货里翻找,出错率直线上升;相邻库位,拣选员走一步、伸两次手,两个 SKU 到手,出错率几乎不变。落位时再叠一层 ABC:family 整体按加权动销排离出货口的距离,family 里动销最高的那个 SKU 占离通道最近的库位。

第五步:试运行两周,只看两个数。 别一上来就全仓大挪移。先拿一个巷道或一个 family 试点,跑两周,对比试点前后的两个数:单均拣选巷道数(进了几条巷道)、单均拣选行程(走了多远)。两个数都降了,再全仓推;没降,回去调阈值。上线前夜 checklist 加一条:随机抽 20 张试点订单,让拣选员按新库位走一遍,记录有没有"为了一个 SKU 多跑一条巷道"的情况,有就说明这个 family 划错了。

两个项目故事:产品族聚类的正反教材

2023 年 11 月,加州 Rialto 一家汽车配件仓找我。他们的刹车片和刹车油,一个在 A 区东头,一个在 C 区西头,拣选员一张单要横穿整个仓。订单数据一算:confidence 高得离谱——买了刹车片的订单里,超过一半同时要了刹车油。按上面的五步走,把刹车油挪到刹车片隔壁巷道,单均拣选少进一条巷道。仓经理原话:"早知道就该先算数据,我们凭感觉放了三年。"

2024 年 3 月,Columbus 一家宠物用品仓,反例。猫砂和猫粮的亲和度全仓第一,上一任顾问直接把它们放进了同一排库位。结果呢?猫砂 20 公斤一袋放上层,拣选员每次取货都要举过头顶,三个月两个人拉伤了腰。数据没错,错在第三步没过"重量约束"。整改:猫砂挪到下层库位,猫粮放它隔壁上层——相邻,不混放。亲和度解决的是"走多远",人体工学解决的是"安不安全",两个都要对。

常见翻车点:这个坑我见过三次

翻车点一:把季节性组合写进常态库位。 圣诞季姜饼和礼盒的亲和度爆表,有人就把它们永久锁成邻居。1 月份姜饼下架了,礼盒旁边空着一个黄金库位晾了三个月。解法:季节性 family 单独建"季节库位组",季前两周挪入,季后一周挪出,不许进常态库位。

翻车点二:阈值设死,一年不调。 组合是会变的:新品上市、老品下架、促销策略一变,亲和度排名就洗牌。解法:每季度重算一次,family 成员变化超过三成,触发一次局部库位调整。把重算写进 SOP,别靠想起来。

翻车点三:为了聚类,把爆品拖离黄金区。 某仓的 Top 1 爆品单件订单占比极高(一个人只买它一件),根本不需要跟谁聚类。有人为了"family 完整",把它从出货口旁边的黄金库位挪去跟它的"亲戚"团聚,结果单件订单的拣选距离反而变长了。解法:先判订单形态——单件高频 SKU 永远优先黄金区,不参与聚类;只有多件订单占比高的 SKU 才进 family 逻辑。

最后说句反常识的:family grouping 的终点不是"放一起",是"少走路"。凡是让拣选员多走一步的聚类,不管数据多漂亮,都是错的。数据告诉你谁和谁有缘,库位决定的是这缘分值不值得你为它走路。

作者:林晓|WMS 实施顾问