检查队列中的用户:用于管理优先级的算法?

问题描述

假设我的队列中有大量用户,我会定期根据速率限制 API向每个用户查询查询完所有用户后,将重新启动该过程。应用了速率限制,使得我无法在合理的时间内(> 1天检查所有人)检查所有用户

每次检查用户时,我都可以检查他们的上次活动时间。如果用户最近(例如最近几天)一直处于活跃状态,那么他们应该比完全没有活跃(>一年)的用户具有优先权。但是,查询不活动用户的可能性仍然应该大于0。是否存在有关如何有效管理此队列的现有研究/方法

当前,我正在考虑做一个简单的优先级队列,并让用户的初始值成为上一次活动的时间。任何时候查询用户时,他们在队列中的位置都将替换为上次激活的日期+分发中生成的某个随机数,以便最终可以检查所有用户

解决方法

经过一番思考,我决定使用贝叶斯模型来推断每个用户在事件之间的时间。我假设每个用户在一段时间内的活动量遵循泊松分布。因此,每个事件之间的时间遵循指数分布。对于速率参数,我认为它是伽马分布的。因此,后验分布是lomax分布。对于我添加到队列中的每个用户,我都从后验中取样作为他们的新优先级#。当用户有近期活动时,我将更新其用户特定的超参数,然后重新采样新的优先级值。这使我可以根据数据灵活地调整每个用户的优先级,并为我没有任何信息的新用户设置优先级。