卷 VI · 处处是环CH 21深度 21/24

一根鞭子,甩到链条末端

最后一卷不再教新工具,而是把前二十章的工具拿去看别的地方。第一站是一条供应链——它是一个延迟很长、增益不小、而且串了好几级的反馈环。它会做出你现在应该已经能预测的事。

牛鞭效应闭式解 ↔ 仿真理性的人做出集体愚蠢

▷ 先拧一下

一条四级供应链:顾客 → 零售 → 批发 → 分销 → 工厂。顾客的需求是平稳的随机波动(每周 100 单位上下,标准差 10),没有任何趋势、季节、突发。

每一级都做同一件完全合理的事:按最近几周的平均值预测需求,把库存补到「够撑过交货期」的水平。没有人囤积,没有人恐慌,没有人博弈。

A 波动一路传下去,工厂看到的和顾客差不多——毕竟总需求没变 B 波动会被平滑掉。每一级都在取平均,越往上游越平稳 C 波动被逐级放大,工厂看到的标准差是顾客的 4 倍以上 D 要看具体参数,没有普遍规律

一条链,四个环

先看清楚这里的环在哪。每一级零售商面对的是:

  • 被控量:我的库存水平;
  • 目标:够撑过交货期的库存;
  • 控制量:这周订多少货;
  • 延迟:订了货要 L 周才到(交货期);
  • 传感器:我看到的需求——而它其实是下游那一级的订单,不是终端顾客的真实需求。

最后一条是关键。每一级看到的都不是真实需求,而是下游那个环的输出。而那个输出,已经被下游那个环加过工了。

这一级订单波动放大
顾客的真实需求1.00×
零售商的订单1.18×
批发商的订单1.66×
分销商的订单2.60×
工厂看到的订单4.27×

每一级只放大 1.2 到 1.6 倍,看起来都不严重。而四级串起来,放大是相乘的

◆ 这一章的主线

放大不需要任何人做错事。

这个模型里没有恐慌、没有囤货、没有虚报、没有信息不对称的博弈。每一级都在做一件教科书上写着的、完全正确的事:用最近的数据预测需求,把库存补到该有的水平。

而放大是这条规则的数学后果。它有闭式解,可以算,可以预测,可以设计。

那个闭式解

Chen、Drezner、Ryan 和 Simchi-Levi 在 2000 年给出了单级的精确放大倍数。推导只要几行:

∑ 算一遍
# 设:需求 d 独立同分布,交货期 L 周,用最近 p 周的移动平均做预测。
# 「补到目标库存」策略下,这一周的订单是:

   q_t = (1 + L/p) · d_{t−1}  −  (L/p) · d_{t−1−p}
         └────┬────┘             └───┬───┘
      对最新那个需求的反应      把 p 周前那个需求从平均里剔掉

# 因为 d 各期独立,方差直接相加:

   Var(q)/Var(d) = (1 + L/p)² + (L/p)²
                 = 1 + 2L/p + 2L²/p²

★ 这个式子里没有任何人的愚蠢,只有 L 和 p 两个数。

验算:用 20 万期的仿真真跑一遍,和闭式对照:

   交货期 L   预测窗口 p    仿真放大    闭式解     相对差
  ────────────────────────────────────────────────────
      1          5         1.4809×    1.4800×    0.060%
      2          5         2.1221×    2.1200×    0.097%
      4          5         3.8853×    3.8800×    0.136%
      2         10         1.4789×    1.4800×    0.075%
      4          1        41.0841×   41.0000×    0.205%

# 最后一行值得盯一眼:交货期 4 周、只看上周的需求做预测,
# 放大 41 倍。**只看最近一期**这件事,代价大得离谱。

这个式子给出两个可以直接动手的旋钮:

① 缩短交货期 L。式子里 L 是二次的(2L²/p² 那一项),所以缩短交货期的回报是超线性的。L 从 4 降到 2(p=5),放大从 3.88 降到 2.12。

② 加长预测窗口 p。看得越长越平稳。p 从 5 加到 10(L=2),放大从 2.12 降到 1.48。代价是反应变慢——真需求发生变化时,你要更久才承认它。这就是我们熟悉的那笔交易:稳定换速度。(第 17 章那个滤波器的账,一模一样。)

而最有效的一招不在这个式子里:③ 让每一级都能看到终端的真实需求。这样每一级就不再是串联的,放大不再相乘。这正是「供应商管理库存」(VMI)和 POS 数据共享这类做法的全部理论依据——它把一条串联的链,变成了四个并联的环。

用控制论的话重讲一遍

这一整章其实是前二十章的一次复习,每一条都能对上号:

供应链里的说法控制论里的说法本书第几章
交货期 L纯延迟第 9 章
预测窗口 p传感器上的低通滤波第 17 章
「缺口补齐比例」(订得多凶)回路增益第 5 章
订单波动被放大闭环在某些频率上增益大于 1第 10 章
四级串起来放大相乘串联环节的增益相乘第 20 章
共享终端需求数据前馈第 18 章
缩短交货期缩短延迟(净收益,不是交易)第 11 章
加长预测窗口加滤波(是交易,赔上反应速度)第 17 章

整张表没有一行需要新知识。这就是「学完之后会改变你理解其他事物的方式」的具体样子——不是你多了一个关于供应链的知识点,是你发现供应链问题和你上周调的那个自动扩容是同一道题。

✎ 术语正名:「牛鞭效应」

这个名字(bullwhip effect)来自宝洁在 1990 年代对尿布订单的观察:终端销量极其平稳,而上游的订单剧烈波动。名字取得很形象——手腕轻轻一抖,鞭梢甩出去很远。

但这个名字有一个副作用:它听起来像一种病理,像是有人做错了什么。于是很多讨论落在「怎么让大家别恐慌」「怎么防止虚报订单」上。

那些因素当然真实存在,也确实会加剧它。但本章的模型里一个都没有,放大照样是 4.27 倍。更准确的描述是:牛鞭效应是「串联的、带延迟的、各自局部最优的反馈环」这一结构的固有属性。

这个区分决定了你去改什么:改人的行为(宣导、考核、惩罚虚报)收效有限,改结构(缩短交货期、共享数据、减少层级)才是真的在动那个式子里的 L 和 p。

▸ 在现实里

芯片行业的周期。从下单到交货十几周甚至更久(L 很大),而下游厂商只能看到自己的订单(信息不共享)。结果是这个行业著名的暴涨暴跌——缺货时人人超额下单,货到了又集体砍单。这不是因为半导体从业者比别人不理性,是因为那条链的 L 特别大。

2020–2022 年的集装箱和自行车。终端需求只涨了百分之几十,而上游订单一度涨了数倍,随后又暴跌到大量库存积压。那正好是这条链在一次阶跃输入下的过冲和回摆——和第 12 章那条冲过头 44.4% 的曲线是同一个形状,只是横轴的单位从秒变成了季度。

你的团队的工作量。需求从产品经理到设计到开发到测试,每一级都会「预留一点缓冲」。而缓冲就是增益:每一级预留 20%,四级下来就是 1.2⁴ ≈ 2.07 倍。而每一级都会诚实地说自己只留了一点点。

啤酒游戏。MIT 在 1960 年代设计的一个课堂桌游,就是让四个人分别扮演这条链的四级。几乎每一局都会出现剧烈的震荡和积压,而参与者事后普遍认为「是别人(或者上游那个傻子)搞砸的」。游戏的教学点正是:把同样理性的人放进这个结构,结果不会变。

✗ 这个直觉是错的
每一级都在做移动平均,平均是平滑操作,所以波动应该越传越小才对。 每一级确实在平滑它看到的需求。但它输出的不是那个平滑值,而是「订货量」——而订货量里包含一项「把库存缺口补上」,正是这一项在放大。

看那个订单式子就明白了:

   q_t = (1 + L/p)·d_{t−1} − (L/p)·d_{t−1−p}
         └────┬────┘
      系数**大于 1**

最新那个需求的系数是 1 + L/p,比 1 大。为什么?因为需求涨了 1 个单位,你不但要多订 1 个单位来满足它,还要把「交货期内的目标库存」也往上抬——而目标库存是按预测算的,预测涨了,目标库存跟着涨。这后半份是纯粹的放大。

这是本书反复出现的一个模式的又一次现身:局部合理 ≠ 全局合理。每一级都在正确地保护自己不缺货,而这些正确加起来,制造了一个上游根本没法应对的波形。

顺带一提,这也解释了为什么「让大家别过度反应」这类劝告基本无效:过度反应正是那条规则要求的。你要改的是规则本身(比如:目标库存不跟着预测走,而是用一个平滑得多的基准),或者改结构(共享数据、缩短交货期)。

◈ 回读

C波动被逐级放大,工厂看到的标准差是顾客的 4.27 倍。逐级是 1.18× → 1.66× → 2.60× → 4.27×——每一级只放大一点,但四级是相乘的。

而单级的放大倍数有精确的闭式解:1 + 2L/p + 2L²/p²,与 20 万期仿真对照,相对差 0.060% 到 0.205%

A 「总需求没变,所以传下去的也差不多」——总需求(均值)确实没变,一分不多一分不少。变的是方差。而对工厂来说,均值决定你要建多大的产能,方差决定你要建多少余量——后者才是真正的成本。(《撞墙》整本书讲的就是这件事:方差比均值贵。) B 「每一级都在取平均,所以越来越平稳」——这是最自然、也最值得纠正的一个直觉。每一级确实在平滑预测,但它输出的是订单,而订单 = 预测 + 库存缺口补偿。那个补偿项的系数大于 1,它是放大器。 D 「没有普遍规律」——恰恰相反,规律精确到小数点后三位。而且它只依赖两个数:交货期 L 和预测窗口 p。这意味着你可以在签供货合同之前,就算出这条链会有多不稳定。

这一章的一句话

把几个各自理性、各自带延迟的反馈环串起来,放大是相乘的——而没有任何一级会觉得问题出在自己这里。

下一章把镜头转回你自己的代码。你大概率正在维护好几个反馈环,只是没人这么叫它们。其中最典型的那个会演示一条你现在应该能预测的规律:指标延迟一旦超过机器启动时间,同一套配置就会从「稳如磐石」变成「冲到 200 台」。