Bi-DFCL:用小流量 RCT 校准大规模营销日志
建议读法
先判断价值,再选择下钻深度
这版把正文压成 11 个大块。先看读前结论、方法主线和实验证据;如果准备复现,再看 PPL/PIFD、隐式梯度、训练 loop 和数据前提。
读前结论
这篇论文值得读。它不是又做了一个 uplift/CATE 模型,而是把优惠券/补贴系统里最麻烦的三件事放在同一个训练框架里:
- 线上真正优化的是预算约束下的分配结果,不是单个 treatment 的预测误差;
- RCT 能评价策略好坏,但样本少,直接训练模型容易高方差;
- OBS 日志量大,但里面有历史策略偏差,直接拿来优化会把旧策略的偏差学进去。
Bi-DFCL 的取舍很清楚:让 RCT 负责校准方向,让 OBS 负责提供规模。
更具体一点,它用 RCT 上的 decision loss 训练一个 Bridge Network;Bridge 决定在 OBS 上怎么生成 counterfactual pseudo-label;Target Network 在大量 OBS 上训练。上线时只保留 Target 和预算优化器。Teacher、Bridge、隐式微分这些复杂东西都留在离线训练期。
我读完后的判断:如果要在优惠券/权益个性化里落地,先做 Bi-DFCL-PPL 的简化版,不要一上来复现 PIFD + implicit differentiation 的完整版。PPL 已经足够贴近预算分配问题,也更容易排查。
1. 这篇论文到底解决什么问题
论文标题里的 large-scale marketing optimization 不是泛泛地说“营销更精准”。它指的是一个带预算约束的多 treatment 分配问题。每个用户、商家、商品或用户-商品对,都要从多个动作里选一个:不发券、发 5 元券、发 10 元券、免邮、折扣档位,等等。
模型需要同时预测两类东西:
- revenue/outcome:给这个 treatment 后能带来多少 GMV、订单、毛利或长期价值;
- cost:这个 treatment 要花多少券成本、补贴或预算。
然后优化器在总预算 $B$ 下做分配。
1.1 符号和业务含义
| 符号 | 论文含义 | 电商/优惠券语境 |
|---|---|---|
| $i\in[N]$ | 个体 | 用户、商家、商品、用户-商品对 |
| $j\in[M]$ | treatment | 不发券、券面额、折扣档位、免邮等 |
| $x_i$ | 特征 | 用户/商品/上下文特征 |
| $t_i$ | 实际接受的 treatment | 历史实际发放动作 |
| $r_{ij}$ | 潜在 revenue/outcome | GMV、订单、毛利、复购等 |
| $c_{ij}$ | 潜在 cost | 券成本、补贴、预算消耗 |
| $z_{ij}$ | 是否给 $i$ 分配 $j$ | 分配决策 |
| $B$ | 总预算 | 活动预算、日预算、人群预算 |
| $\lambda$ | 预算影子价格 | revenue 与 cost 的兑换率 |
每个样本只观测到实际 treatment 下的结果:
$$ (x_i,t_i,r_{i t_i},c_{i t_i}). $$
其他 treatment 下的 $r_{ij},c_{ij}$ 都是 counterfactual。优惠券问题的难点就在这里:你只知道用户拿了 10 元券之后发生了什么,不知道如果给 5 元券、不给券、给免邮会发生什么。
1.2 下游优化器:不是 uplift 排序,而是 MCKP
论文把问题写成 Multi-Treatment Budget Allocation Problem,形式上是 multi-choice knapsack problem:
$$ \begin{aligned} \max_{z}\quad & H(z;r,c)=\sum_{i=1}^{N}\sum_{j=1}^{M} z_{ij}r_{ij} \\ \text{s.t.}\quad & \sum_{i=1}^{N}\sum_{j=1}^{M}z_{ij}c_{ij}\le B, \\ & \sum_{j=1}^{M}z_{ij}=1,\quad \forall i\in[N], \\ & z_{ij}\in\{0,1\},\quad \forall i\in[N],j\in[M]. \end{aligned} $$
这比“预测 uplift 后排序”更接近真实投放系统。系统不是只问“给不给券”,而是要在多个档位里选,并且全局预算不能爆。
论文用 Lagrangian relaxation 近似求解。给定预算影子价格 $\lambda$ 后,每个个体独立选择 adjusted score 最大的 treatment:
$$ z^*_{ij} =\mathbf{1}\left\{ j=\arg\max_{j'\in[M]}\left(r_{ij'}-\lambda^*c_{ij'}\right) \right\}. $$
用模型预测时就是:
$$ \hat s_{ij}(\theta;\lambda)=\hat r_{ij}(\theta)-\lambda \hat c_{ij}(\theta). $$
这里有一个很实际的坑:$\lambda$ 不是普通超参,它是“多花一块钱预算值不值”的兑换率。如果 revenue 和 cost 的归因窗口不一致,或者 cost 口径和预算系统不一致,solver 会被错误的 $\lambda$ 带偏。
2. 为什么不能把 OBS 和 RCT 直接拼起来
论文的核心不是“多用一点数据”,而是如何分工使用两种数据。
| 数据源 | 优点 | 问题 | 在 Bi-DFCL 里的角色 |
|---|---|---|---|
| $\mathcal D_{\mathrm{RCT}}$ | treatment 随机,可构造无偏 decision estimator | 贵、少、高方差 | 上层:评价 Target 的决策质量,更新 Bridge |
| $\mathcal D_{\mathrm{OBS}}$ | 历史日志量大,覆盖广,低方差 | 受历史策略/选择偏差/混杂影响 | 下层:给 Target 提供大规模 prediction learning 信号 |
RCT 满足随机分配假设:
$$ (X,R(t),C(t))\perp T. $$
所以在 RCT 上,如果当前 policy 选择的 treatment 正好等于样本随机到的 treatment,就可以用这个样本的 observed outcome 来无偏估计 policy 的收益。代价是匹配率低,方差高。
OBS 不满足这个假设。历史系统可能更愿意给高潜用户发券,也可能把特定折扣投给特定城市、类目或商家。如果直接在 OBS 上最小化 decision loss,模型学到的可能不是因果效应,而是旧策略的选择偏差。
所以 Bi-DFCL 做了一个很关键的结构选择:
$$ \text{RCT controls direction; OBS provides scale.} $$
RCT 不和 OBS 平级 concat。RCT 站在上层,决定 OBS 应该怎么被利用。
3. Bi-DFCL 的方法主线
DFCL 原本可以粗略写成一个加权和:
$$ \mathcal L_{\mathrm{DFCL}}=\mathcal L_{\mathrm{DL}}+\alpha\mathcal L_{\mathrm{PL}}. $$
$\mathcal L_{\mathrm{DL}}$ 看下游分配质量,$\mathcal L_{\mathrm{PL}}$ 看预测误差。问题是:$\alpha$ 怎么调?RCT 样本少时,decision loss 方差很大;OBS 样本多时,prediction loss 又可能把有偏日志放大。
Bi-DFCL 把这个加权和改成 bi-level:
$$ \begin{aligned} \phi^*&=\arg\min_{\phi}\mathcal L_{\mathrm{DL}}\left(\theta^*(\phi);\mathcal D_{\mathrm{RCT}}\right),\\ \theta^*(\phi)&=\arg\min_{\theta}\mathcal L_{\mathrm{PL}}\left(\phi,\theta;\mathcal D_{\mathrm{OBS}}\right). \end{aligned} $$
读这个公式时不要急着看二阶梯度。先看角色:
- $\theta$ 是 Target Network,最后上线的是它;
- $\phi$ 是 Bridge Network,负责控制 OBS 上的 counterfactual pseudo-label;
- 给定 Bridge,Target 在 OBS 上训练;
- 训练出来的 Target 再拿到 RCT 上,用 decision loss 评价;
- 如果 RCT decision loss 变好,说明 Bridge 让 OBS 提供了更有用的训练信号。
这就是 “bridging observational and experimental data” 的具体含义。
3.1 三个网络,不要混淆
Target Network $\mathcal F_\theta$
Target 是上线模型。输入 $x_i$,输出所有 treatment 下的 revenue 和 cost:
$$ \mathcal F_\theta(x_i) =\left(\hat r_{i1},\ldots,\hat r_{iM},\hat c_{i1},\ldots,\hat c_{iM}\right). $$
Serving 阶段只需要:
$$ x_i\to\{\hat r_{ij},\hat c_{ij}\}_{j=1}^{M}\to\text{Lagrangian solver}\to\pi(i). $$
Teacher Network $\mathcal F_\psi$
Teacher 在 RCT 上预训练,然后固定。它提供相对无偏但高方差的 counterfactual anchor:
$$ \hat r^{\mathrm{pre}}_{ij}(\psi),\quad \hat c^{\mathrm{pre}}_{ij}(\psi). $$
它不是上线模型,也不继续被 decision loss 训练。
Bridge Network $\mathcal G_\phi$
Bridge 输出 revenue gate 和 cost gate:
$$ w^r_{ij}=\operatorname{sigmoid}\left(\mathcal G^r_\phi(i,j)\right),\quad w^c_{ij}=\operatorname{sigmoid}\left(\mathcal G^c_\phi(i,j)\right). $$
然后用 gate 混合 Teacher 与 Target,生成 counterfactual pseudo-label:
$$ r^{\mathrm{cf}}_{ij} =\hat r^{\mathrm{pre}}_{ij}(\psi)\cdot w^r_{ij} +\hat r_{ij}(\theta)\cdot(1-w^r_{ij}), $$
$$ c^{\mathrm{cf}}_{ij} =\hat c^{\mathrm{pre}}_{ij}(\psi)\cdot w^c_{ij} +\hat c_{ij}(\theta)\cdot(1-w^c_{ij}). $$
可以这样理解:
- $w\approx1$:更相信 RCT Teacher,低偏但高方差;
- $w\approx0$:更相信 Target/self-training,低方差但可能继承 OBS 偏差;
- Bridge 学的是一个由 RCT decision quality 监督出来的 bias-variance mixing rule。
Bridge 不是 propensity reweighting,也不是普通 distillation。它学的是:哪些 counterfactual 更应该听 RCT Teacher,哪些地方可以利用 OBS/Target 的低方差信号。
论文正文没有把 Bridge 输入特征写得很细。工业复现时不能只写 $\mathcal G_\phi(i,j)$,至少要明确它看到哪些 user/treatment/context 表示,否则很容易做成一个过于粗糙的全局 gate。
4. 训练目标:下层学预测,上层看决策
4.1 下层:OBS prediction loss
对 OBS 样本,只有 factual treatment $t_i$ 下的标签真实可见。下层 loss 分两块。
Factual 部分用真实标签:
$$ \mathcal L_{\mathrm{fact}} =\mathbb{E}_{i,t_i}\left[ (r_{i t_i}-\hat r_{i t_i})^2+(c_{i t_i}-\hat c_{i t_i})^2 \right]. $$
Counterfactual 部分用 Bridge 生成的 pseudo-label:
$$ \mathcal L_{\mathrm{cf}} =\mathbb{E}_{i,j\ne t_i}\left[ (r^{\mathrm{cf}}_{ij}-\hat r_{ij})^2+(c^{\mathrm{cf}}_{ij}-\hat c_{ij})^2 \right]. $$
合起来:
$$ \mathcal L_{\mathrm{PL}}(\phi,\theta;\mathcal D_{\mathrm{OBS}}) =\mathcal L_{\mathrm{fact}}+\mathcal L_{\mathrm{cf}}. $$
这里 $\mathcal L_{\mathrm{PL}}$ 显式依赖 $\phi$,因为 pseudo-label 是 Bridge 造出来的。上层改 Bridge,本质上是在改 OBS 训练 Target 的方式。
一个复现时必须盯住的细节:pseudo-label 里包含当前 Target 输出,例如
$$ r^{\mathrm{cf}}_{ij}=w^r_{ij}\hat r^{\mathrm{pre}}_{ij}+(1-w^r_{ij})\hat r_{ij}(\theta). $$
如果不处理 detach,模型可能出现“追自己”的梯度路径。论文没有把 detach 策略讲透,工程里至少要明确四件事:
- Teacher 固定,不参与 pseudo-label 梯度更新;
- pseudo-label 中 Target 分支是否
detach; - upper assumed updates 和真实 lower updates 是否共享计算图;
- Bridge gate 是否只通过 pseudo-label 影响 lower loss,还是还有其他路径。
这块比公式看起来更危险。复现失败时,我会先查这里。
4.2 上层:RCT decision loss estimator
如果完整 counterfactual 都可见,decision loss 可以写成 policy 选择后的真实收益负值:
$$ \mathcal L_{\mathrm{DL}}(\theta) =-M\cdot\mathbb{E}_{i,j} \left[z^*_{ij}(\hat r(\theta),\hat c(\theta))\cdot r_{ij}\right]. $$
但真实世界里 $r_{ij}$ 不可全观测。RCT 的作用是提供无偏估计:
$$ \mathcal L_{\mathrm{DL}}(\theta;\mathcal D_{\mathrm{RCT}}) =-\mathbb{E}_{i,t_i}\left[ \frac{1}{p_{t_i}} \cdot z^*_{i t_i}(\hat r(\theta),\hat c(\theta)) \cdot r_{i t_i} \right]. $$
论文在均匀随机场景里写成 $N/N_{t_i}$。如果线上实验不是均匀随机,实践里应该用真实 logging probability $p(t_i\mid x_i)$。
预算约束也通过 RCT/IPW 估计:
$$ \left| \mathbb{E}_{i,t_i}\left[ \frac{1}{p_{t_i}} \cdot z^\lambda_{i t_i}(\hat r(\theta),\hat c(\theta)) \cdot c_{i t_i} \right] -\frac{B}{N} \right|\le \epsilon. $$
这个 estimator 的含义很直白:只有当当前 policy 选择的 treatment 正好等于 RCT 随机到的 treatment 时,这个样本才贡献收益/成本估计。RCT 能评价任意 policy,但方差会高,就是这个原因。
5. 不可微的地方:PPL、PIFD 和隐式梯度
5.1 为什么 decision loss 不可微
下游选择里有 $\arg\max$ 和 indicator:
$$ z^*_{i t_i} =\mathbf{1}\left\{ t_i=\arg\max_{j\in[M]} \left[\hat r_{ij}(\theta)-\lambda^*\hat c_{ij}(\theta)\right] \right\}. $$
要用它更新 Bridge,就需要一个可微或近似可微的上层 signal。论文主要讨论 PPL 和 PIFD。
5.2 PPL:工程起点应该先选它
PPL 用 softmax relaxation 替代 hard indicator:
$$ z^d_{ij} =\frac{ \exp\left((\hat r_{ij}-\lambda^*\hat c_{ij})/\tau\right) }{ \sum_{k\in[M]} \exp\left((\hat r_{ik}-\lambda^*\hat c_{ik})/\tau\right) }. $$
上层 loss 写成:
$$ \mathcal L_{\mathrm{PPL}}(\theta;\mathcal D_{\mathrm{RCT}}) =-\mathbb{E}_{i,t_i}\left[ \frac{1}{p_{t_i}} \cdot z^d_{i t_i}(\theta) \cdot r_{i t_i} \right]. $$
PPL 的好处是简单、稳定、能直接 autograd,而且和给定预算 $B$ 对应的 $\lambda^*$ 对齐。缺点也明显:softmax 改变了原始离散优化 landscape,温度、score scale、$\lambda^*$ 稳定性都会影响训练。
我的建议是先从 PPL 做 baseline。PIFD 更接近 hard decision,但调试成本明显高。
5.3 PIFD:更贴近 hard decision,但更容易错
PIFD 试图估计:
$$ \frac{\partial \mathcal L_{\mathrm{DL}}}{\partial z'_{ij}}, $$
然后冻结这个梯度,把 surrogate 写成:
$$ \mathcal L_{\mathrm{PIFD}}(\theta;\mathcal D_{\mathrm{RCT}}) =\mathbb{E}_{i,j} \left[ \frac{\partial \mathcal L_{\mathrm{DL}}}{\partial z'_{ij}} \cdot z'_{ij}(\hat r(\theta),\hat c(\theta)) \right]. $$
附录的有限差分直觉是:轻微扰动预测,看 OR solver 的 decision loss 怎么变。
$$ \frac{\partial \mathcal L_{\mathrm{DL}}(r,c,\hat r,\hat c)}{\partial \hat r_{ij}} \approx \frac{ \mathcal L_{\mathrm{DL}}(r,c,\hat r+e_{ij}h,\hat c) - \mathcal L_{\mathrm{DL}}(r,c,\hat r,\hat c) }{h}. $$
逐元素扰动太慢,所以 paper 用 margin 近似。核心 score 是:
$$ a_{ij}=r_{ij}-\lambda^*c_{ij}. $$
越接近决策边界的样本,微小预测变化越可能改变 solver 输出,因此对 decision loss 的梯度影响越大。
PIFD 的问题是实现细节多:margin 接近 0 时数值不稳,符号、detach、梯度冻结、budget solver 一致性都容易出错。PPL 跑稳前,不建议先碰它。
5.4 Bridge 的上层梯度:隐式微分 + CG
Bi-level 的核心梯度是:
$$ \nabla_\phi \mathcal L_{\mathrm{DL}}(\theta^*(\phi);\mathcal D_{\mathrm{RCT}}) = \left.\nabla_\theta\mathcal L_{\mathrm{DL}}(\theta;\mathcal D_{\mathrm{RCT}})\right|_{\theta=\theta^*(\phi)} \cdot \frac{\partial\theta^*(\phi)}{\partial\phi}. $$
前一项由 PPL/PIFD 给出。后一项来自下层最优条件:
$$ \left. \frac{\partial\mathcal L_{\mathrm{PL}}(\phi,\theta;\mathcal D_{\mathrm{OBS}})}{\partial\theta} \right|_{\theta=\theta^*(\phi)}=0. $$
推导后得到:
$$ \frac{\partial\theta^*(\phi)}{\partial\phi} =-H_{\theta\theta}^{-1}H_{\phi\theta}, $$
其中
$$ H_{\theta\theta}=\nabla^2_{\theta\theta}\mathcal L_{\mathrm{PL}},\quad H_{\phi\theta}=\nabla^2_{\phi\theta}\mathcal L_{\mathrm{PL}}. $$
所以 upper gradient 可写成:
$$ \nabla_\phi \mathcal L_{\mathrm{upper}} = -\nabla_\theta\mathcal L_{\mathrm{DL}}\cdot H_{\theta\theta}^{-1}H_{\phi\theta}. $$
实际不会显式求 Hessian 逆,而是用 CG 解线性系统:
$$ H_{\theta\theta}v=b. $$
CG 只需要 Hessian-vector product:
$$ H p=\nabla_\theta\left(p^\top\nabla_\theta\mathcal L_{\mathrm{PL}}\right). $$
论文默认:
$$ k=5,\quad n_{\mathrm{cg}}=50. $$
其中 $k$ 是 assumed lower GD steps,$n_{\mathrm{cg}}$ 是 CG 迭代次数。
6. 训练流程:上线简单,训练复杂
可以把 Algorithm 1 理解成两个循环:lower update 更新 Target,upper update 更新 Bridge。
pretrain Teacher F_psi on RCT, freeze psi
initialize Target F_theta, Bridge G_phi
for OBS mini-batch B_obs:
if batch_index % k == 0:
theta_copy = copy(theta)
for step in 1..k:
pseudo labels = Bridge(Teacher, Target copy, B_obs)
theta_copy <- theta_copy - lr * grad_theta L_PL(phi, theta_copy; B_obs)
compute upper loss on RCT using theta_copy:
L_upper = L_PPL or L_PIFD
solve implicit linear system by CG
update phi
pseudo labels = Bridge(Teacher, current Target, B_obs)
theta <- theta - lr * grad_theta L_PL(phi, theta; B_obs)
最重要的工程结论:上线时没有二阶微分、没有 Bridge、没有 Teacher。 线上只需要 Target 输出 $\hat r,\hat c$,再接 Lagrangian solver。复杂性都在离线训练。
框架图

这张图看监督信号方向就够了:
$$ \mathcal D_{\mathrm{RCT}}\xrightarrow{\mathcal L_{\mathrm{DL}}}\mathcal G_\phi \xrightarrow{\text{pseudo-label rule}} \mathcal D_{\mathrm{OBS}}\xrightarrow{\mathcal L_{\mathrm{PL}}}\mathcal F_\theta. $$
RCT 不是多一份训练数据,而是控制 OBS 怎么被用。
7. 实验证据
7.1 数据集和指标
| Dataset | Features | Treatments | OBS train | RCT train | RCT val | RCT test | Metric |
|---|---|---|---|---|---|---|---|
| CRITEO-UPLIFT v2 Hybrid | 12 | 2 | 3,498,294 | 698,980 | 1,397,959 | 4,193,878 | AUCC |
| Marketing Data I | 180 | 8 | 22,201,405 | 2,220,781 | 555,014 | 2,775,976 | EOM |
| Marketing Data II | 192 | 5 | 33,815,274 | 2,017,450 | 504,362 | 2,521,813 | EOM |
Criteo 的 hybrid 构造值得注意。原始 Criteo 是 RCT,论文先用 5% 数据训练 two-stage model,再用这个模型模拟 marketing policy,并把“模拟策略 assignment 与真实随机 assignment 相同”的样本作为 OBS。这是在造一个更像真实历史投放日志的 biased OBS。论文报告这个 OBS 的 ROI 比随机数据高 82.43%,说明它确实不像随机实验。
EOM 用 RCT/IPW 估计任意 budget allocation policy 的 per-capita revenue/cost:
$$ \bar r(B)=\frac{1}{N}\sum_i \frac{1}{p_{t_i}}r_{i t_i}\mathbf{1}\{t_i=\pi_B(x_i)\}, $$
$$ \bar c(B)=\frac{1}{N}\sum_i \frac{1}{p_{t_i}}c_{i t_i}\mathbf{1}\{t_i=\pi_B(x_i)\}. $$
Baseline 分三组:RCT-only、OBS-only、RCT+OBS。这个设计比较合理,分别回答:只用无偏小样本够不够、只用有偏大样本会怎样、普通融合是否足够。
7.2 主结果
Table 2 报告 20 runs 的 mean ± std。
| Method | CRITEO AUCC | CRITEO 提升 | Marketing I EOM | Data I 提升 | Marketing II EOM | Data II 提升 |
|---|---|---|---|---|---|---|
| TSM-SL RCT | 0.7143 ± 0.0299 | -- | 1.0000 ± 0.0032 | -- | 1.0000 ± 0.0020 | -- |
| 最强 RCT-only | DFCL-DIFD 0.7441 | +4.17% | DFCL-PIFD 1.0170 | +1.70% | DFCL-PPL 1.0156 | +1.56% |
| 最强 OBS-only | DragonNet 0.7490 | +4.86% | DR-JT 1.0102 | +1.02% | DR-JT 1.0054 | +0.54% |
| 最强 RCT+OBS baseline | LTD-DR 0.7533 | +5.46% | AutoDebias 1.0175 | +1.75% | LTD-DR 1.0067 | +0.67% |
| Bi-DFCL-PPL | 0.7797 ± 0.0094 | +9.16% | 1.0277 ± 0.0024 | +2.77% | 1.0252 ± 0.0023 | +2.52% |
| Bi-DFCL-PIFD | 0.7812 ± 0.0084 | +9.37% | 1.0297 ± 0.0030 | +2.97% | 1.0249 ± 0.0018 | +2.49% |
我的解读:
- Criteo 上 Bi-DFCL 比最强 RCT+OBS baseline 还高约 2.8 个 AUCC 点,说明收益不只是来自“数据更多”;
- Marketing I/II 上 2.5% 到 3% 的 EOM 提升,在成熟营销预算系统里不小;
- PIFD 不总是赢 PPL。Data II 上 PPL 1.0252 略高于 PIFD 1.0249。复杂 surrogate 不一定更稳,PPL 更适合作为工程起点。
7.3 消融实验
论文逐步加入四个组件:Decision Loss、Bi-level、Counterfactual Labels、Implicit Differentiation。
| Decision Loss | Bi-level | Counterfactual Labels | Implicit Diff | Data I EOM | Data I 提升 | Data II EOM | Data II 提升 |
|---|---|---|---|---|---|---|---|
| ✗ | ✗ | ✗ | ✗ | 1.0000 | -- | 1.0000 | -- |
| ✓ | ✗ | ✗ | ✗ | 1.0167 | +1.67% | 1.0156 | +1.56% |
| ✓ | ✓ | ✗ | ✗ | 1.0240 | +2.40% | 1.0175 | +1.75% |
| ✓ | ✓ | ✓ | ✗ | 1.0248 | +2.48% | 1.0213 | +2.13% |
| ✓ | ✓ | ✓ | ✓ | 1.0277 | +2.77% | 1.0252 | +2.52% |
这张表比主结果更能解释方法为什么有效:
- Decision Loss 本身就带来明显收益,说明面向 downstream budget decision 训练是对的;
- Bi-level 继续提升,说明 RCT upper / OBS lower 的组织方式有额外价值;
- Counterfactual Labels 比只做动态 reweighting 更有效;
- Implicit Differentiation 不是纯理论装饰,实测也有增益。
7.4 少量 RCT 能否校正大量 OBS
Marketing Data I 的数据量实验:
| Method | OBS | RCT | OBS:RCT | EOM | 提升 |
|---|---|---|---|---|---|
| TSM-SL | 2,220,781 | 0 | -- | 0.9869 | -1.31% |
| TSM-SL | 0 | 2,220,781 | -- | 1.0000 | -- |
| TSM-SL | 22,201,405 | 0 | -- | 1.0067 | +0.67% |
| Bi-DFCL-PPL | 22,201,405 | 222,000 | 100.01:1 | 1.0190 | +1.90% |
| Bi-DFCL-PPL | 22,201,405 | 1,100,000 | 20.18:1 | 1.0258 | +2.58% |
| Bi-DFCL-PPL | 22,201,405 | 2,220,781 | 10.00:1 | 1.0277 | +2.77% |
这张表对业务最有用。小 OBS-only 低于 RCT baseline,说明有偏日志不能盲信;大 OBS-only 有提升,但有限;只用约 222K RCT 加 22.2M OBS,已经有 +1.90%。
这支持一种实际架构:保留持续小流量 RCT/exploration bucket,让它作为上层校正器,而不是要求随机流量大到能单独训练强模型。
7.5 预算鲁棒性


PPL 用的是某个预算 $B$ 对应的 $\lambda^*$,所以自然要问:它会不会只过拟合单个 budget?论文在多个 candidate budget level 下评估,Bi-DFCL 整体高于 TSM/DFCL/LTD 等方法。
这对优惠券系统很重要。活动预算、类目预算、城市预算会变化。如果模型只在一个 $B$ 上好,很难上线。论文结果支持 Bi-DFCL 有一定 budget robustness,但它仍是在有限候选预算上验证,不等于任意预算连续泛化都有保证。
7.6 训练成本和线上 A/B
附录给出的默认 MLP 结构:
| Dataset | 模型结构 | 输出解释 |
|---|---|---|
| Criteo | 64-32-32-4 | 2 个 revenue + 2 个 cost |
| Marketing I | 128-64-32-16 | 8 个 revenue + 8 个 cost |
| Marketing II | 128-64-32-10 | 5 个 revenue + 5 个 cost |
默认 warm-start 20 epochs,两个工业数据集 500 epochs,两张 A100。$k=5,n_{\mathrm{cg}}=50$ 基本够用;CG 超过 50 后收益很小。
Marketing Data II 上 500 epochs 的训练时间:
| Method | Data | Time min | Relative |
|---|---|---|---|
| TSM-SL | RCT+OBS | 42.332 | 1.00× |
| LTD-DR | RCT+OBS | 492.559 | 11.63× |
| AutoDebias | RCT+OBS | 397.886 | 9.40× |
| Bi-DFCL-PPL | RCT+OBS | 265.263 | 6.26× |
| Bi-DFCL-PIFD | RCT+OBS | 294.927 | 6.96× |
Bi-DFCL 不便宜,但比 LTD-DR/AutoDebias 快。关键是 inference 和普通 Target 一样,训练贵主要是离线问题。
线上 A/B 在美团外卖营销场景,约 790K online shops,四周,treatment 是 $\{0,5,10,15,20\}$ 折扣档位,目标是在每日预算约束下最大化订单数。
| Method | Week 1 | Week 2 | Week 3 | Week 4 | Overall improvement |
|---|---|---|---|---|---|
| TSM-SL | 1.0000 ± 0.0022 | 1.0335 ± 0.0030 | 0.9217 ± 0.0017 | 0.9720 ± 0.0048 | -- |
| LTD-DR | 1.0183 ± 0.0020 | 1.0378 ± 0.0039 | 0.9344 ± 0.0037 | 0.9723 ± 0.0070 | +0.91% |
| DFCL-PIFD | 1.0302 ± 0.0013 | 1.0436 ± 0.0020 | 0.9440 ± 0.0020 | 0.9799 ± 0.0018 | +1.80% |
| Bi-DFCL-PPL | 1.0428 ± 0.0019 | 1.0558 ± 0.0025 | 0.9582 ± 0.0019 | 0.9872 ± 0.0014 | +3.00% |
| Bi-DFCL-PIFD | 1.0470 ± 0.0021 | 1.0537 ± 0.0027 | 0.9581 ± 0.0024 | 0.9906 ± 0.0031 | +3.22% |
这是论文里最强的证据:Bi-DFCL 不只是 offline EOM 好看,它在真实预算约束折扣分配里也超过 DFCL-PIFD 和 LTD-DR。
限制也很明显:论文只披露 normalized orders,没有绝对订单量、预算消耗、ROI、profit、补贴率、长期留存,也没有分城市/类目/商家层级的异质性分析。线上结果是强证据,但不是完整业务评估。
8. 如果放到我们的优惠券/权益个性化里
最有价值的启发不是“照抄一个复杂 bi-level 模型”,而是这个训练架构:
随机实验不一定要大到能单独训练强模型。它可以作为上层评估器,持续校正如何使用海量 OBS。
映射到电商场景:
| Paper 符号 | 电商含义 |
|---|---|
| $i$ | 用户、用户-商品对、用户-店铺对、会员、商家 |
| $j$ | 不发券/券面额/折扣档位/免邮/满减门槛组合 |
| $r_{ij}$ | GMV、订单、毛利、留存、复购、平台净收益 |
| $c_{ij}$ | 券成本、补贴、商家承担成本、平台预算消耗 |
| $B$ | 活动预算、日预算、人群预算、商家预算 |
| RCT | 小流量随机优惠实验或 exploration bucket |
| OBS | 历史营销投放日志 |
| Target | 线上打分模型 |
| Solver | 预算分配器 / MCKP / Lagrangian ranking |
我会按下面顺序做原型。
Stage 1:RCT-only DFCL-PPL baseline
先别碰 OBS。需要:
- multi-head Target,输出 $\hat r_{ij},\hat c_{ij}$;
- Lagrangian solver / binary search $\lambda^*$;
- RCT/IPW EOM evaluator;
- PPL loss。
目标不是冲指标,而是确认数据口径、预算约束、EOM 指标和 solver 都是对的。
Stage 2:OBS + Teacher + fixed Bridge sanity check
先在 RCT 上训练 Teacher,OBS 上训练 Target。Bridge 不要一开始就学,先做固定 gate:
$$ w^r_{ij}=w^c_{ij}=\omega. $$
测试 $\omega\in\{0,0.25,0.5,0.75,1\}$。如果固定 gate 都不稳定,直接上 bi-level 没意义。
Stage 3:learned Bridge + explicit bi-level
每 $k$ 个 batch copy Target,做 $k$ 步 assumed lower update,用 RCT PPL 上层 loss 更新 Bridge。先不做 CG/ID,验证 Bridge 是否学到非平凡 gate。
监控:
$$ \mathbb{E}[w^r],\quad \mathbb{E}[w^c],\quad \operatorname{Var}(w^r),\quad \operatorname{Var}(w^c). $$
防止 gate collapse 到全 0 或全 1。
Stage 4:implicit differentiation + CG
PPL + learned Bridge 稳了以后,再实现 HVP、CG、damping 和 residual logging。建议记录:
$$ \|H v-b\|_2,\quad p^\top H p,\quad \|v\|_2. $$
这样能尽早发现非正定 Hessian 或数值爆炸。
Stage 5:PIFD 增强
PPL 稳定后再上 PIFD。PIFD 的第一优先级不是“实现公式”,而是验证有限差分梯度方向是否和 brute-force small batch perturbation 一致。
9. 数据前提和风险
最小字段:
| 字段 | 说明 |
|---|---|
| $x_i$ | 用户/商家/商品/上下文特征 |
| $t_i$ | 实际 treatment |
| $r_{i t_i}$ | revenue/order/gmv/profit outcome |
| $c_{i t_i}$ | coupon/subsidy cost |
| data source flag | RCT or OBS |
| $p(t_i\mid x_i)$ | RCT/OBS logging probability,至少 RCT 需要已知 |
| attribution window | outcome/cost 的归因窗口 |
| budget $B$ | 训练/评估预算或候选预算集合 |
几个风险要提前写进实验设计:
- Consistency:观测到的 $r_{i t_i}$ 确实等于潜在结果 $r_i(t_i)$;
- Positivity/overlap:重要人群和 treatment 在 RCT 中有足够覆盖;
- No interference:个体之间无干扰。折扣和商家竞争场景里,这个假设经常不完全成立;
- RCT 与 OBS 可比:时间、人群、活动机制不能漂移太大;
- 成本口径稳定:$c$ 的归因要和预算系统一致;
- 收益口径稳定:$r$ 不能只看订单而忽略毛利、退款和长期价值,除非业务目标真的只有订单。
10. 我的判断
这篇 paper 对优惠券/补贴个性化很有价值。它的贡献不是发明一个全新的因果估计器,而是把三件原本分开的事接到一起:
- 用 RCT 估计策略的决策质量;
- 用 OBS 承担大规模训练;
- 把预算优化器放进训练目标里,而不是训练后再接一个 solver。
它最值得借鉴的是架构思路:小流量随机实验可以长期存在,作为历史日志的校正器。这样比“全靠 OBS”或“全靠大规模 A/B”都更现实。
如果短期落地,我会先复现 Bi-DFCL-PPL 的简化版。PIFD、implicit differentiation 和 learned Bridge 都可以往后放。先把 RCT/IPW evaluator、预算 solver、Target multi-head 输出、PPL loss 这四块跑稳,收益会更可控。
11. 读完后保留这条公式链
11.1 下游优化器
$$ z^*_{ij}=\mathbf{1}\left\{j=\arg\max_{j'}\left(\hat r_{ij'}-\lambda^*\hat c_{ij'}\right)\right\}. $$
11.2 RCT 上的无偏决策估计
$$ \mathcal L_{\mathrm{DL}} =-\mathbb{E}_{i,t_i}\left[ \frac{1}{p_{t_i}}z^*_{i t_i}r_{i t_i} \right]. $$
11.3 PPL 可微 surrogate
$$ \mathcal L_{\mathrm{PPL}} =-\mathbb{E}_{i,t_i}\left[ \frac{1}{p_{t_i}} \frac{\exp((\hat r_{i t_i}-\lambda^*\hat c_{i t_i})/\tau)}{\sum_j\exp((\hat r_{ij}-\lambda^*\hat c_{ij})/\tau)} r_{i t_i} \right]. $$
11.4 Bridge counterfactual pseudo-label
$$ r^{\mathrm{cf}}_{ij}=w^r_{ij}\hat r^{\mathrm{pre}}_{ij}+(1-w^r_{ij})\hat r_{ij}, \quad c^{\mathrm{cf}}_{ij}=w^c_{ij}\hat c^{\mathrm{pre}}_{ij}+(1-w^c_{ij})\hat c_{ij}. $$
11.5 OBS 下层 prediction loss
$$ \mathcal L_{\mathrm{PL}} =\mathbb{E}_{i,t_i}\left[(r_{i t_i}-\hat r_{i t_i})^2+(c_{i t_i}-\hat c_{i t_i})^2\right] +\mathbb{E}_{i,j\ne t_i}\left[(r^{\mathrm{cf}}_{ij}-\hat r_{ij})^2+(c^{\mathrm{cf}}_{ij}-\hat c_{ij})^2\right]. $$
11.6 Bi-level objective
$$ \phi^*=\arg\min_\phi \mathcal L_{\mathrm{DL}}(\theta^*(\phi);\mathcal D_{\mathrm{RCT}}), \quad \theta^*(\phi)=\arg\min_\theta \mathcal L_{\mathrm{PL}}(\phi,\theta;\mathcal D_{\mathrm{OBS}}). $$
11.7 Implicit gradient
$$ \nabla_\phi\mathcal L_{\mathrm{upper}} = -\nabla_\theta\mathcal L_{\mathrm{DL}} \cdot \left(\nabla^2_{\theta\theta}\mathcal L_{\mathrm{PL}}\right)^{-1} \cdot \nabla^2_{\phi\theta}\mathcal L_{\mathrm{PL}}. $$
一句话压缩:用 RCT 上近似可微的 decision signal,通过 bi-level gradient,控制 OBS 上的 counterfactual prediction learning。