大多数供应链延误预测论文的终点是一张表:AUC 0.91、F1 0.84、比 baseline 高 3 个点。这类论文有一个共同的、几乎无人质疑的隐含假设——排序质量的提升会自动转化为运营收益

Jize Li 这篇文章干的事情,是把这个假设拎出来,做成一道必须通过的闸门,然后当着三个数据集的面把它踩碎了两次。

它的价值不在于"发现 ML 有时不work"——这不算发现。它的价值在于三件事:

  1. 它给出了一个正确的目标函数。运营经理不需要知道哪些货会晚,他需要知道在只能查 10% 的预算下先查谁。这两个问题的最优解不是同一个东西。
  2. 它给出了一个不可回避的基线。货值在排序时刻是已知的,且它本身就是暴露度的一个乘法因子。任何声称有用的模型,必须解释它比"直接按已知量排序"多带来了什么。
  3. 它给出了一个可执行的部署协议:rolling-origin 折 + 训练折内预处理 + 配对 bootstrap 区间 + 严格正区间才放行。这套东西可以直接抄进任何一个企业的 MLOps 上线评审。

1. 问题的重构:从"预测延误"到"预算下的暴露捕获"

1.1 三个定义,一个目标

对货运 iii,记实际到货日 AiA_iAi、计划到货日 SiS_iSi,定义非负延误严重度(单位:日):

di=max⁡(Ai−Si, 0)(1)d_i = \max(A_i - S_i,\ 0) \tag{1}di=max(AiSi, 0)(1)

vi≥0v_i \ge 0vi0排序时刻已知的货值。定义暴露度代理

ei=divi(2)e_i = d_i v_i \tag{2}ei=divi(2)

给定打分函数 sss,令 Tk(s)T_k(s)Tk(s) 为分数最高的 k%k\%k% 货运集合,评价指标为:

Capture@k(s)=∑i∈Tk(s)ei∑iei(3)\mathrm{Capture@}k(s) = \frac{\sum_{i \in T_k(s)} e_i}{\sum_i e_i} \tag{3}Capture@k(s)=ieiiTk(s)ei(3)

Lift@10%=Capture@10%/0.10\mathrm{Lift@}10\% = \mathrm{Capture@}10\% / 0.10Lift@10%=Capture@10%/0.10

这里第一个值得停下来的地方Capture@k\mathrm{Capture@}kCapture@k 不是一个新指标,它就是累积增益曲线(cumulative gains curve)在横坐标 kkk 处的纵坐标。当打分函数取 s=es = es=e 本身时,这条曲线就是 eee洛伦兹曲线。也就是说,整套评估的几何对象是"暴露度的集中程度",而不是"分类边界的位置"。

这个转换是全文的支点。一旦你接受它,AUC 就自动失去了意义——AUC 关心的是全局的成对可比性,而运营只关心排序表最上面那 10% 行里装了多少钱。

1.2 七个排序器的谱系

论文对比了七个排序规则。把它们摆在一起看,会发现它们并不是七个并列的选项,而是一个乘法结构的不同截面

目标: e_i = d_i · v_i
(不可观测)

只用 v_i
VALUE_ONLY

只用 d̂_i
SEVERITY_ONLY (M0)

只用 p̂_i
PROB_ONLY

p̂_i · v_i
BINARY×VALUE

d̂_i · v_i
M1 ★核心

加权重训 d̂_i^(w) · v_i
M2b_tuned

种子随机序
RANDOM

  • RANDOM:种子随机序(地板)
  • VALUE_ONLY:按已知货值 viv_ivi
  • PROB_ONLY:按预测晚点概率 p^i\hat p_ip^i
  • SEVERITY_ONLY (M0):按预测严重度 d^i\hat d_id^i
  • BINARY×VALUEp^ivi\hat p_i v_ip^ivi
  • M1d^ivi\hat d_i v_id^ivi
  • M2b_tuned:代价敏感重训后的 d^i(w)vi\hat d_i^{(w)} v_id^i(w)vi,与 M0/M1 共享模型族与超参,只差训练折样本权重

1.3 闸门的定义

Δgate=Capture@k(M1)−Capture@k(VALUE_ONLY)(4)\Delta_{\text{gate}} = \mathrm{Capture@}k(\mathrm{M1}) - \mathrm{Capture@}k(\mathrm{VALUE\_ONLY}) \tag{4}Δgate=Capture@k(M1)Capture@k(VALUE_ONLY)(4)

M1 通过闸门,当且仅当 Δgate\Delta_{\text{gate}}Δgate 的配对 95% bootstrap 区间严格为正。

注意措辞的严厉程度:点估计为正但区间跨零,不算通过。这是一个刻意保守的准则,因为闸门另一侧的成本是真实的——一套上线的预测系统要有特征管线、重训调度、漂移监控、值班响应,而 ORDER BY value DESC 只需要一个索引。


2. 【推导一】M1 在总体意义上不可被超越——所以它的失败只可能来自估计误差

这是论文做对了但没有说出来的最重要的一件事。我把它写成一个命题。

2.1 命题

设特征集为 XXXviv_iviXiX_iXi 的一个分量,因为货值在排序时刻已知),考虑所有 XXX-可测的打分函数族 F\mathcal{F}F。则

s⋆(Xi)=E[ei∣Xi]s^\star(X_i) = \mathbb{E}[e_i \mid X_i]s(Xi)=E[eiXi]

在大样本极限下最大化 E[Capture@k]\mathbb{E}[\mathrm{Capture@}k]E[Capture@k],对任意 kkk 成立。

证明Capture@k\mathrm{Capture@}kCapture@k 的分母 ∑iei\sum_i e_iiei 与打分规则 sss 无关,是所有排序器共享的常数。因此只需最大化分子。对给定的特征实现取条件期望:

E[∑i∈Tk(s)ei ∣ X1:n]=∑i∈Tk(s)E[ei∣Xi]\mathbb{E}\left[\sum_{i \in T_k(s)} e_i \ \Big|\ X_{1:n}\right] = \sum_{i \in T_k(s)} \mathbb{E}[e_i \mid X_i]EiTk(s)ei  X1:n=iTk(s)E[eiXi]

在"从 nnn 个数中选 m=knm = knm=kn 个使其和最大"这个问题下,最优解显然是选 E[ei∣Xi]\mathbb{E}[e_i|X_i]E[eiXi] 最大的 mmm 个。□\square

(严格地说,分母是随机的,最大化期望分子与最大化期望比值只在 nnn 较大、分母集中时等价。这是一个良性近似。)

2.2 推论:M1 是插件式贝叶斯规则

因为 viv_iviXiX_iXi-可测的,它可以提到条件期望外面:

E[ei∣Xi]=E[divi∣Xi]=vi⋅E[di∣Xi]\mathbb{E}[e_i \mid X_i] = \mathbb{E}[d_i v_i \mid X_i] = v_i \cdot \mathbb{E}[d_i \mid X_i]E[eiXi]=E[diviXi]=viE[diXi]

于是:如果 d^i\hat d_id^i 是真实的条件均值 E[di∣Xi]\mathbb{E}[d_i|X_i]E[diXi],那么 d^ivi\hat d_i v_id^ivi 恰好就是最优打分函数本身。

 d^ivi=E[di∣Xi] vi=E[ei∣Xi]=s⋆(Xi) \boxed{\ \hat d_i v_i = \mathbb{E}[d_i \mid X_i]\, v_i = \mathbb{E}[e_i \mid X_i] = s^\star(X_i)\ } d^ivi=E[diXi]vi=E[eiXi]=s(Xi) 

2.3 这个推论改变了论文的解读方式

同时注意:VALUE_ONLY 是 M1 的一个退化特例——它相当于令 d^i≡dˉ\hat d_i \equiv \bar dd^idˉ(常数)。常数乘以 viv_ivi 不改变 viv_ivi 的排序。

所以 VALUE_ONLY⊂M1\text{VALUE\_ONLY} \subset \text{M1}VALUE_ONLYM1,M1 的假设空间严格更大,在总体层面 M1 不可能输

那论文里 M1 在 SCMS 和 Olist 输了 5 个点,这意味着什么?

它意味着:d^\hat dd^ 的估计误差已经大到吞掉了它携带的全部信息量。闸门测的从来不是"模型类是否合适",而是"这个具体拟合出来的 d^\hat dd^ 的噪声有多大"。

这个重述比论文原文的"severity learnability"更锋利:论文说的是"严重度学不学得会",而真正的问题是"学出来的东西里信噪比够不够抵消它被乘进排序时注入的扰动"。下一节我把这个"够不够"写成一个闭式条件。


3. 【推导二】ρ–β 判据:注入 d^\hat dd^ 什么时候反而伤害排序

3.1 建一个可解的代理模型

论文用 Spearman ρ\rhoρ 解释了三个数据集的分化,但停在定性层面。要拿到定量判据,需要一个可解的分布假设。取对数高斯代理(货运金额与延误天数的对数近似正态,这在物流数据里是相当标准的近似):

  • log⁡v=μv+σvη\log v = \mu_v + \sigma_v \etalogv=μv+σvηlog⁡d=μd+σdε\log d = \mu_d + \sigma_d \varepsilonlogd=μd+σdεη,ε∼N(0,1)\eta, \varepsilon \sim N(0,1)η,εN(0,1) 独立
  • 预测器:log⁡d^=a+βσd(ρ ε+1−ρ2 ζ)\log \hat d = a + \beta \sigma_d \left(\rho\, \varepsilon + \sqrt{1-\rho^2}\, \zeta\right)logd^=a+βσd(ρε+1ρ2ζ)ζ⊥(ε,η)\zeta \perp (\varepsilon, \eta)ζ(ε,η)

两个参数的含义必须说清楚,它们是全文的枢纽:

参数定义含义
ρ\rhoρCorr(log⁡d^, log⁡d)\mathrm{Corr}(\log \hat d,\ \log d)Corr(logd^, logd)信号:预测的排序信息量
β\betaβsd(log⁡d^) / sd(log⁡d)\mathrm{sd}(\log \hat d)\,/\,\mathrm{sd}(\log d)sd(logd^)/sd(logd)幅度:预测值的离散度相对真值的离散度

β>1\beta > 1β>1 意味着模型过度自信——它输出的散布比真实目标还大。这是拟合一个近乎学不会的目标时最典型的病态:树模型在训练集上把噪声吃进去,测试集上仍然吐出一大片散开的数值。

3.2 引入一个一参数族,把两个基线连起来

定义收缩打分:

Sγ=d^ γ⋅v⟺log⁡Sγ=γlog⁡d^+log⁡vS_\gamma = \hat d^{\,\gamma} \cdot v \qquad \Longleftrightarrow \qquad \log S_\gamma = \gamma \log \hat d + \log vSγ=d^γvlogSγ=γlogd^+logv

  • γ=0⇒S0=v⇒\gamma = 0 \Rightarrow S_0 = v \Rightarrowγ=0S0=v VALUE_ONLY
  • γ=1⇒S1=d^ v⇒\gamma = 1 \Rightarrow S_1 = \hat d\, v \Rightarrowγ=1S1=d^v M1

论文比较的两个策略,是同一条连续曲线上的两个端点。 这个观察本身就已经很有价值了——它意味着闸门检验可能在比较两个端点,而最优值落在内部。

3.3 求最优 γ\gammaγ

在联合正态下,打分与目标的相关系数越高,top-kkk 捕获的期望暴露越大(由逆米尔斯比的单调性给出)。所以只需最大化:

C(γ)=Cov(Sγ, log⁡e)Var(Sγ) Var(log⁡e)=σv2+γβρ σd2(σv2+γ2β2σd2)(σv2+σd2)C(\gamma) = \frac{\mathrm{Cov}(S_\gamma,\ \log e)}{\sqrt{\mathrm{Var}(S_\gamma)\,\mathrm{Var}(\log e)}} = \frac{\sigma_v^2 + \gamma\beta\rho\,\sigma_d^2}{\sqrt{\left(\sigma_v^2 + \gamma^2\beta^2\sigma_d^2\right)\left(\sigma_v^2 + \sigma_d^2\right)}}C(γ)=Var(Sγ)Var(loge)Cov(Sγ, loge)=(σv2+γ2β2σd2)(σv2+σd2)σv2+γβρσd2

a=βρσd2a = \beta\rho\sigma_d^2a=βρσd2c=β2σd2c = \beta^2\sigma_d^2c=β2σd2S=σv2S = \sigma_v^2S=σv2,对 f(γ)=(S+γa)/S+γ2cf(\gamma) = (S + \gamma a)/\sqrt{S + \gamma^2 c}f(γ)=(S+γa)/S+γ2c 求导置零:

aS+γ2c−(S+γa)γcS+γ2c=0 ⟹ a(S+γ2c)=(S+γa)γca\sqrt{S+\gamma^2c} - (S+\gamma a)\frac{\gamma c}{\sqrt{S+\gamma^2 c}} = 0 \ \Longrightarrow\ a(S + \gamma^2 c) = (S+\gamma a)\gamma caS+γ2c(S+γa)S+γ2cγc=0  a(S+γ2c)=(S+γa)γc

aS+aγ2c=Sγc+aγ2c ⟹ aS=SγcaS + a\gamma^2 c = S\gamma c + a\gamma^2 c \ \Longrightarrow\ aS = S\gamma caS+aγ2c=Sγc+aγ2c  aS=Sγc

 γ⋆=ac=βρσd2β2σd2=ρβ (★)\boxed{\ \gamma^\star = \frac{a}{c} = \frac{\beta\rho\sigma_d^2}{\beta^2\sigma_d^2} = \frac{\rho}{\beta}\ } \tag{★} γ=ca=β2σd2βρσd2=βρ ()

干净得有点吓人。最优的严重度权重,等于信号除以幅度。

3.4 M1 通过闸门的充要条件

C(1)>C(0)C(1) > C(0)C(1)>C(0),令 r=σd/σvr = \sigma_d/\sigma_vr=σd/σv(严重度离散度 / 货值离散度):

1+βρr21+β2r2>1 ⟹ (1+βρr2)2>1+β2r2\frac{1 + \beta\rho r^2}{\sqrt{1 + \beta^2 r^2}} > 1 \ \Longrightarrow\ (1+\beta\rho r^2)^2 > 1 + \beta^2 r^21+β2r21+βρr2>1  (1+βρr2)2>1+β2r2

2βρr2+β2ρ2r4>β2r2 → ÷ βr2>0  2ρ+βρ2r2>β2\beta\rho r^2 + \beta^2\rho^2 r^4 > \beta^2 r^2 \ \xrightarrow{\ \div\, \beta r^2 > 0\ }\ 2\rho + \beta\rho^2 r^2 > \beta2βρr2+β2ρ2r4>β2r2  ÷βr2>0  2ρ+βρ2r2>β

 β(1−ρ2r2)<2ρ (★★)\boxed{\ \beta\left(1 - \rho^2 r^2\right) < 2\rho\ } \tag{★★} β(1ρ2r2)<2ρ (★★)

ρ2r2≪1\rho^2 r^2 \ll 1ρ2r21 的常见情形下,它退化成一个记得住的形式:

β<2ρ\beta < 2\rhoβ<2ρ

读法:你注入排序的那份"预测离散度",不能超过它所携带相关性的两倍。ρ→0\rho \to 0ρ0 时右边趋于 0,任何正的 β\betaβ 都违反——严重度一旦不可学,乘上去必然亏,且没有任何调参能救。

3.5 (★) 式最漂亮的地方:γ⋆\gamma^\starγ 就是校准斜率

yyyy^\hat yy^ 做回归,斜率为:

slope=Cov(log⁡d, log⁡d^)Var(log⁡d^)=ρ σd (βσd)(βσd)2=ρβ=γ⋆\text{slope} = \frac{\mathrm{Cov}(\log d,\ \log\hat d)}{\mathrm{Var}(\log \hat d)} = \frac{\rho\,\sigma_d\,(\beta\sigma_d)}{(\beta\sigma_d)^2} = \frac{\rho}{\beta} = \gamma^\starslope=Var(logd^)Cov(logd, logd^)=(βσd)2ρσd(βσd)=βρ=γ

 最优收缩系数=校准斜率 \boxed{\ \textbf{最优收缩系数} = \textbf{校准斜率}\ } 最优收缩系数=校准斜率 

这条等式把论文的两条线索缝成了一条:

  • 论文的 Figure 1 画的正是按预测严重度分位的校准曲线——这张图上的斜率就是 γ⋆\gamma^\starγ
  • 论文报告的是截距(bias,SCMS −1.658-1.6581.658 天、Olist −0.611-0.6110.611 天、DataCo +0.010+0.010+0.010 天),并正确地指出"截距不影响单调排序"。

论文画对了图,却读错了统计量。 决定排序命运的从来不是那条曲线在纵轴上偏了多少,而是它有多

回头看 Figure 1 的三张子图:

  • DataCo:点几乎压在对角线上,从 (0.5,0.5)(0.5, 0.5)(0.5,0.5) 一路走到 (2.0,2.0)(2.0, 2.0)(2.0,2.0) —— 斜率 ≈1\approx 11γ⋆≈1\gamma^\star \approx 1γ1,M1 用的 γ=1\gamma = 1γ=1 恰好正确。闸门通过。
  • Olist:预测值从 0.2 走到 1.2(跨度 1.0),实际值从 0.85 只爬到 0.95(跨度 0.1),顶部完全压平 —— 斜率 ≈0.1\approx 0.10.1。而恰好是顶部这一段决定了 top-10% 选谁。M1 的 γ=1\gamma=1γ=1 比最优值大了一个数量级。
  • SCMS:曲线剧烈非单调,在预测值 1 附近直接从 0.5 跳到 5,可提取的单调分量极弱,γ⋆\gamma^\starγ 同样很小。

3.6 用论文自己的数字反算,能否复现它的三个结论?

Spearman ρS\rho_SρS 与高斯 copula 下的 Pearson ρP\rho_PρP 满足 ρP=2sin⁡(πρS/6)\rho_P = 2\sin(\pi\rho_S/6)ρP=2sin(πρS/6)。取 β≈1\beta \approx 1β1(保守估计,实际过拟合会让 β>1\beta>1β>1,结论只会更强):

数据集ρS\rho_SρS(论文)ρP\rho_PρPγ⋆=ρP/β\gamma^\star = \rho_P/\betaγ=ρP/βM1 用的 γ\gammaγ过度加权倍数判据 (★★)论文实测
DataCo0.3860.4010.4012.5×边缘通过+10.10 pp ✅
SCMS0.1490.1560.1616.4×违反−5.46 pp ❌
Olist0.0750.0790.08112.7×违反−4.87 pp ❌

判据与实测三比三吻合。 而且它给出了论文给不出的东西:连 DataCo 都在过度加权(2.5 倍),也就是说 M1 在唯一成功的那个数据集上,仍然没有取到最优——把 γ\gammaγ 调到 0.4 左右,那 10.10 pp 还能再涨。

3.7 数值验证

用 40 万样本的蒙特卡洛直接搜索最优 γ\gammaγ,与理论值对照:

ρ\rhoρβ\betaβrrrγ⋆\gamma^\starγ 实测γ⋆\gamma^\starγ 理论VALUEM1实测 M1>VAL(★★) 预言
0.401.01.00.400.40.3933.3864
0.081.01.00.050.08.3894.3016
0.151.01.50.150.15.3946.2929
0.401.02.00.400.40.3831.4460
0.600.61.00.951.00.3891.4532

γ⋆=ρ/β\gamma^\star = \rho/\betaγ=ρ/β 与判据 (★★) 均逐行成立。最后一行尤其说明问题:ρ=0.6\rho=0.6ρ=0.6β=0.6\beta=0.6β=0.6(模型主动收缩过了),γ⋆=1\gamma^\star = 1γ=1,此时 M1 直接就是最优的。


4. 【推导三】代价敏感重训练为什么注定不涨点

论文的第二个主结果是 M2b_tuned 在三个数据集上都没跑赢 M1(SCMS −3.33-3.333.33 pp、Olist −3.03-3.033.03 pp、DataCo −0.04-0.040.04 pp 且 CI 半宽仅 0.05 pp)。论文的解释是"样本加权会扭曲严重度排序而不贡献新信息"——方向对,但这其实是可以证明的。

4.1 权重方案

wi(λ)=1+λvivmedian,λ∈{0,1,2,5,10}(5)w_i(\lambda) = 1 + \lambda \frac{v_i}{v_{\text{median}}},\qquad \lambda \in \{0,1,2,5,10\} \tag{5}wi(λ)=1+λvmedianvi,λ{0,1,2,5,10}(5)

λ\lambdaλ 由外层训练数据内部的嵌套 rolling-origin 验证选出,外层测试折从不参与选 λ\lambdaλ。(这个隔离做得很干净,值得表扬。)

4.2 定理:XXX-可测权重不改变平方损失的总体最优解

关键观察:viv_ivi 是特征的一个分量,因此 wiw_iwiXiX_iXi 的确定性函数。 于是

arg⁡min⁡f E[w(X)(f(X)−d)2]=arg⁡min⁡f E[w(X)⏟≥0, X-可测⋅E[(f(X)−d)2∣X]]\arg\min_f\ \mathbb{E}\left[w(X)\big(f(X) - d\big)^2\right] = \arg\min_f\ \mathbb{E}\Big[\underbrace{w(X)}_{\ge 0,\ X\text{-可测}} \cdot \mathbb{E}\left[(f(X)-d)^2 \mid X\right]\Big]argfmin E[w(X)(f(X)d)2]=argfmin E[0, X-可测w(X)E[(f(X)d)2X]]

内层条件期望对每个 X=xX = xX=x 逐点最小化,其解是 f(x)=E[d∣X=x]f(x) = \mathbb{E}[d \mid X = x]f(x)=E[dX=x]w(x)w(x)w(x) 的取值完全无关(只要 w(x)>0w(x) > 0w(x)>0)。外层的非负加权无法改变逐点最优解。

 arg⁡min⁡f E[w(X)(f(X)−d)2]=E[d∣X]=arg⁡min⁡f E[(f(X)−d)2] \boxed{\ \arg\min_f\ \mathbb{E}\big[w(X)(f(X)-d)^2\big] = \mathbb{E}[d \mid X] = \arg\min_f\ \mathbb{E}\big[(f(X)-d)^2\big]\ } argfmin E[w(X)(f(X)d)2]=E[dX]=argfmin E[(f(X)d)2] 

所以在总体层面,M2b_tuned 与 M1 求解的是同一个函数。 加权唯一能做的,是在有限样本下重新分配模型容量——把拟合精度从低货值样本挪向高货值样本。这是纯粹的偏差-方差再分配,是二阶效应,没有引入任何新信息

4.3 这解释了三个数据集的三种表现

  • DataCo(目标可学、模型拟合良好):容量重分配几乎无害也无益 → −0.04-0.040.04 pp,CI 半宽 0.05 pp。这不是"检验功效不足的平局",而是理论预言的精确零。论文自己也强调了这一点,是全文统计素养最高的一句话。
  • SCMS / Olist(目标近乎不可学):模型本来就在拟合噪声,重加权只是换了一批噪声去拟合,同时把 d^\hat dd^ 的离散度 β\betaβ 推得更大 → 按判据 (★★),β\betaβ 变大而 ρ\rhoρ 不变,损失必然扩大 → −3.33-3.333.33 pp / −3.03-3.033.03 pp。符号和量级都被理论预言。

4.4 一个方法论层面的诊断:技术迁移越了界

Elkan (2001) 和 Zadrozny et al. (2003) 的代价比例加权,是为分类设计的。在分类里,非对称代价会移动贝叶斯决策阈值:

p⋆=c10−c00(c10−c00)+(c01−c11)p^\star = \frac{c_{10} - c_{00}}{(c_{10}-c_{00}) + (c_{01}-c_{11})}p=(c10c00)+(c01c11)c10c00

重加权训练分布确实能实现这个阈值移动——因为分类的输出是一个离散决策

但这里的管线是"回归条件均值 → 乘以已知货值 → 排序"。没有阈值可移,也没有决策要翻转,只有一个条件期望要估准。代价敏感加权在这个结构里理论上是惰性的。

这是全文最有教学价值的一个负面结果:一个在分类里有严格理论保证的技术,被搬进 regress-then-rank 管线后,保证不再成立。 作者用嵌套 CV 老老实实地测了,并且诚实地报告了失败——比大多数只报告成功配置的论文强得多。


5. 实验设计里最该抄走的三件事

这一节讲的是工程功底,我认为是这篇论文除主结论外最值得学的部分。

5.1 SCMS 的选择偏差修正(教科书级别)

原始 SCMS 管线要求采购订单日期非空,于是 10,324 行只保留了 4,592 行——丢掉 5,732 行(55.52%)。而这 5,732 行里有 5,404 行是 From-RDC 履约记录(占被丢弃行的 94.28%),也就是说:

这条过滤规则把整整一个履约渠道从数据集里抹掉了。

这不是 MAR(随机缺失)下的列表删除,而是缺失机制与一个类别变量完全共线的 MNAR。后果是评估总体被悄悄重定义了:你以为在评估"SCMS 的交付延误",实际在评估"SCMS 里非 RDC 履约的那一半"。

作者把它明确称为 selection-bias correction 而非 missing-value convenience,并恢复全部 10,324 行(含 5,404 条 From-RDC,占 52.34%)。

这件事在方法论上的分量被论文自己低估了。 它是一个可复现的警示:数据清洗规则本身就是一次未经声明的总体抽样,而绝大多数论文从不审计这一步。

5.2 泄漏控制与时序有效评估

外层:5 折 rolling-origin

Train fold 1..t

折内拟合
imputer / one-hot
频率编码

内层嵌套 rolling-origin
按 Capture@10% 选 λ

用选中的 λ
重拟合加权严重度模型

为 t+1 折打分

Test fold t+1

汇集全部外层测试折分数

1000 次配对 bootstrap
random_state=42

CI(M1 − VALUE_ONLY)
严格为正?

放行上线

保留 VALUE_ONLY

几个细节值得点名:

  • 为什么必须 rolling-origin:六个时间块里,SCMS 晚点率从 1.95% 漂到 16.35%,Olist 从 4.46% 漂到 17.21%,DataCo 稳定在 57.04%–58.02%。前两个数据集的随机划分会严重高估测试表现。这里也埋着一个有意思的伏笔——唯一时序平稳的数据集,恰好是唯一 ML 通过闸门的数据集
  • 预处理只在训练折内拟合:imputer、one-hot、Olist 的高基数频率编码(seller / product-category / seller-state / customer-state)全部折内 fit。频率编码尤其危险,它天然是一个全局统计量,泄漏起来无声无息。
  • 特征白名单审计:排除实际到货时间戳、post-purchase 承运事件、配送状态、delay、severity 目标及其二值别名。
  • 同族对照:M0 / M1 / M2b_tuned 共用 XGBoost(180 树、深度 4、lr 0.05、subsample 0.85、colsample 0.85、α=0\alpha=0α=0λ=1\lambda=1λ=1),分类器也复用回归器超参。差异因此可归因到排序规则本身,而不是调参预算。

5.3 配对 bootstrap

1000 次重采样、random_state=42配对——因为所有候选排序器是在同一批货运上评估的,配对能消掉共同的样本变异,这是把区间收窄到能做判断的关键。论文还明确写了"区间跨零不解释为已证明的零假设"——这句话在负结果论文里非常重要。


6. 结果复盘 + 一条论文没讲的机制

6.1 三张核心表

表 2:10% 预算下的三数据集诊断(闸门要求 M1 − VALUE_ONLY 的配对 95% CI 严格为正)

Datasetρ\rhoρR2R^2R2M0 liftBias (days)VALUE captureM1 captureM1−VALUE (95% CI)Gate?
SCMS0.149−0.0211.456−1.6580.5470.493−0.055 [−0.118, 0.017]❌ No
DataCo0.3860.2702.124+0.0100.2220.3230.101 [0.097, 0.104]✅ Yes
Olist0.075−0.0191.440−0.6110.4640.415−0.049 [−0.073, −0.029]❌ No

表 3:M2b_tuned 减 M1 @ Capture@10%

DatasetDifference (pp)95% CI (pp)
SCMS−3.33[−9.21, −0.59]
DataCo−0.04[−0.09, 0.01]
Olist−3.03[−4.86, −1.37]

表 4:全排序器 Exposure-Capture@10%

RankerSCMSDataCoOlist
RANDOM.079.100.097
VALUE_ONLY.547.222.464
PROB_ONLY.237.108.150
M0.146.212.144
BINARY×VALUE.546.287.430
M1.493.323.415
M2b_tuned.459.323.385

数值一致性审计:我逐项核对了表 2/3/4 与正文的所有差值(M1−VALUE、M1−M0、M2b−M1、M0 lift = capture/0.1)、三个数据集的晚点率(11.49% / 57.28% / 8.11%)、SCMS 的丢弃比例(55.52%)与 From-RDC 占比(52.34%)。全部自洽,无一处矛盾。 这在含大量派生数字的实证论文里并不常见,值得记一笔。

6.2 论文没讲的第二条机制:VALUE_ONLY 的强弱由货值分布的集中度决定

论文把三个数据集的分化全部归因于严重度可学性。但表 4 里藏着另一条同样有力的解释。

关键观察:若 d⊥vd \perp vdv,则

E[∑i∈Tk(v)divi]=dˉ∑i∈Tk(v)vi,E[∑idivi]=dˉ∑ivi\mathbb{E}\Big[\textstyle\sum_{i \in T_k(v)} d_i v_i\Big] = \bar d \sum_{i \in T_k(v)} v_i, \qquad \mathbb{E}\Big[\textstyle\sum_i d_i v_i\Big] = \bar d \sum_i v_iE[iTk(v)divi]=dˉiTk(v)vi,E[idivi]=dˉivi

两式相除,dˉ\bar ddˉ 约掉:

 Capture@k(VALUE_ONLY)≈∑i∈Tk(v)vi∑ivi=货值分布的 top-k 集中度 \boxed{\ \mathrm{Capture@}k(\mathrm{VALUE\_ONLY}) \approx \frac{\sum_{i \in T_k(v)} v_i}{\sum_i v_i} = \textbf{货值分布的 top-}k\textbf{ 集中度}\ } Capture@k(VALUE_ONLY)iviiTk(v)vi=货值分布的 top-k 集中度 

VALUE_ONLY 的分数里不含任何关于延误的信息量,它只是货值分布的基尼系数换了个写法。

用帕累托近似 top-q share=q1−1/α\text{top-}q\ \text{share} = q^{1-1/\alpha}top-q share=q11/α 反算尾指数(q=0.10q=0.10q=0.10):

数据集VALUE_ONLY capture反算 Pareto α\alphaα货值分布ML 闸门
SCMS0.5471.355极重尾
Olist0.4641.500极重尾
DataCo0.2222.887接近轻尾

ML 失败的两个数据集,货值尾指数都在 1.4–1.5;成功的那个是 2.9。

这说明 DataCo 的通过至少有两个共同作用的原因:

  1. 严重度确实可学(R2=0.27R^2 = 0.27R2=0.27ρ=0.386\rho = 0.386ρ=0.386)—— 论文讲了;
  2. 它的基线本来就弱——货值分布近乎均匀,top-10% 只装了 22.2% 的货值,比 RANDOM 的 10% 只高一倍出头。ML 是在一场对手弱得多的比赛里赢的——论文没讲。

于是诊断清单里应该再加一条:先算货值集中度。在货值高度重尾的场景(奢侈品、医药采购、大宗设备),VALUE_ONLY 几乎不可战胜,ML 的期望回报天然极低;在货值均质的场景(快消、标准件),才轮得到严重度模型说话。这一条几乎不花成本,一句 SQL 就能算,却能在立项阶段就砍掉一半没希望的项目。

6.3 二分类还是回归?由基础率决定

论文在 §6.7 观察到 BINARY×VALUE 与 M1 的胜负因数据集而异,并给出了正确的建议(“按部署预算比较,而不是按模型族标签选”),但没给机制。机制其实很清楚:

数据集晚点率PROB_ONLYM0谁更强BINARY×VALUEM1谁更强
SCMS11.49%.237.146分类器.546.493分类器
Olist8.11%.150.144略分类器.430.415略分类器(CI 跨零)
DataCo57.28%.108.212回归器.287.323回归器

规律:晚点率低(8%–11%)时,"是否会晚"本身就是稀缺信息,二分类标签信息量大;而条件于晚点的严重度幅值极噪,回归器把噪声一起乘进排序。晚点率接近 50%(DataCo 57%)时,二值标签近乎抛硬币(PROB_ONLY 的 .108 几乎等于 RANDOM 的 .100!),信号全部藏在幅值里,回归器才占优。

这和判据 (★★) 是同一件事的两种说法:概率预测被限制在 [0,1][0,1][0,1] 内、离散度天然受约束(β\betaβ 小),而回归输出的动态范围可以跨数百倍且能逼近零——d^→0\hat d \to 0d^0 会直接把一个高货值货运从队列顶部一脚踢到底部。 这就是 SCMS 上 BINARY×VALUE(.546)几乎完美保住了 VALUE_ONLY(.547),而 M1(.493)却把它打散了 5 个点的原因。

6.4 一个操作层面的反讽

数据集M1 排序中正严重度货运的预警窗口中位数均值
SCMS108 天135.45 天
DataCo2.00 天1.88 天
Olist22.09 天22.34 天

ML 唯一通过闸门的场景,留给你的干预窗口只有 48 小时;而给你 108 天从容调度的采购场景,ML 帮不上忙。

DataCo 均值(1.88)小于中位数(2.00),说明它的计划时长是低基数的小整数——这与 SHAP 显示的"shipment mode + planned duration 主导"完全吻合。DataCo 的可学性,很可能来自一条接近确定性的调度规则(不同运输模式对应固定天数),而不是真正意义上的"预测困难任务被攻克"。这是个开放问题,但它只会让论文的告诫更成立,不会更弱。


7. 部署清单

论文给了 5 条,我按前面的推导补 3 条(★标注):

1. 定义暴露 e = 严重度 × 货值
固定评审预算 k

★ 1.5 先算货值 top-k 集中度
集中度 > 45% ⇒ ML 期望回报极低

2. 把 VALUE_ONLY 的 Capture@k
设为在位基线

3. 在 rolling-origin 折上审计
严重度秩信息量 ρ 与校准

★ 3.5 读校准斜率而非截距
γ* = ρ/β = 校准斜率

★ 3.8 用 d̂^γ · v 一参数族
嵌套 CV 调 γ ∈ [0,1]

4. 配对 95% CI
(最优策略 − VALUE_ONLY)
是否严格为正?

保留 VALUE_ONLY
不上线

上线

5. 漂移下重新审计
无稳定嵌套 CV 增益
不加代价敏感重训

补充的第 3.8 条尤其值得强调:论文花了嵌套 CV 的预算去调 λ\lambdaλ(代价敏感权重),而第 4 节已经证明这个方向理论上是惰性的;同样的预算如果花在调 γ\gammaγ 上,由于 γ=0\gamma=0γ=0γ=1\gamma=1γ=1 分别就是 VALUE_ONLY 和 M1,调出来的策略在构造上不劣于两个端点。 这是一次几乎免费的改进,而且完全在论文自己的框架内。


8. 几句锐评

这篇论文最大的贡献是把一个方法论姿态制度化了。

供应链 ML 领域长期存在一种默认:模型只要在预测指标上赢了,运营价值就是顺理成章的事。这篇文章把"顺理成章"拆开来验,用三个真实数据集告诉你——三次里错两次。而且它错得不含糊:Olist 的 −4.87-4.874.87 pp,95% CI 是 [−7.29,−2.87][-7.29, -2.87][7.29,2.87],整个区间在零以下。这不是"没证明有用",这是"证明了有害"。

它做得最扎实的四件事:

  1. 目标函数选对了。Capture@k 直接对应"预算下的队列",跳过了所有关于 AUC 该不该用的争论。
  2. 基线选狠了。VALUE_ONLY 是无模型、零成本、且天然是暴露度的乘法因子——这是一个几乎无法被指责为 strawman 的基线。
  3. SCMS 的选择偏差修正是一次真正的数据审计,恢复了被一条清洗规则整体抹除的 52% 履约渠道。
  4. 诚实。M2b_tuned 三处全负照登;DataCo 的 −0.04-0.040.04 pp 被明确区分为"精确的零"而非"功效不足的平局";区间跨零不被解读为已证明的零假设。这些克制在负结果论文里是稀缺品。

三处可以更强的地方:

  • 校准图上读错了统计量。第 3 节已证 γ⋆\gamma^\starγ = 校准斜率,而论文报告的是截距。Figure 1 已经画出了答案,只差把回归线拟上去。
  • VALUE_ONLY 与 M1 是同一条曲线的两个端点d^γv\hat d^\gamma vd^γvγ∈[0,1]\gamma \in [0,1]γ[0,1])。闸门比的是端点,最优值在内部。
  • 配对 bootstrap 在汇集所有外层折之后进行,没有反映折间变异。SCMS 晚点率跨折从 1.95% 漂到 16.35%,块级/折级 bootstrap 会给出更保守也更诚实的区间。DataCo 的 [9.67,10.42][9.67, 10.42][9.67,10.42] pp 半宽仅 0.4 pp,在 18 万样本 + 时序平稳下大致可信,但方法上值得升级。

最后一句,也是我觉得这篇论文真正的思想遗产:

论文在 §7.4 提出,价值闸门可以推广到任何**暴露度可分解为"已知量级 × 不确定风险"**的决策场景——欺诈筛查、预测性维护、催收。这句话被藏在 Discussion 的一个小节里,但它其实是全文最大的那个洞。

所有这类场景都共享同一个结构:e=(已知)×(待预测)e = (\text{已知})\times(\text{待预测})e=(已知)×(待预测)。而只要这个结构成立,"按已知量排序"就永远是免费可得的、且强得离谱的基线——因为它已经占住了乘积里的一半。你的模型必须在剩下那一半里赚到足够多,多到能抵消把噪声乘进排序所付的代价。

这就是为什么值得把 ORDER BY value DESC 永久钉在评审看板上:它不是一个弱基线,它是被乘法结构从数学上保送进来的对手。


更多推荐