在历史数据上测试多臂强盗

数据挖掘 机器学习 强化学习 在线学习 模拟 随机算法
2022-02-14 07:54:06

假设我想在一组历史数据的上下文设置中测试多臂老虎机算法。为简单起见,我们假设只有两条手臂 A 和 B,并假设奖励是二元的。此外,假设我有一个数据集,其中向用户展示了两个臂中的一个,并且我有奖励记录。模拟在线运行算法场景的最佳方法是什么?

我正在考虑执行以下操作:如果算法输出 A,那么我想记录奖励以便算法可以学习,为此,我们从向用户显示输出的数据集中随机均匀采样以获得此奖励。

我想知道这种方法是否合适,是否有人知道用历史数据模拟在线学习算法的更好方法,特别是多臂老虎机问题?

1个回答

您遇到的问题是,最初向用户显示 A 或 B 的策略与优化器正在学习的策略不同。您可能不知道该策略中 A 或 B 的概率(如果您知道,那将允许更微妙)。

您将需要拒绝与优化器在任何时候所做的不匹配的样本。这可能会让您挖掘的历史数据少得多,并且获得有偏见的结果的可能性。

为此,我们从向用户显示输出以获得此奖励的数据集中随机抽样。

如果我理解正确,您打算:

  1. 为输入上下文选择一个事件(包括用户数据)
  2. 使用您的学习代理生成 A 或 B 的选择
  3. 通过从“所有用户显示 A”或“所有用户显示 B”中随机抽样,找到在历史数据中呈现相同输出的另一个用户
  4. 统计采样历史记录中产生的奖励

遗憾的是,这行不通,因为在第 3 步中,您将上下文与代理的决定分开。因此,您不会测量代理的可能奖励,而是使用不同用户群并根据历史策略(您甚至可能不知道)获得奖励的代理的混合奖励。

一个不那么有偏见的方法可能是:

  1. 从历史数据中随机选择一个事件(包括用户数据)
  2. 使用您的学习代理生成 A 或 B 的选择
  3. 如果代理对该事件的选择和历史选择匹配,则计算奖励,否则从测试中丢弃该事件

如果代理的策略与大量用户的历史策略不同,您可能会在此处遇到抽样偏差问题。问题在于,由于缺乏有关奖励的数据,您正在系统地删除旧政策说一件事而新政策说另一件事的用户。因此,除非原始策略是完全随机的,否则您实际训练/评估的样本将不会随着用户群体的变化而以正确的比例被选择。重要性抽样可以帮助缓解这种情况,但前提是您知道在历史和学习代理策略中进行 A|B 选择的概率。


另一种可能性是训练一个监督模型,根据历史数据预测给定用户数据和行为的奖励,并使用它来驱动在线环境的模拟器如果您还在此测试期间训练将点击事件的概率转换为点击或无点击事件x<p(click)- 因为这是您需要在线算法学习的数据。这显然受到训练数据中监督模型的准确性的限制,但可以减少方差,因为您将获得某种历史上未发生的事件的奖励指示(您可以估计准确性的一些界限)。这是由于监督模型中的函数逼近——这与在 Actor-Critic 强化学习模型中引导 Critic 评估非常相似。