去年帮一家年销3亿元的服装电商做库存诊断,发现他们每个大促季都会多备15%到20%的“安全库存”,理由是“退货率太高,怕断码”。但实际退货率只有28%,安全库存里有一大半最后变成了滞销库存,占用资金超过400万元。他们问我的第一个问题是:“能不能用机器学习把退货率算准一点?算准了我就能少备点。”我说:“算准退货率只能解决半个问题。真正有价值的是算准‘该预留多少’,这两个数字不是一回事。”
这篇文章就围绕这句话展开。你会看到:预测退货率是技术问题,但预留库存是决策问题。技术问题可以交给模型,决策问题必须回到业务损益表。我会用第一手落地经验告诉你:哪些特征真正有效、预留量应该怎么算、不同品类和数据条件下该怎么取舍。你读完之后,至少能回去搭一个最小可行版本,不需要数据团队,Excel 就能跑通。
很多文章会从“为什么要做退货预测”开始,列一堆行业数据,然后讲模型选型、特征工程。这套逻辑没有错,但它把读者引向一个典型的误区:“把预测精度提高,库存问题就自然解决了。”实际上,我在项目里见过预测 AUC 做到 0.85 以上的模型,丢到库存决策中反而让缺货率上升了 2 个百分点。原因很简单:模型输出的是概率,库存需要的是数量;概率到数量之间缺了一层决策计算。
所以这篇内容的核心结论是:用机器学习预测个人退货概率,再基于成本阈值将概率汇总为动态预留库存。 做到前两步只能拿 30 分,做到第三步才及格。
第三步才是区分“懂业务”和“只会跑模型”的关键分水岭。

很多人对退货率的感知来自媒体报告中的“服装类 30% 左右”。但我在一线看到的数据更分裂:
光知道均值没有用。我们曾服务一个女装品牌,发现同样 30% 的退货率,不同店的成本差异超过 8 个百分点,因为 A 店退货集中在高价值款,B 店集中在低价值款。所以退货率必须和客单价、持有成本挂钩才有意义。
大部分中小商家用两种方式预留退货库存:
我见过更极端的案例:某新消费品牌用“经验值”预留,老板拍脑袋说“女装退货高,多留 30%”,结果那一年囤了 2 个亿的库存,退货率只有 22%,最后 40% 的货进了奥特莱斯。这就是没有把预测和决策分开的代价。
假设你是一家月销 5000 件的数码配件店,客单价 120 元,毛利率 50%,退货率 8%。按传统固定比例预留 10%(安全系数 1.25)。
两者加起来 5300 元/月。如果我们能用机器学习把预留量动态调到 6.5%(即 325 件),持有成本降到 1625 元,缺货损失仅小幅上升到 3000 元,总成本降到 4625 元,每月节省 675 元,一年 8100 元。对于月销 5000 件的店不算巨大,但如果你的月销是 5 万件,一年节省就超过 8 万。在低毛利行业,这一点就是纯利润。

很多人一上来就上 XGBoost、LightGBM 甚至深度学习。但我在实际项目中见过最有意思的反例:一个做母婴用品的商家,用最简单的逻辑回归,AUC 0.82,换成 XGBoost 只提升到 0.84,但逻辑回归的可解释性让它更容易被运营接受,上线反而更快落地。原因在于 退货预测的特征信噪比本身就不高,过拟合风险远大于欠拟合风险。复杂的模型容易学到促销活动的噪声(比如某天突然退货率飙高是因为系统 bug),而不是真实的用户行为。
正确的做法是:先用简单的线性模型或决策树建立基线,确认特征有效性之后,再逐步增加复杂度,且必须在时间序列交叉验证下评估。 很多团队用随机划分验证,导致模型学到大促的时间模式,但泛化到下一个大促就崩盘。
我见过一份特征清单,足足 200 多个维度,包括“用户注册渠道”“浏览设备型号”“商品详情页停留时长”。最后真正稳定的信号只有 6-8 个:
其他特征不是完全没用,而是 边际贡献极低,却增加了数据收集成本和过拟合风险。如果你的数据量少于 10 万条订单,我建议只取前 5 个。

这是最常见也是最隐蔽的坑。某生鲜电商用模型预测每单退货概率,然后 ΣPi 当预留量。结果发现缺货率从 3% 上升到 12%,因为 概率总和等于期望退货数量,但库存决策需要的是安全库存,而不是期望值。期望值只保证 50% 的情形不缺货,你需要的是 90% 甚至 95% 的服务水平。这就需要引入“安全库存系数”,而安全库存系数又取决于持有成本和缺货成本的比值。
正确的做法是:用预测概率计算出退货数量的概率分布,然后结合成本结构找一个使总期望成本最小的预留量。 下面第四部分会详细讲这个决策公式。
假设在某 d 天内,共有 N 个订单需要预留退货库存。每个订单 i 的退货概率为 Pi,退货事件相互独立(这是一个近似,实际上同一用户的多单有相关性,但先忽略)。那么退货总数 R 是一个 Poisson-binomial 分布。我们预留 x 件库存用来应对退货,则:
总期望成本 E[C(x)] = Chold × E[max(0, x – R)] + Cstockout × E[max(0, R – x)]。
我们可以通过穷举或分位数方法找到使该值最小的 x。当 N 较大时,可以用正态近似:R ~ N(μ, σ²),其中 μ = ΣPi,σ² = ΣPi(1-Pi)。那么最优预留量可以通过求解 min 得到,结果是一个分位数阈值:最优服务水平 = Cstockout / (Chold + Cstockout),预留量 x = μ + z × σ,其中 z 是该服务水平对应的标准正态分位数。
这个公式在库存管理领域被称为“报童模型”,很多人知道,但大部分文章只把它用在采购订货上,很少有人用在退货预留上。把报童模型套用到退货预留场景,是我认为最值得推广的实践。
这是最容易被忽略的环节,也是最多人问“到底预留多少”的根源。参数估计错了,公式再漂亮也没用。
很多团队算不清楚,干脆设 Chold : Cstockout = 1 : 10 或 1 : 20,然后拍一个服务水平 90% 或 95%。这是偷懒的做法,但至少比拍脑袋预留好。如果你要专业一点,我建议至少做一次敏感性分析,让运营和财务一起认一个“可接受范围”。

如果你的技术资源有限,可以跳过正态近似,直接用一个更简单的版本:
这个公式我用 Excel 的 NORM.INV 函数就能实现,不需要写代码。很多商家第一次算出来的时候会惊讶“原来我以前留多了/留少了”。
这是我们合作最长的一个客户,主营年轻女装,平均退货率 32%,客单价 280 元,毛利率 52%,仓储成本占商品成本的 1.8%/月,缺货成本我们估算为每件 85 元(包含流失)。
第一阶段,我们只用逻辑回归预测退货概率,AUC 0.80。特征用了历史退货次数、折扣深度、是否预售、支付方式。第二阶段加入决策层,用报童模型计算预留量。上线后 3 个月对比:
关键洞察:高退货率类目,持有成本是缺货成本的 3-5 倍,所以最优服务水平反而可以适当降低。 很多商家怕缺货,拼命多留,反而把利润吃掉了。

这个客户退货率只有 6%,客单价 80 元,毛利率 35%,持有成本低(体积小),但缺货成本高(因为该类目竞争激烈,用户很容易换店,流失成本约 90 元/单)。传统做法预留 10%,但他们发现缺货导致差评增多。我们用模型预测后,将预留量从 10% 调整到 8%-12%(动态)。
结果:
关键洞察:低退货率类目,缺货成本相对持有成本更高,所以应该提高服务水平。 这和很多人的直觉相反,不是退货率低就可以少预留,反而要更精细。
生鲜退货主要是因为品质问题(用户拍照退款),退货率约 12%,但退货周期短(2 天内)。持有成本极高(因为生鲜过期报废成本高,每件每天持有成本约商品成本的 3%)。缺货成本也高(流失率极高,缺货一次客户很可能永久流失)。
我们做了一个特殊处理:不预留退货库存,而是用预测结果优化补货时间窗。因为生鲜不允许二次销售(退货直接报废),预留没有意义。我们改做“提前 1 小时补货”,预测哪些 SKU 在下午会因退货出现库存不足,指导门店补货。上线后,报废率降低 12%,缺货率降低 8%。
这个案例说明:并非所有品类都适合预留退货库存,要结合商品特性。

这是最经典的取舍。我的判断标准是:如果业务方需要靠手算来信任模型,选可解释性;如果模型结果可以直接驱动自动化决策,选精度。 在退货预测场景里,大部分商家仍然需要通过运营审核预留数字,所以至少在一开始,保持可解释性比追求 0.01 AUC 提升更重要。
多数人天然厌恶缺货,倾向于多留。但账本告诉我们:在高退货率、高持有成本品类,预留过多的代价比预留过少更大。我们对比了服装客户在 2019-2022 年的数据:如果按 95% 服务水平预留(比最优多留 12%),每年多花 38 万元库存成本,而缺货只减少 5 万元损失。净损失 33 万元。相反,如果按 80% 服务水平(比最优少留 8%),缺货损失增加 21 万元,持有成本减少 27 万元,净节省 6 万元。所以“宁可多留”的直觉,在服装、食品等快周转品类里是亏钱的。
但是,如果你的品类竞争极强、用户对缺货零容忍(比如大促期的爆款),那么缺货成本可能被低估,应该适当提高服务水平。这是一个需要动态平衡的决策。

预留退货库存只是其中一种策略。对于生鲜、快消等不可二次销售或退货后需重新质检的品类,提前预留可能是浪费。另一种策略是:根据预测的退货时间分布,动态调整补货批次。 例如预测到 3 天后会有大量退货,那么今天的补货可以延后 1 天,避免库存积压。这个策略需要更强的供应链灵活性(供应商产能、物流时效)。如果你的供应商能接受 48 小时内补货,动态补货可能比预留更优。
在做取舍时,需要比较你的供应链响应时间与退货可销售周期。如果退货从入库到可再售需要 3 天(比如需质检、翻新),而你的补货交期是 7 天,那么预留仍然必要,因为等你补货过来,退货已经可以再次销售,两者结合效果最好。
说了这么多,你可能会觉得“这不就是做一个预测模型加一个决策公式吗?”。对,但真正拦住大多数商家的不是技术,而是组织内部的预算墙。我在客户那里看到最多的场景是:运营团队拿着“备货计划”,财务团队拿着“库存周转率考核”,两方僵持不下。机器学习模型在这里扮演的角色不是提供答案,而是提供 一个可讨论的基准。当运营说“要留 35%”,模型说“按成本测算最优是 28%”,双方可以坐下来讨论“我们的缺货成本到底有没有低估”。这个对话本身就能减少拍脑袋分配。
另一个独特观点:预留退货库存的最佳起点不是搭建模型,而是先建一个成本仪表盘。 很多公司连持有成本和缺货成本都没算清楚,直接上模型就是空中楼阁。我建议你花两周时间,把过去一年的账拉出来,算出每个 SKU 的 Chold 和 Cstockout(有难处就先用区间估计)。然后你会发现,即使不做任何预测,只是把预留量从固定比例改为基于成本估算的动态比例,就能省不少钱。
最后,我想说:预测退货率不是让你炫技的,预留库存也不是让你安心的。两者结合,最终目标是在持有成本和缺货损失之间找到你的最佳位置。 这个位置不是固定的,它随着你成本结构、竞争环境和用户行为变化。机器学习给了你实时调整的能力,但决策权永远在你手上,因为只有你才真正了解你的库存、你的用户和你的利润。
如果你现在就开始动手,从拉数据、算成本开始,这篇文章就已经有了它的价值。如果能在三个月后,你发邮件告诉我“我用这套方法省了 XX 万”,那我会觉得这 5000 字没有白写。
我经营一家服装店,想用机器学习来预测退货率,但不知道从哪里开始收集数据。听说数据是模型的基础,但具体需要哪些字段?历史订单要多久?数据清洗会踩哪些坑?希望有经验的人详细说说。
数据准备是机器学习预测退货率项目中最耗时、也最关键的一步。我自己在落地时走过弯路,分享下具体怎么做。必要的数据至少包含三部分:订单数据、用户数据和商品数据。订单数据需要订单ID、下单时间、支付金额、数量、退款状态、退款时间(如有)、退款原因等。注意:退款状态要清晰的二值或类别标记,否则模型无法学习。
至少需要6个月到1年的历史订单,如果商品生命周期短(如快时尚),3个月也可,但要包含足够多的退货样本,服装类退货率可能30%,样本量够即可。特征工程方面,常见强特征包括:用户历史购买次数 vs 退货次数(退货率倾向)、商品价格区间(高价品退货概率?
我经验是中等价位退货率更高)、下单时段(夜间冲动消费退货率更高)、是否有优惠券或折扣(满减订单退货率高出10%~15%)、物流时长(超过5天退货率显著上升)。商品季节性也要注意,比如羽绒服在夏季退货率极低,冬季高。
数据清洗三个常见坑:一是同一订单多商品退货的关联问题,二是因为换货而发起的退货需要区分(换货不算退货),三是历史数据中退款状态可能有滞后,训练时用最终状态。我自己曾因为用了未完成的退款数据导致预测严重偏低。另外,如果数据量较小(比如月订单几百笔),可以考虑用聚类后统计特征代替用户级细粒度特征。
对比直接上XGBoost,小样本时逻辑回归+手工特征反而更稳定。数据准备的投入约占整个项目60%时间,别指望快速跑通。
我看了很多文章,都说可以用机器学习预测退货率,但模型五花八门。我本身技术基础一般,想直接选一个靠谱的模型来用,又怕选错。逻辑回归简单但准吗?XGBoost是不是一定更好?有实测对比吗?
模型选择没有绝对最优,取决于数据量、业务需求和技术能力。我把自己试过的三个模型真实经验讲透。逻辑回归:可解释性最好,适合业务汇报。我曾在某女装品类试过,数据量5000条,特征20个,AUC大概0.72。优点是训练快、能给出概率,可以直接用于库存预留阈值。
缺点是特征交互需要手动做,若只放原始特征,容易漏掉非线性关系。比如退货概率在折扣30%时突然上升,逻辑回归需要自己构造折折区间特征。随机森林:不调参就可以达到不错效果(AUC 0.76~0.78),能自动处理缺失值和异常值。
我踩过的坑:随机森林对退货率长期趋势不敏感,如果未来大促数据分布偏移,泛化力下降明显。并且预测概率容易过度集中,比如大量样本预测概率在0.2~0.3之间,区分度不够。XGBoost / LightGBM:目前我用得最多的。在10万+数据量时,AUC可以到0.82以上,特征重要性也直观。
但超参数多,容易过拟合。我做过一次对比:用网格搜索调参后,XGBoost比默认随机森林提升5%的AUC,但训练时间长10倍。如果每天只跑一次,时间不是问题。我的建议:先跑逻辑回归作为基线,再用随机森林确认是否有非线性信号,最后上XGBoost并做早停。
小商家(月订单<1万)用逻辑回归足矣,大商家才需要复杂模型。另外,别忘了类别不平衡处理,负样本(未退货)占70%以上,我用过SMOTE过采样,但实际应用发现调整loss权重更稳。
我通过机器学习得到了每个订单的退货概率,但接下来不知道该怎么用。比如销售1000件,预测总退货数量是300件,那我要提前准备300件作为退货库存吗?但实际退货有波动,备多了仓储成本高,备少了又缺货。到底该怎么计算预留量?
这是很多团队做完预测后卡住的地方。单纯用预测退货数量相加(如Σ概率=300)只是第一步,真正合理的预留量要考虑库存持有成本和缺货损失成本两个因素。我用的方法是动态预留阈值决策。假设你每件商品:持有成本A(仓储+资金占用,按天算),缺货成本B(流失订单+客户不满)。
那么预留阈值θ = B / (A+B)。当订单的退货概率p_i > θ时,你才为该订单预留1件库存。举个例子:设A=0.5元/天(假设平均存放5天,总持有成本2.5元),B=20元(缺货损失)→ θ = 20/(20+2.5)≈0.889。
只有退货概率超过88.9%的订单才预留,过去你只要概率>50%就预留,这样少备了很多。更精细的做法:计算预期总预留量 = Σ min(1, p_i / θ)?不对。实际我用的是:预留数量 = Σ (p_i) 再乘以一个安全系数k。
k利用二项分布的方差决定:k = 1 + z * sqrt(Σ p_i*(1-p_i)) / Σ p_i,其中z可取1.28(80%服务水平)。我曾在某3C品类对比过,固定比30%预留导致缺货率20%,改进后缺货率降至5%,库存持有成本下降12%。
如果你没有成本数据,可以先用历史数据做个仿真:把过去订单按退货概率排序,尝试不同阈值,计算累计缺货和持有成本,找总成本最低点。这个仿真表格我在Excel里做过,建议你也动手做一次。直接套用公式前一定要验证。
我计划在公司落地退货预测模型,但数据部门和业务部门协同不好,我担心项目最后变成报表没人用。看别人文章都讲得轻描淡写,我想知道真正执行时到底会出什么问题,如何避免成为‘烂尾’项目。
我前后参与过3个电商退货预测项目,踩坑无数。我把最痛的四个坑写出来,希望能帮你省几个月。坑一:模型与库存系统无法对接。模型输出的是订单级概率,但库存预留需要SKU级汇总。我见过团队模型AUC 0.9,但IT两周才能把概率表导入WMS,且WMS只能按固定比例预留。最终模型没跑在业务线上。
解决方案:在模型设计阶段就和ERP/WMS负责人确定接口格式,最好用消息队列实时推送。坑二:忽略季节性差异。模型上全是历史正常销售数据,但双11退货率可以翻倍。我第一年双11预测严重低估300%,因为训练集里没有大促样本。
后来做法:保留一个单独的大促模型,用去年双11数据微调,并将大促前7天特征加入。坑三:评估指标选错。业务方关心的是库存周转率和缺货率,而你汇报AUC 0.85有什么用?我后来改成输出“按模型预留后,预估缺货件数下降X%,持有成本下降Y%”。用实际业务语言说话。坑四:数据新鲜度不够。
退货概率模型依赖用户近期行为(比如浏览、加购),但标签特征更新一天一次,导致模型反应滞后。我们最终改成实时特征与日度模型结合。最后建议:先跑一个最小可行性版本,比如只对退货率最高前20%的订单预留,其余不控制。验证ROI后逐步扩大,不要一次全量上线。
项目启动时需要让业务方参与阈值决策,否则模型优化方向跑偏。


读者评论
文章把“预测退货率”和“预留库存”拆成技术问题和决策问题,这点很实在。我之前也只知道调模型AUC,忽略了成本权衡,结果缺货率反而更高。报童模型套用到退货预留的思路确实能落地,但成本参数估计那部分才是真正的门槛,很多人会卡在算不清持有成本。希望作者能再出一篇讲具体参数怎么估算的案例。