Guardrailed CATE-NBA
Skill-Guardrailed-CATE-NBA · 06-增长模型
1. 解决的问题
光算出每个用户的增量效应(CATE)还不够——真实业务有预算上限、有高净值用户保护、有每天不能无限制打扰用户的体验红线。Guardrailed CATE-NBA 打通了"预测→决策"的最后一公里:三层漏斗把因果估算的结果直接转化为带约束的最优行动名单。
2. 核心算法逻辑
光算出每个用户的增量效应(CATE)还不够——真实业务有预算上限、有高净值用户保护、有每天不能无限制打扰用户的体验红线。Guardrailed CATENBA 打通了"预测→决策"的最后一公里:三层漏斗把因果估算的结果直接转化为带约束的最优行动名单。
3. 业务应用场景
业务问题 数据库里 80 万 90 天未下单的沉默用户,运营想全量发 50 元满减券激活,但财务要求总促销预算不超过 1 万美元,且担心本来明天就要下单的老客"白吃"优惠。
| 字段 | 说明 | 格式 | |------|------|------| | `user_id` | 用户唯一标识 | string | | `recency_score` | 近期活跃得分(最近购买时间倒序归一化)| [0,1] float | | `rfm_score` | RFM 综合得分(Recency + Frequency + Monetary)| [0,1] float | | `days_since_last_order` | 距上次下单天数 | int | | `historical_orders` | 历史订单数 | int | | 历史实验数据 | 含处理/对照标签
预期产出 - 每个用户对每种行动的增量得分(CATE 矩阵) - 经护栏过滤后的行动分配名单:A群/满减券、B群/免费小样、C群(铁粉或死粉)/不触达 - 总成本不超过预算的最优触达方案
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- 难度 3/5:三层架构中,CATE 估算(Layer 1)可先用 Mock 或简单 T-Learner 快速验证,护栏规则(Layer 2)直接对应业务规则文档,贪心背包(Layer 3)无需引入额外依赖(纯 pandas + numpy 实现),整体上线路径清晰。唯一门槛是需要高质量的历史 A/B 实验数据作为 CATE 训练集。
- 优先级 4/5:论文已通过线上 A/B 测试验证营收显著正增长;母婴出海高获客成本场景下,精准促活对 LTV/CAC 比值的改善尤为关键;且护栏机制天然满足财务合规要求,落地阻力小。
- 量化依据:文献报告在对照组(随机发券)基础上,处理组新增 GMV 显著(p < 0.05),资源消耗降低约 40%。
7. 代码模板
代码块数量:2 · 路径:未检测到
from model import (
Action, GuardrailConfig, GuardrailedCATENBA, generate_mock_users
)
# 定义营销行动选项
actions = [
Action("coupon_20", "满减券20元", unit_cost=20.0),
Action("coupon_50", "满减券50元", unit_cost=50.0),
Action("free_sample", "免费小样", unit_cost=8.0),
]
# 配置护栏参数
cfg = GuardrailConfig(
cannibalization_base_prob_threshold=0.70, # 高净值用户门槛
cannibalization_cate_discount=0.50, # 食人化打折系数
total_budget=10_000.0, # 总预算(元)
max_actions_per_user=1, # 每人最多触达1次
min_cate=0.02, # 最低增量门槛
)
# 加载用户特征(实际替换为业务数据)
X = generate_mock_users(n=50_000)
# 运行完整流水线
model = GuardrailedCATENBA(actions=actions, config=cfg)
result = model.run(X)
# 查看分配结果
print(f"触达用户: {len(result.assignments):,}")
print(f"总成本: {result.total_cost:,.0f} 元")
print(f"预期增量: {result.total_expected_uplift:.3f}")
print("分配明细:", result.summary)
# 导出行动名单
result.assignments.to_csv("action_list.csv", index=False)
8. 论文来源
- 2512.19805