我想测试一下CB的电子商务任务:个人推荐(比如“最后一次购买的机会”、“相似的位置”、“消费者推荐”、“畅销书”等)。我的任务是对它们进行排序(在推荐列表中相关性更高的问题)。
因此,这里有5种可能的报价。我在没有使用任何模型的情况下收集了一些历史数据:上下文(用户和网络会话功能),动作id (我的5个优惠之一),奖励(如果用户点击了这个优惠,1,0-没有点击)。因此,我有N个用户和5个已知奖励的优惠,在我的历史数据中总共有5*N行。
例如:
1:1:1 | user_id:1 f1:... f2:... 2:-1:1 | user_id:1 f1:... f2:... 3:-1:1 | user_id:1 f1:... f2:...
这意味着用户1已经看到了3个优惠(1,2,3),1个优惠的成本等于1(没有点击),用户在优惠2和3上点击(成本为负->奖励为正)。概率等于1,因为所有的报价都已显示,并且我们知道奖励。
全局任务是提高CTR。我想使用这些数据来训练CB,然后通过探索/开发策略来改进模型。我将此数据中的概率设置为1(正确吗?)。但接下来,我想根据奖励来设置报价的顺序。
我应该在大众CB中使用这个warm start吗?在不使用CB的情况下,这是否可以正确处理收集的数据?也许你可以在CB中为这个数据和任务提供更多相关的方法?
非常感谢。
发布于 2020-06-16 05:36:23
如果只有5个可能的报价,并且您(如上所述)拥有以下形式的数据:“我有N个用户和5个已知奖励的报价,在我的历史数据中总共有5*N行。”然后,您的历史数据是受监督的多标签数据,并且将应用热启动功能;请确保您使用cost-sensitive version来适应您的历史数据的多标签方面(即,有多个报价将导致点击)。
在不使用CB的情况下,这是否可以正确处理收集到的数据?
由于every action-reward是为数据集中的每个用户指定的,因此您只需确保用户样本代表您关心的总体。
也许你可以在CB中为这个数据和任务提供更多相关的方法?
第一段以"if“开头,因为更典型的情况是1)有很多可能的服务,2)用户只看过其中的一小部分。
在这种情况下,您得到的是退化日志记录策略和多重奖励的组合。如果有k个可能的操作,但每个用户历史上只看到过n<=k,那么您可以尝试为每个用户创建n行。从理论上讲,这不一定有效,但在实践中可能会有所帮助。
开箱即用:更改data
如果您拥有的数据是作为运行现有策略的结果收集的,那么另一种选择是开始随机化该系统所做的决策,以便收集符合CB的数据集。例如,使用您当前的系统在96%的时间内选择“最佳”动作,在4%的时间内随机选择其他4个动作中的一个,并将概率与奖励一起记录下来( 0.96或0.01取决于它是否被认为是最好的),然后为大众建立一个适当的CB风格的训练集。有了这一点,你还可以反事实地估计你的当前保单和大众生成的保单的价值,只有在大众获胜时才会切换到大众。
实现最后一段的最快方法就是开始使用APS。
https://stackoverflow.com/questions/61916154
复制相似问题