Contextual Bandits:LinUCB、Thompson Sampling 与在线学习
Contextual bandit 是“带上下文的自适应决策实验”: 系统根据用户、场景和业务状态选择动作,只观察被选择动作的反馈,并在探索新动作与利用当前最佳动作之间持续权衡。
Contextual Bandits / LinUCB / Thompson Sampling 解读
核心问题: A/B 测试把流量固定分给几个方案,推荐系统按历史相关性排序;但金融零售的 offer、next-best-action、渠道路由、催收触达和客服分流需要在真实反馈中持续学习,同时控制探索风险。
Source Anchors
| Source | Link | 用途 |
|---|---|---|
| LinUCB / Personalized News Recommendation | https://arxiv.org/abs/1003.0146 | 理解把个性化内容推荐建模为 contextual bandit,以及 LinUCB 的探索/利用机制 |
| Vowpal Wabbit Contextual Bandits | https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/tutorials/python_Contextual_bandits_and_Vowpal_Wabbit.html | 参考 contextual bandit 的工程数据格式、action、cost/reward、probability logging |
| Microsoft SynapseML Vowpal Wabbit CB | https://microsoft.github.io/SynapseML/docs/Explore%20Algorithms/Vowpal%20Wabbit/Contextual%20Bandits/ | 参考大规模上下文 bandit 与反事实评估工作流 |
| NIST AI RMF | https://www.nist.gov/itl/ai-risk-management-framework | 把 adaptive decisioning 纳入风险识别、度量、治理和持续监控 |
核心导读
Contextual bandit 是“带上下文的自适应决策实验”: 系统根据用户、场景和业务状态选择动作,只观察被选择动作的反馈,并在探索新动作与利用当前最佳动作之间持续权衡。
它比传统 A/B 更动态,比完整强化学习更可控。生产价值不在算法名字,而在 action catalog、eligibility policy、exploration budget、propensity logging、offline policy evaluation、guardrail、reward attribution 和回滚机制是否完整。
问题定义
传统 A/B 测试回答:
哪个方案平均更好?
Contextual bandit 回答:
在这个上下文中,现在应该尝试哪个动作,
同时如何保留学习能力并限制探索风险?
金融零售常见动作:
| 场景 | Context | Action | Reward |
|---|---|---|---|
| 信用卡 offer | 客户画像、消费、风险等级、渠道偏好 | 返现、免息、积分、无 offer | 增量消费、风险调整收益、投诉成本 |
| 催收触达 | 逾期阶段、历史响应、联系偏好、投诉风险 | 短信、电话、App、宽限、人工 | 回款、投诉、成本、复逾 |
| 客服路由 | 问题类型、客户等级、情绪、队列状态 | 机器人、人工、专家队列、回拨 | 解决率、AHT、SLA、满意度 |
| 欺诈干预 | 风险分数、金额、设备、商户、历史 | 放行、强认证、人工、拒绝 | 避免损失、误拦成本、客户摩擦 |
| 零售促销 | 门店、SKU、库存、价格、天气、节假日 | 折扣、捆绑、陈列、无动作 | 毛利、库存周转、缺货风险 |
核心边界是: 哪些动作可以探索,哪些人群不能探索,哪些 reward 不能单独优化。
核心原理
Multi-armed bandit 的基础问题:
每次从多个动作中选一个,只看到被选动作的 reward,
长期目标是最大化累计 reward。
Contextual bandit 加入上下文:
observe context x
choose action a
observe reward r(a)
update policy pi(a | x)
与监督学习的差异:
| 维度 | 监督学习 | Contextual Bandit |
|---|---|---|
| 标签 | 通常有完整标签 | 只观察被选择动作的反馈 |
| 数据来源 | 静态历史数据 | 由策略本身生成 |
| 核心风险 | 过拟合、偏差 | 探索风险、选择偏差、反事实缺失 |
| 评估方式 | train/test split | counterfactual / off-policy evaluation |
| 产品形态 | 预测或排序 | 自适应动作选择 |
基本策略:
| 策略 | 机制 | 适用边界 |
|---|---|---|
| Epsilon-Greedy | 大多数时候选当前最佳,少数时候随机探索 | 低风险动作、快速 baseline、早期探索 |
| LinUCB | estimated reward + uncertainty bonus | 线性特征结构较强、需要可解释探索分数 |
| Thompson Sampling | 从后验分布抽样,按抽样后的最优动作执行 | 需要更自然的不确定性驱动探索 |
LinUCB 的产品含义是“不确定但可能有价值的动作获得探索机会”;Thompson Sampling 的含义是“探索概率随后验不确定性自然变化”。两者都比固定 epsilon 更重视不确定性结构。
系统/架构模型
Bandit decision architecture:
context service
-> action catalog
-> eligibility and policy guardrail
-> exploration budget manager
-> bandit policy service
-> action execution
-> reward attribution
-> counterfactual log store
-> offline policy evaluation
-> policy review and rollout
关键组件:
| 组件 | 职责 |
|---|---|
| Context service | 只提供当时可用、权限允许、可审计的上下文 |
| Action catalog | 定义动作、成本、风险、适用人群、禁用条件和副作用 |
| Eligibility policy | 在 bandit 前排除不合规、高伤害或不可用动作 |
| Exploration budget | 控制探索比例、人群、时间窗、渠道和风险边界 |
| Policy service | 执行 LinUCB、Thompson Sampling 或其他策略 |
| Guardrail | 拦截不公平、越权、高投诉、高摩擦或超预算动作 |
| Reward service | 管理延迟 reward、归因窗口、多目标 reward 和惩罚 |
| OPE lab | 用 IPS、DR、replay 等方法评估候选策略 |
| Review workflow | 审核策略变更、异常、回滚、人群影响和证据 |
关键机制与取舍
| 取舍 | 判断方式 |
|---|---|
| A/B vs Bandit | A/B 适合固定方案平均效果,bandit 适合持续个性化和探索 |
| Bandit vs Reinforcement Learning | Bandit 不建模长期状态转移,更简单可控;RL 适合长期序列决策但治理复杂 |
| 探索收益 vs 客户伤害 | 高摩擦、高风险动作应禁探或只在受控人群探索 |
| 短期 reward vs 长期价值 | 点击、接受率不能单独优化,要纳入投诉、坏账、流失和公平性 |
| 全局策略 vs 分层策略 | 客群、渠道、地区、风险等级不同,探索预算应分层 |
| 快速学习 vs 稳定运营 | 策略频繁变化会造成运营不可解释,需要 cadence、版本和回滚 |
Bandit 的最大工程要求是 propensity logging。每次决策必须记录当时选择该动作的概率,否则后续很难评估“如果当时用新策略会怎样”。
最低日志:
| 字段 | 说明 |
|---|---|
| event_id | 决策事件 |
| timestamp | 决策时间 |
| context_snapshot | 当时可用上下文 |
| available_actions | 当时可选动作集合 |
| chosen_action | 实际选择动作 |
| action_probability | 该动作被当前策略选中的概率 |
| reward_observed | 观测到的结果 |
| reward_delay | reward 延迟 |
| policy_version | 策略版本 |
| guardrail_result | 风险、合规、公平性检查结果 |
证据与控制
Offline Policy Evaluation 用历史日志估计新策略效果:
| 方法 | 核心思想 | 风险 |
|---|---|---|
| Inverse Propensity Scoring | 用选择概率修正历史样本偏差 | 高方差,低概率样本权重大 |
| Self-Normalized IPS | 对 IPS 权重归一化 | 可能引入偏差 |
| Doubly Robust | 结合 reward model 和 IPS | reward model 和 propensity 都要治理 |
| Replay evaluation | 只在新旧策略选择一致时计入 | 数据利用率低 |
上线门禁:
- 日志必须包含 propensity、available actions、policy version 和 reward attribution。
- 新策略不能大幅超出历史支持范围。
- OPE 必须按客群、渠道、地区、风险等级、产品线分层。
- 不能只看平均 reward,还要看投诉、误伤、公平性、长期价值和运营容量。
- 探索预算、禁探人群、kill switch 和 rollback criteria 必须先定义。
高风险控制:
| 风险 | 控制 |
|---|---|
| Consumer harm | action risk tier、禁探人群、人工审批 |
| Fairness drift | 分层监控、最低服务保障、公平性 guardrail |
| Reward hacking | 多目标 reward、惩罚项、长期 holdout |
| Feedback delay | reward maturity window、延迟结果重估 |
| Selection bias | propensity logging、强制小预算探索 |
| Policy instability | 版本、cadence、change log、rollback |
AI产品/金融零售场景
Adaptive Offer
Offer 动作必须包含成本、风险、适用条件、客户保护限制和禁止人群。Reward 不能只是接受率,应是风险调整收益,扣除投诉、坏账、补贴成本和长期价值损失。探索预算应按客群和渠道分层。
催收 Next-Best-Action
动作包括短信、电话、App、宽限、人工。高投诉风险、脆弱客户或法定联系限制人群不应进入自由探索。Reward 要延迟成熟,不能用当天回款直接代表长期效果。
客服路由
Bandit 可以在机器人、人工、专家队列、回拨之间学习路由策略。Guardrail 应覆盖 SLA、复杂客户满意度、重复来电、升级率和人工队列负载。
欺诈干预
放行、强认证、人工和拒绝是高风险动作。这里 bandit 只能在严格 policy guardrail 内工作,且 reward 要同时计算避免损失、误拦成本、客户摩擦和投诉。
反模式
- 把 bandit 当作“更聪明的推荐模型”,没有探索预算和反事实日志。
- 不记录 action_probability,导致无法做可靠 OPE。
- Reward 只看短期点击、接受或回款,忽略投诉、坏账、流失和公平性。
- 对所有人群、所有动作使用同一探索策略。
- 让高风险动作自由探索,缺少 eligibility policy 和禁探人群。
- 新策略直接全量上线,没有 IPS、DR、replay 或小流量 ramp。
- 策略版本频繁变化但没有 change log、监控和回滚。
最终心智模型
Contextual bandit 是受控探索的决策系统,不是静态预测模型。它的核心资产不是算法参数,而是完整的决策日志: 当时有哪些上下文、哪些动作可选、为什么选了这个动作、选择概率是多少、后来得到了什么 reward。
判断一个 bandit 系统是否成熟,只看三件事: 探索是否被风险边界约束,日志是否足以做反事实评估,reward 是否代表长期净价值而不是短期行为。满足这三点,bandit 才能从实验技巧变成金融零售中的自适应决策架构。
SOTA 状态标注 (2026-07-01)
本篇属于第二、三遍深读池(参考架构/深读笔记),未列入 12 周主线必读。时效基线为写作时点;引用前请按 CLAUDE.md 全局时效性硬规则复查最新进展。模块级 SOTA 对照见 docs/AI_SYSTEMATIC_LEARNING_ROADMAP_2026.md 各周「2026 SOTA 对照」行与文末「SOTA 检查」。