我有一个系统,根据实验优先级分配用户进行实验。每个实验都有一个权重,它决定了选择给用户的频率。例如,用户可以被分配到优先级为100的实验1,而实验2的优先级为80。一旦我们根据实验的权重选择了一个实验,我们就会检查实验的流量分配数,从而为该实验分配用户。
因此,即使实验1具有优先级100,如果它的流量分配数是80%,那么为该实验设置的用户只会被分配80%的时间。其余20%将分配给一个控制组。然而,将用户分配给该实验的实验或控制是基于实验优先级的决定。其他低优先级的实验不经常向用户展示。
如何将用户分配给基于优先级的实验,从而使低优先级的实验也能频繁地被分配,而不会被饿死。
我可以使用什么算法来确保所有的实验都被分配,而不考虑优先级;尽管高优先级的实验会更频繁地分配给用户。
发布于 2017-01-21 19:53:42
你的问题说得不清楚。让我们把它弄清楚,然后你说它是否是有用的分类。
首先,使用优先级数来分配实验的权重。让P_e成为实验e的重点。将R_e设为用户分配给实验e的概率(0 : 1)。假设n实验按任意顺序排列,e_0,e_1. e_(n-1)。R_e的一个合理公式是
R_e = P_e / sum(P_(e_i) for all i)为了决定用户被分配给哪个实验,在[0..1)中生成一个伪随机数[0..1),并选择e_k,使k是最小的整数,比如Z < sum(R_j, j = 0..k)。如果实验的数量很大,您会希望通过二进制搜索来完成这一任务。
现在您已经知道用户是哪个实验的一部分了,使用[0..1)中的第二个伪随机数[0..1)作为“掷硬币”来决定她是控制还是测试。如果T_e是流量分配,那么选择测试如果Y < T_e,否则控制。
这是一个公平的分享计划。没有饥饿。
示例
首先,如果你不能理解上面的内容,你需要学习一些数学才能成为一名有效的程序员。这是相当简单的东西。
假设实验有重量
e_0 = 20, e_1 = 100, e_2 = 80他们的总数是200,因此选择的可能性应该是:
R_0 = 20/200 = 0.1, R_1 = 0.5, R_2 = 0.4这些概率的计算结果如下:
sum(0..0) = 0.1, sum(0..1)= 0.6, sum(0..2) = 1.0这些是必须搜索的和(可能是二进制搜索)才能确定k。
如果伪随机数Z小于0.1,请选择实验e_k,其中k=0;在0.1至0.6之间,选择k=1;0.6及以上选择k=2。
现在投硬币。如果流量分配为0.75,则抛出小于0.75意味着测试用户。否则,由用户控制。
https://stackoverflow.com/questions/41782354
复制相似问题