高效的节点流量分配

时间:2018-04-20 20:04:27

标签: algorithm statistics computer-science graph-algorithm

可以将用户分配到我的网站上的一个实验。我有一个API,开发人员用它来触发每个实验的逻辑。他们调用ExperimentEngine.run()来触发实验的代码逻辑。

我希望在曝光时为每个实验分配流量,此时用户可能会接触到该实验的逻辑。我想分配流量,以便用户通常最后看到的实验不会变得饥饿。

例如,如果用户A在登录时暴露于实验A,然后转到第B页并接触实验B,则应在点暴露时将用户A分配给实验A或B.这意味着他们只会看到其中一个实验而不是两者(A或B)或两者都没有。我想弄清楚正确的算法,以便实验B(在下游并在用户看到实验A后向用户显示)不会使流量不足。我不希望所有流量都用于实验A.

所以流程如下

  • 实施实验A的用户访问页面
  • 我们决定是否将用户分配到实验A.如果用户被分配到A,用户将能够看到实验A.
  • 用户访问B页,其中实施了实验B,我们决定是否将用户分配到实验B
  • 用户只能看到分配给他们的实验。
  • 我想提出一种允许我分配流量的算法 实验无论它们在何处实施,以便流量分配有效,下游实验不会变得匮乏(即使用户最后看到实验B,他们仍然很有可能被分配给B)。

有人可以指出我正确的方向,我可以用来有效地为实验分配流量,以便实验在一个系统中及时达到样本大小和统计信息,在这个系统中,实验在暴露点和实验是在流程的不同点(早期或晚期)“暴露”给用户,并且以某种方式使得以后暴露的实验不会缺乏流量?

一种可能的算法:

  • 对于每个实验,我们决定是否使用硬币翻转基于实验的位置进行分配。
  • 如果我们得到头,则会选择符合用户标准且针对该位置实施的实验列表。
  • 根据优先系统从该列表中选择实验。 在每个位置,只有%的用户被分配到在该位置实施的其中一个实验。
  • 当我们决定分配或不分配该位置的任何实验时,不会再为该用户做出该决定。

我正在努力的是优先系统算法应该是什么? 并且这是将用户分配到在流的不同点实施的实验的最有效方法吗? 我们如何决定是否将用户分配到特定位置的实验?现在我们使用硬币翻转,但这意味着50%的用户将被分配到每个位置的实验,这不起作用。

1 个答案:

答案 0 :(得分:1)

如果您可以收集每个用户的页面访问列表,那么您可以计算出当用户访问其页面时每次运行实验的概率,每个实验的运行概率。

鉴于此,您需要确定哪些概率设置集合将实现所需的结果。如果你有一个访问页面A,B,C的用户跟踪每个运行概率为p,q,r的不同实验,则运行A的概率为p,运行B的概率为q(1-p),并且运行C的概率是r(1-q)(1-p),整体概率是所有用户轨道的总和 - 因此你不仅可以计算出作为p,q,r的函数的概率,还有关于p,q,r的这些概率的导数。

这意味着您应该能够找到一些数值分析优化程序,该程序将找到p,q,r ...的值,以最小化从这些值运行特定实验的概率与其他值之间的平方差的总和你有这些概率的目标值。

(实际上,如果你优化用户运行各种实验的概率的一些线性函数,数学可能会更好,可能会改变线性函数,直到你得到一个吸引你的结果)。