【问题标题】:Efficient node traffic allocation高效的节点流量分配
【发布时间】:2018-04-20 20:04:27
【问题描述】:

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

我想在用户可能接触到该实验的逻辑时,将流量分配给每个实验。我想分配流量,以便用户通常最后看到的实验不会被饿死。

例如,如果用户 A 在登录时接触到实验 A,然后转到页面 B 并接触到实验 B,则用户 A 应该在接触时被分配到实验 A 或 B。这意味着他们只会看到其中一个实验,而不是两者(A 或 B)或两者都看不到。我想找出正确的算法,以便实验 B(在下游并在用户看到实验 A 后显示给用户)不会因流量不足而感到饥饿。我不希望所有流量都用于实验 A。

所以流程如下

  • 用户访问了实施实验 A 的页面 A
  • 我们决定是否将用户分配给实验 A。如果将用户分配给 A,用户将能够看到实验 A。
  • 用户访问实施了实验 B 的页面 B,我们决定是否将用户分配给实验 B
  • 用户只能查看分配给他们的实验。
  • 我想提出一种算法,允许我将流量分配给 实验,无论它们在哪里实施,这样流量分配是有效的,并且下游实施的实验不会被饿死(即使用户最后看到实验 B,他们仍然很有可能被分配给 B)

有人可以向我指出正确的方向,我可以使用该算法有效地将流量分配给实验,以便在实验在暴露点分配流量的系统中,实验达到样本量和统计数据及时显示,并且哪些实验在流程的不同点(早期或后期)“公开”给用户,并且以某种方式使以后公开的实验不会因流量不足而受到限制?

一种可能的算法:

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

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

【问题讨论】:

标签: algorithm statistics computer-science graph-algorithm


【解决方案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... 的值,以最小化从这些值运行特定实验的概率与其他任何值之间的平方差之和您拥有的那些概率的目标值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2016-12-11
    • 2010-09-18
    • 2021-10-03
    • 2021-12-07
    • 2019-07-09
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多