我有一个系统根据实验优先级编号为用户分配实验。每个实验都有一个权重,用于确定选择向用户显示的频率。例如,可以将用户优先级100分配给优先级为100且优先级为80的实验2。一旦我们根据其权重选择实验,我们会检查实验的流量分配编号,以便将用户分配给该实验。
因此,即使实验1的优先级为100,如果其流量分配数为80%,则为该实验设置的用户将仅在80%的时间内分配给该实验。其他20%将分配给对照组。但是,将用户分配到实验或控制该实验的决定是基于实验优先级。其他低优先级的实验并不常见于用户。
如何根据优先级为用户分配实验,以便经常分配低优先级实验并且不会饿死。
我可以使用什么算法来确保所有实验都被分配,而不管优先级如何;虽然高优先级的实验将更频繁地分配给用户。
答案 0 :(得分:0)
您的问题陈述不明确。让我们解决它,你说它是否是一个有用的排序。
首先,使用优先级编号对实验进行权重分配。让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)
要确定将用户分配到哪个实验,请在Z
中生成伪随机数[0..1)
,然后选择e_k
,使k
为最小整数Z < sum(R_j, j = 0..k)
Y
1}}。如果实验数量很大,您需要通过二分查找来完成此操作。
现在你知道用户属于哪个实验,在[0..1)
中使用第二个伪随机数T_e
作为“抛硬币”来决定她是否控制或测试。如果Y < T_e
是流量分配,则选择测试e_0 = 20, e_1 = 100, e_2 = 80
,否则控制。
这是一个公平的股票计划。没有饥饿。
示例强>
首先,如果你无法理解上面的内容,你需要学习一些数学才能成为一名有效的程序员。这很简单。
假设实验有权重
R_0 = 20/200 = 0.1, R_1 = 0.5, R_2 = 0.4
他们的总和是200,所以选择的概率应该是:
sum(0..0) = 0.1, sum(0..1)= 0.6, sum(0..2) = 1.0
这些概率的运行总和如下所示:
k
这些是必须搜索的总和(可能通过二分搜索)来确定npm install --save-dev @types/core-js
。
如果伪随机数Z小于0.1,则选择实验e_k,其中k = 0;在0.1和小于0.6之间,选择k = 1; 0.6及以上选择k = 2。
现在做硬币投掷。如果流量分配是0.75,则小于0.75的折腾意味着测试用户。否则用户就是控制权。