申请体验
冠军评选 · 方法论深度解析

模型预测得准,不代表能拿来定预算:冠军模型为什么要分三个维度评选

一个模型在预测分数上排名第一,不代表它的归因结果可以拿来决定预算怎么分。预测准和归因可信是两个独立的问题,混在一起评估会让错误的模型被选中。

SparkX 团队2026 年 10 月 20 日约 19 分钟阅读
目录
一个预测得准却被排除的案例 为什么«哪个模型预测最准»不是个好问题 三个维度,三套独立评分 归因基准不同:增量 ROI 与 SHAP 贡献度 为什么 SHAP 不能直接换算成 ROI 决策分数怎么算:稳定性和校准的权重 贝叶斯收敛:一个写死的硬门槛 Holdout 对齐:不能拿不等长的平均数来比 可解释性为什么也要单独评分 四个常见错误 选冠军模型前的检查清单


一个预测得准却被排除的案例

假设某团队对比了六个引擎跑出的 MMM 模型:Ridge、PyMC、Stan、Meridian、Nevergrad 和 LGBM。在共同 holdout 窗口上按 MAPE 和 R² 排序,LGBM 的预测分数最高。如果评选标准只有一个——哪个模型预测最准——团队很容易就把 LGBM 定为冠军,用它输出的渠道归因去调预算。

但在 SparkX 的评分协议里,LGBM 会被自动排除在决策排行榜之外。原因不是它预测不准,恰恰相反,它的预测分数可以是六个模型里最高的。问题在于它输出的渠道贡献度来自 SHAP,而 SHAP 值和需要拿来定预算的增量 ROI,是两种在数学上不同质的量。第一名预测器和可以被采纳的决策依据,并不是同一件事。

说明

本文的案例均为说明原理所构造的假设场景,不对应任何客户的真实数据。文中引用的权重、阈值和打分公式来自 SparkX 评分引擎的实际实现,用于说明评选机制本身。

为什么«哪个模型预测最准»不是个好问题

把冠军评选归结为单一排名,隐含的前提是预测准、归因准、可以拿来决策这三件事天然连在一起。但它们是三个独立的问题:

问题回答的是什么哪里可能出错
预测准不准模型在没见过的时间段上能否复制出接近真实的销量或转化过拟合、特征泄露、训练集与测试集分布不一致
归因准不准把整体销量拆解到各渠道的增量贡献是否接近真实因果效应共线性、先验设定不合理、模型本身不输出因果量(如 LGBM 的 SHAP)
能不能拿来决策归因结果是否稳定、可校准、贝叶斯模型是否收敛参数区间过宽、MCMC 未收敛、没有用 lift test 校准过

一个模型可以在预测准上得分很高,同时在归因可信度上得分很低(LGBM 就是典型例子);也可以在归因上看上去合理,但因为贝叶斯链没收敛而不具备被采纳的资格。把三个问题捆在一个分数里,等于用其中一个问题的标准来回答其他两个问题。

三个维度,三套独立评分

SparkX 的评分协议把上述三个问题拆成三个独立的分数,每个分数有自己的入选门槛,分别选出各自的冠军——三个冠军可以是三个不同的引擎:

维度回答什么问题入选门槛
prediction_score模型对整体销量或转化的预测准不准存在对齐的共同 holdout;否则仅作参考,不具备被推荐资格
decision_score归因结果是否稳定到足以拿来定预算预测合格 + 贝叶斯收敛 + 参数稳定性达标 + 归因基准可比
interpretation_score模型结果能不能被人理解、解释、汇报预测合格 + 归因基准可比

关键在于:这三个分数并不是同一套指标的三种加权方式,而是三个各自有门槛、门槛通过才能进入排名池的独立排名。一个模型可以在 prediction 池里排第一,却不在 decision 池的入选范围内;也可以同时入选三个池,但在每个池里排名不同。最终给出的 采用建议banner,只基于 decision_champion——因为预算决策需要的是可以被采纳的归因结果,而不是单纯的预测精度排行。

归因基准不同:增量 ROI 与 SHAP 贡献度

决策分数和可解释性分数都要求 归因基准可比,这个门槛背后是一个容易被忽略的区分:不同引擎输出的渠道贡献度,衡量的并不是同一件事。SparkX 把归因基准分为三类:

归因基准覆盖引擎衡量的是什么
incremental(增量)Ridge、Nevergrad、SparkX、SparkX-Expert、PyMC、Stan、Meridian、Robyn相对于该渠道投放为零这个反事实基准,销量会减少多少
shapLGBM相对于模型在该样本上的平均预测值,各特征让预测偏离了多少
unknown未识别或自定义引擎不参与跨引擎归因对比

属于 incremental 类的引擎,无论算法差异多大,回答的都是同一个问题:拿掉这个渠道的预算,销量会少多少。这个共同基准是跨引擎比较 ROI、合并预算建议的前提。LGBM 的 SHAP 值回答的是另一个问题,和增量 ROI 不是同一个量,因此在决策和可解释性两个维度上都被标记为归因基准不可比,不会和其他引擎的 ROI 放在同一张表里比较。

为什么 SHAP 不能直接换算成 ROI

SHAP(Shapley Additive exPlanations)回答的是一个关于单个样本预测值的问题:对于这一天、这一周的预测结果,各个特征相对于模型的平均预测偏离了多少。它是 预测值相对于期望预测的偏离量,而不是如果完全不投放这个渠道,销量会少多少的零媒体反事实。

这两者在大多数时候方向一致——投放多的渠道,SHAP 贡献度通常也高——但它们不是同一个量,差异在边界情况下会被放大。例如一个渠道的投放长期保持在较高水平,模型学到的期望预测本身已经把这部分投放内化为基准的一部分,这个渠道的 SHAP 值会偏低,但如果真的把它降到零,销量的下降可能远大于 SHAP 显示的贡献度。把 SHAP 值直接乘以某个系数换算成增量 ROI,相当于用一个关于局部偏离的度量去回答一个关于全局反事实的问题,换算结果可能方向对、量级错,也可能方向都不对。

这也是为什么评分协议不是给 LGBM 的归因打一个比较低的分数,而是直接把它标记为归因基准不可比——不是不够好,而是衡量的不是同一件事,因此不参与跨引擎的 ROI 合并排名,也不会被 decision_champion 或 interpretation_champion 选中。

决策分数怎么算:稳定性和校准的权重

decision_score 的构成,体现了 能不能拿来定预算比预测好不好更看重稳定性:

decision_score = prediction_score × 0.45 + parameter_stability × 0.30 + 校准加分 + 收敛加分
  1. 预测分数权重 45%:预测准不是决策分数的全部,但仍是基础权重最高的一项——归因建立在一个预测能力尚可的模型之上。
  2. 参数稳定性权重 30%:由两部分各占一半构成:ROI 置信区间的相对宽度(区间越窄,相对稳定性越高),以及 holdout 在不同预测窗口上的 MAPE 波动幅度(跨窗口越一致,越稳定)。
  3. 校准加分:如果归因结果用 lift test 或类似的实验数据做过校准,加 15 分;没有校准过的,只加 5 分——校准与否的差距被显著拉大。
  4. 贝叶斯收敛加分:对需要做贝叶斯诊断的引擎(PyMC、Stan、Meridian、SparkX-Expert),收敛诊断通过加 10 分;未通过则扣 50 分——这是一个非常重的惩罚,足以把一个预测分数很高的模型直接挤出决策排名。

50 分的收敛惩罚不是调参调出来的数字游戏,而是在明确表态:一个贝叶斯模型如果链没有收敛,它给出的 ROI 置信区间本身就不可信,不管预测分数有多高,都不应该被当作决策依据。

贝叶斯收敛:一个写死的硬门槛

对 PyMC、Stan、Meridian、SparkX-Expert 这类依赖 MCMC 采样的引擎,收敛诊断是进入决策排名前必须通过的硬门槛,分三档:

诊断结果判定条件后续处理
未收敛(硬性失败)R-hat > 1.1,或有效样本数 ESS < 100,或散度(divergence)次数 > 50收敛加分改为扣 50 分,基本退出决策排名
带警告通过R-hat > 1.05,或 ESS < 400,或散度次数 > 10标记为 带警告通过,仍可入选但附带提示
干净通过以上三项均在更严格的阈值内获得满额的 10 分收敛加分

R-hat 衡量多条独立采样链是否收敛到同一个分布,ESS 衡量采样链在去除自相关后等效的独立样本数量,散度次数反映采样器在参数空间里是否遇到了几何上难以探索的区域。三项任意一项触发硬性阈值,就认定链没有收敛——此时模型给出的参数区间和置信区间本身就不可靠,无论预测分数多高,都不足以支撑一个预算决策。

Holdout 对齐:不能拿不等长的平均数来比

六个引擎各自训练、各自验证,天然会用不同长度的 holdout 窗口——有的引擎默认验证最近 4 周,有的默认 8 周。如果直接拿各引擎自报的 MAPE 数字横向比较,比的其实是不同时间跨度上的误差,不是同一件事。

SparkX 的做法是只取所有已完成训练的模型在 horizon_days 上的交集,作为跨引擎比较的共同 holdout 窗口。如果六个引擎里有一个用的验证窗口和其他五个完全不重叠,系统不会把它的指标硬凑进平均数,而是直接判定不存在共同窗口,跳过这次跨引擎的 holdout 推荐——宁可少给一个结论,也不用不等长的序列拼出一个似是而非的平均值。

和上周文章的关联

这里的 共同窗口和上周讨论的渠道 ROI 随时间漂移是两个不同层面的问题:漂移讨论的是同一个模型在不同训练窗口上估计出不同的系数;这里讨论的是不同模型用不同验证窗口时,它们的误差指标能不能放在一起比较。

可解释性为什么也要单独评分

interpretation_score 的构成同样是三部分加权:

interpretation_score = prediction_score × 0.30 + 引擎可解释性基础分 × 0.55 + parameter_stability × 0.15

其中 引擎可解释性基础分是一张和具体数据无关、按引擎类型写死的分值表,反映的是方法本身的透明程度,不随某一次训练结果波动:

引擎可解释性基础分原因
Ridge100线性模型,系数直接对应渠道弹性,结构最透明
PyMC88贝叶斯线性结构,附带可解释的不确定性区间
Stan / Meridian85同属贝叶斯层级模型,结构可读但实现更复杂
Nevergrad76黑盒优化器包裹线性响应曲线,结构部分可读
SparkX-Expert72融合多种先验与专家规则,结构复杂度更高
SparkX68时变参数结构,系数随时间变化,解释需要额外上下文
LGBM45树模型本身是黑盒,依赖 SHAP 近似解释,基础分最低

这张表的分值是引擎固有的,不会因为某一次训练数据质量好就变高。一个模型即使预测分数很高、参数也足够稳定,如果本身是黑盒结构,可解释性分数的上限也会被这个基础分锁住——这是在提醒:能不能向业务方讲清楚为什么这么分配预算,和预测准不准,是两件需要分别评估的事。

四个常见错误

选冠军模型前的检查清单

在采纳某个模型的归因结果去定预算前,先确认
  • 区分清楚这次要回答的是预测准不准、归因准不准,还是能不能拿来决策——用对应维度的排名,不要用预测排名代替决策排名
  • 确认候选模型的归因基准是增量 ROI 还是 SHAP 等近似解释,SHAP 类结果不直接换算成预算分配依据
  • 对贝叶斯类引擎检查 R-hat、ESS、散度次数等收敛诊断,链未收敛时不采用其参数区间
  • 检查归因结果是否用 lift test 或类似实验数据做过校准,而不是仅凭模型自身的后验区间
  • 跨引擎比较误差指标前,确认各模型使用的验证窗口存在真实的时间交集,不用不等长序列拼出的平均数
  • 如果需要向业务方解释预算建议的原因,优先参考可解释性分数较高、结构透明的模型,而不是预测分数最高但是黑盒结构的模型
← 上一篇
渠道 ROI 为什么会随时间漂移:从结构漂移到广告疲劳
返回博客 →
所有文章

本站使用 Cookie 和类似技术以提升体验并分析流量。继续浏览即表示同意。详见隐私政策。