当机器学习赢不过一次 ORDER BY value DESC
大多数供应链延误预测论文的终点是一张表:AUC 0.91、F1 0.84、比 baseline 高 3 个点。这类论文有一个共同的、几乎无人质疑的隐含假设——排序质量的提升会自动转化为运营收益。
Jize Li 这篇文章干的事情,是把这个假设拎出来,做成一道必须通过的闸门,然后当着三个数据集的面把它踩碎了两次。
它的价值不在于"发现 ML 有时不work"——这不算发现。它的价值在于三件事:
- 它给出了一个正确的目标函数。运营经理不需要知道哪些货会晚,他需要知道在只能查 10% 的预算下先查谁。这两个问题的最优解不是同一个东西。
- 它给出了一个不可回避的基线。货值在排序时刻是已知的,且它本身就是暴露度的一个乘法因子。任何声称有用的模型,必须解释它比"直接按已知量排序"多带来了什么。
- 它给出了一个可执行的部署协议: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(Ai−Si, 0)(1)
记 vi≥0v_i \ge 0vi≥0 为排序时刻已知的货值。定义暴露度代理:
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)=∑iei∑i∈Tk(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 七个排序器的谱系
论文对比了七个排序规则。把它们摆在一起看,会发现它们并不是七个并列的选项,而是一个乘法结构的不同截面:
- RANDOM:种子随机序(地板)
- VALUE_ONLY:按已知货值 viv_ivi 排
- PROB_ONLY:按预测晚点概率 p^i\hat p_ip^i 排
- SEVERITY_ONLY (M0):按预测严重度 d^i\hat d_id^i 排
- BINARY×VALUE:p^ivi\hat p_i v_ip^ivi
- M1:d^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 命题
设特征集为 XXX(viv_ivi 是 XiX_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[ei∣Xi]
在大样本极限下最大化 E[Capture@k]\mathbb{E}[\mathrm{Capture@}k]E[Capture@k],对任意 kkk 成立。
证明:Capture@k\mathrm{Capture@}kCapture@k 的分母 ∑iei\sum_i e_i∑iei 与打分规则 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]Ei∈Tk(s)∑ei X1:n=i∈Tk(s)∑E[ei∣Xi]
在"从 nnn 个数中选 m=knm = knm=kn 个使其和最大"这个问题下,最优解显然是选 E[ei∣Xi]\mathbb{E}[e_i|X_i]E[ei∣Xi] 最大的 mmm 个。□\square□
(严格地说,分母是随机的,最大化期望分子与最大化期望比值只在 nnn 较大、分母集中时等价。这是一个良性近似。)
2.2 推论:M1 是插件式贝叶斯规则
因为 viv_ivi 是 XiX_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[ei∣Xi]=E[divi∣Xi]=vi⋅E[di∣Xi]
于是:如果 d^i\hat d_id^i 是真实的条件均值 E[di∣Xi]\mathbb{E}[d_i|X_i]E[di∣Xi],那么 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[di∣Xi]vi=E[ei∣Xi]=s⋆(Xi)
2.3 这个推论改变了论文的解读方式
同时注意:VALUE_ONLY 是 M1 的一个退化特例——它相当于令 d^i≡dˉ\hat d_i \equiv \bar dd^i≡dˉ(常数)。常数乘以 viv_ivi 不改变 viv_ivi 的排序。
所以 VALUE_ONLY⊂M1\text{VALUE\_ONLY} \subset \text{M1}VALUE_ONLY⊂M1,M1 的假设空间严格更大,在总体层面 M1 不可能输。
那论文里 M1 在 SCMS 和 Olist 输了 5 个点,这意味着什么?
它意味着:d^\hat dd^ 的估计误差已经大到吞掉了它携带的全部信息量。闸门测的从来不是"模型类是否合适",而是"这个具体拟合出来的 d^\hat dd^ 的噪声有多大"。
这个重述比论文原文的"severity learnability"更锋利:论文说的是"严重度学不学得会",而真正的问题是"学出来的东西里信噪比够不够抵消它被乘进排序时注入的扰动"。下一节我把这个"够不够"写成一个闭式条件。
3. 【推导二】ρ–β 判据:注入 d^\hat dd^ 什么时候反而伤害排序
3.1 建一个可解的代理模型
论文用 Spearman ρ\rhoρ 解释了三个数据集的分化,但停在定性层面。要拿到定量判据,需要一个可解的分布假设。取对数高斯代理(货运金额与延误天数的对数近似正态,这在物流数据里是相当标准的近似):
- logv=μv+σvη\log v = \mu_v + \sigma_v \etalogv=μv+σvη,logd=μd+σdε\log d = \mu_d + \sigma_d \varepsilonlogd=μd+σdε,η,ε∼N(0,1)\eta, \varepsilon \sim N(0,1)η,ε∼N(0,1) 独立
- 预测器:logd^=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(logd^, logd)\mathrm{Corr}(\log \hat d,\ \log d)Corr(logd^, logd) | 信号:预测的排序信息量 |
| β\betaβ | sd(logd^) / sd(logd)\mathrm{sd}(\log \hat d)\,/\,\mathrm{sd}(\log d)sd(logd^)/sd(logd) | 幅度:预测值的离散度相对真值的离散度 |
β>1\beta > 1β>1 意味着模型过度自信——它输出的散布比真实目标还大。这是拟合一个近乎学不会的目标时最典型的病态:树模型在训练集上把噪声吃进去,测试集上仍然吐出一大片散开的数值。
3.2 引入一个一参数族,把两个基线连起来
定义收缩打分:
Sγ=d^ γ⋅v⟺logSγ=γlogd^+logvS_\gamma = \hat d^{\,\gamma} \cdot v \qquad \Longleftrightarrow \qquad \log S_\gamma = \gamma \log \hat d + \log vSγ=d^γ⋅v⟺logSγ=γlogd^+logv
- γ=0⇒S0=v⇒\gamma = 0 \Rightarrow S_0 = v \Rightarrowγ=0⇒S0=v⇒ VALUE_ONLY
- γ=1⇒S1=d^ v⇒\gamma = 1 \Rightarrow S_1 = \hat d\, v \Rightarrowγ=1⇒S1=d^v⇒ M1
论文比较的两个策略,是同一条连续曲线上的两个端点。 这个观察本身就已经很有价值了——它意味着闸门检验可能在比较两个端点,而最优值落在内部。
3.3 求最优 γ\gammaγ
在联合正态下,打分与目标的相关系数越高,top-kkk 捕获的期望暴露越大(由逆米尔斯比的单调性给出)。所以只需最大化:
C(γ)=Cov(Sγ, loge)Var(Sγ) Var(loge)=σ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=βρσd2,c=β2σd2c = \beta^2\sigma_d^2c=β2σd2,S=σ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ρ2r2≪1 的常见情形下,它退化成一个记得住的形式:
β<2ρ\beta < 2\rhoβ<2ρ
读法:你注入排序的那份"预测离散度",不能超过它所携带相关性的两倍。ρ→0\rho \to 0ρ→0 时右边趋于 0,任何正的 β\betaβ 都违反——严重度一旦不可学,乘上去必然亏,且没有任何调参能救。
3.5 (★) 式最漂亮的地方:γ⋆\gamma^\starγ⋆ 就是校准斜率
把 yyy 对 y^\hat yy^ 做回归,斜率为:
slope=Cov(logd, logd^)Var(logd^)=ρ σ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.658−1.658 天、Olist −0.611-0.611−0.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 1≈1,γ⋆≈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.1≈0.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γ | 过度加权倍数 | 判据 (★★) | 论文实测 |
|---|---|---|---|---|---|---|---|
| DataCo | 0.386 | 0.401 | 0.40 | 1 | 2.5× | 边缘通过 | +10.10 pp ✅ |
| SCMS | 0.149 | 0.156 | 0.16 | 1 | 6.4× | 违反 | −5.46 pp ❌ |
| Olist | 0.075 | 0.079 | 0.08 | 1 | 12.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γ⋆ 理论 | VALUE | M1 | 实测 M1>VAL | (★★) 预言 |
|---|---|---|---|---|---|---|---|---|
| 0.40 | 1.0 | 1.0 | 0.40 | 0.40 | .3933 | .3864 | ❌ | ❌ |
| 0.08 | 1.0 | 1.0 | 0.05 | 0.08 | .3894 | .3016 | ❌ | ❌ |
| 0.15 | 1.0 | 1.5 | 0.15 | 0.15 | .3946 | .2929 | ❌ | ❌ |
| 0.40 | 1.0 | 2.0 | 0.40 | 0.40 | .3831 | .4460 | ✅ | ✅ |
| 0.60 | 0.6 | 1.0 | 0.95 | 1.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.33−3.33 pp、Olist −3.03-3.03−3.03 pp、DataCo −0.04-0.04−0.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_iwi 是 XiX_iXi 的确定性函数。 于是
argminf E[w(X)(f(X)−d)2]=argminf 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)2∣X]]
内层条件期望对每个 X=xX = xX=x 逐点最小化,其解是 f(x)=E[d∣X=x]f(x) = \mathbb{E}[d \mid X = x]f(x)=E[d∣X=x],与 w(x)w(x)w(x) 的取值完全无关(只要 w(x)>0w(x) > 0w(x)>0)。外层的非负加权无法改变逐点最优解。
argminf E[w(X)(f(X)−d)2]=E[d∣X]=argminf 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[d∣X]=argfmin E[(f(X)−d)2]
所以在总体层面,M2b_tuned 与 M1 求解的是同一个函数。 加权唯一能做的,是在有限样本下重新分配模型容量——把拟合精度从低货值样本挪向高货值样本。这是纯粹的偏差-方差再分配,是二阶效应,没有引入任何新信息。
4.3 这解释了三个数据集的三种表现
- DataCo(目标可学、模型拟合良好):容量重分配几乎无害也无益 → −0.04-0.04−0.04 pp,CI 半宽 0.05 pp。这不是"检验功效不足的平局",而是理论预言的精确零。论文自己也强调了这一点,是全文统计素养最高的一句话。
- SCMS / Olist(目标近乎不可学):模型本来就在拟合噪声,重加权只是换了一批噪声去拟合,同时把 d^\hat dd^ 的离散度 β\betaβ 推得更大 → 按判据 (★★),β\betaβ 变大而 ρ\rhoρ 不变,损失必然扩大 → −3.33-3.33−3.33 pp / −3.03-3.03−3.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⋆=(c10−c00)+(c01−c11)c10−c00
重加权训练分布确实能实现这个阈值移动——因为分类的输出是一个离散决策。
但这里的管线是"回归条件均值 → 乘以已知货值 → 排序"。没有阈值可移,也没有决策要翻转,只有一个条件期望要估准。代价敏感加权在这个结构里理论上是惰性的。
这是全文最有教学价值的一个负面结果:一个在分类里有严格理论保证的技术,被搬进 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 泄漏控制与时序有效评估
几个细节值得点名:
- 为什么必须 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^2R2 | M0 lift | Bias (days) | VALUE capture | M1 capture | M1−VALUE (95% CI) | Gate? |
|---|---|---|---|---|---|---|---|---|
| SCMS | 0.149 | −0.021 | 1.456 | −1.658 | 0.547 | 0.493 | −0.055 [−0.118, 0.017] | ❌ No |
| DataCo | 0.386 | 0.270 | 2.124 | +0.010 | 0.222 | 0.323 | 0.101 [0.097, 0.104] | ✅ Yes |
| Olist | 0.075 | −0.019 | 1.440 | −0.611 | 0.464 | 0.415 | −0.049 [−0.073, −0.029] | ❌ No |
表 3:M2b_tuned 减 M1 @ Capture@10%
| Dataset | Difference (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%
| Ranker | SCMS | DataCo | Olist |
|---|---|---|---|
| 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 vd⊥v,则
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[∑i∈Tk(v)divi]=dˉ∑i∈Tk(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)≈∑ivi∑i∈Tk(v)vi=货值分布的 top-k 集中度
VALUE_ONLY 的分数里不含任何关于延误的信息量,它只是货值分布的基尼系数换了个写法。
用帕累托近似 top-q share=q1−1/α\text{top-}q\ \text{share} = q^{1-1/\alpha}top-q share=q1−1/α 反算尾指数(q=0.10q=0.10q=0.10):
| 数据集 | VALUE_ONLY capture | 反算 Pareto α\alphaα | 货值分布 | ML 闸门 |
|---|---|---|---|---|
| SCMS | 0.547 | 1.355 | 极重尾 | ❌ |
| Olist | 0.464 | 1.500 | 极重尾 | ❌ |
| DataCo | 0.222 | 2.887 | 接近轻尾 | ✅ |
ML 失败的两个数据集,货值尾指数都在 1.4–1.5;成功的那个是 2.9。
这说明 DataCo 的通过至少有两个共同作用的原因:
- 严重度确实可学(R2=0.27R^2 = 0.27R2=0.27,ρ=0.386\rho = 0.386ρ=0.386)—— 论文讲了;
- 它的基线本来就弱——货值分布近乎均匀,top-10% 只装了 22.2% 的货值,比 RANDOM 的 10% 只高一倍出头。ML 是在一场对手弱得多的比赛里赢的——论文没讲。
于是诊断清单里应该再加一条:先算货值集中度。在货值高度重尾的场景(奢侈品、医药采购、大宗设备),VALUE_ONLY 几乎不可战胜,ML 的期望回报天然极低;在货值均质的场景(快消、标准件),才轮得到严重度模型说话。这一条几乎不花成本,一句 SQL 就能算,却能在立项阶段就砍掉一半没希望的项目。
6.3 二分类还是回归?由基础率决定
论文在 §6.7 观察到 BINARY×VALUE 与 M1 的胜负因数据集而异,并给出了正确的建议(“按部署预算比较,而不是按模型族标签选”),但没给机制。机制其实很清楚:
| 数据集 | 晚点率 | PROB_ONLY | M0 | 谁更强 | BINARY×VALUE | M1 | 谁更强 |
|---|---|---|---|---|---|---|---|
| SCMS | 11.49% | .237 | .146 | 分类器 | .546 | .493 | 分类器 |
| Olist | 8.11% | .150 | .144 | 略分类器 | .430 | .415 | 略分类器(CI 跨零) |
| DataCo | 57.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 排序中正严重度货运的预警窗口中位数 | 均值 |
|---|---|---|
| SCMS | 108 天 | 135.45 天 |
| DataCo | 2.00 天 | 1.88 天 |
| Olist | 22.09 天 | 22.34 天 |
ML 唯一通过闸门的场景,留给你的干预窗口只有 48 小时;而给你 108 天从容调度的采购场景,ML 帮不上忙。
DataCo 均值(1.88)小于中位数(2.00),说明它的计划时长是低基数的小整数——这与 SHAP 显示的"shipment mode + planned duration 主导"完全吻合。DataCo 的可学性,很可能来自一条接近确定性的调度规则(不同运输模式对应固定天数),而不是真正意义上的"预测困难任务被攻克"。这是个开放问题,但它只会让论文的告诫更成立,不会更弱。
7. 部署清单
论文给了 5 条,我按前面的推导补 3 条(★标注):
补充的第 3.8 条尤其值得强调:论文花了嵌套 CV 的预算去调 λ\lambdaλ(代价敏感权重),而第 4 节已经证明这个方向理论上是惰性的;同样的预算如果花在调 γ\gammaγ 上,由于 γ=0\gamma=0γ=0 与 γ=1\gamma=1γ=1 分别就是 VALUE_ONLY 和 M1,调出来的策略在构造上不劣于两个端点。 这是一次几乎免费的改进,而且完全在论文自己的框架内。
8. 几句锐评
这篇论文最大的贡献是把一个方法论姿态制度化了。
供应链 ML 领域长期存在一种默认:模型只要在预测指标上赢了,运营价值就是顺理成章的事。这篇文章把"顺理成章"拆开来验,用三个真实数据集告诉你——三次里错两次。而且它错得不含糊:Olist 的 −4.87-4.87−4.87 pp,95% CI 是 [−7.29,−2.87][-7.29, -2.87][−7.29,−2.87],整个区间在零以下。这不是"没证明有用",这是"证明了有害"。
它做得最扎实的四件事:
- 目标函数选对了。Capture@k 直接对应"预算下的队列",跳过了所有关于 AUC 该不该用的争论。
- 基线选狠了。VALUE_ONLY 是无模型、零成本、且天然是暴露度的乘法因子——这是一个几乎无法被指责为 strawman 的基线。
- SCMS 的选择偏差修正是一次真正的数据审计,恢复了被一条清洗规则整体抹除的 52% 履约渠道。
- 诚实。M2b_tuned 三处全负照登;DataCo 的 −0.04-0.04−0.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永久钉在评审看板上:它不是一个弱基线,它是被乘法结构从数学上保送进来的对手。
更多推荐



所有评论(0)