Dynamic Pricing 算法交互式教学

通过动手实验理解 Thompson Sampling、Contextual Bandit 和利润优化

1. 老虎机困境 — 探索 vs 利用

你面前有 4 台老虎机(4 种 coupon 面额),每台中奖率不同但你不知道。你有 100 次机会,怎么赚最多?

核心矛盾:探索(尝试新选项获取信息)vs 利用(用已知最好的选项赚钱)。

Demo 1: 三种策略对比
观察 纯随机(红)、Epsilon-Greedy(橙)、Thompson Sampling(绿)的累计成功次数

点击"开始实验"

2. Thompson Sampling 深入 — Beta 分布如何学习

每种 coupon 面额维护一个 Beta 分布。初始是"完全不知道"(平的曲线),每次实验后分布更新,逐渐变窄 = 越来越确定。

Demo 2: 手动运行 Thompson Sampling
调整真实转化率,然后点"发送 Coupon"观察 Beta 分布如何演化。顶部圆点 = 本轮采样值,白框 = 被选中。

5%

20%

35%

38%
观察要点:
  • 初始: 4 条曲线都很平(Beta(1,1) = "完全不知道")
  • 10 轮后: 开始分化,系统在"学习"
  • 50 轮后: 最优臂的曲线明显更窄更高
  • 200 轮后: 几乎所有决策集中在最优臂
  • 试试把 $10 和 $15 转化率设成一样 — 系统会告诉你"差不多,用便宜的"

3. Contextual Bandit — 不同客户,不同策略

Thompson Sampling 对所有客户一视同仁。但 VIP 和新客对 coupon 的响应不同。Contextual Bandit 为每种客户类型维护独立的 bandit。

Demo 3: 客户类型如何影响最优面额
点不同客户类型按钮,观察每类客户的分布独立演化。VIP 可能 $5 就够,新客可能需要 $15。
观察客户类型
查对应 Bandit
Thompson 采样
发送决策
更新该类型分布
这就是 Zenoti 固定规则做不到的: "周二打 8 折"对 VIP 是浪费(她本来就会来),对新客可能不够(需要更大激励)。Contextual Bandit 自动学会对不同人用不同策略。

4. 转化率 ≠ 利润 — 优化正确的目标

Demo 4: 调整参数看利润变化
$15 coupon 转化率最高,但利润不一定最高 — 因为折扣吃掉了利润。
$50
$25

5. 知识沉淀 — Beta 参数就是你的 IP

Demo 5: 200 次实验 → 可解释的经营规律
观察系统如何从实验数据中自动提炼出带置信度的规律,可直接用于新店。