我正在运行类似于以下内容的 python 代码:
import numpy
def get_user_group(user, groups):
if not user.group_id:
user.group_id = assign(groups)
return user.group_id
def assign(groups):
for group in groups:
ids.append(group.id)
percentages.append(group.percentage) # e.g. .33
assignment = numpy.random.choice(ids, p=percentages)
return assignment
我们正在针对数以万计的用户在野外运行它。我注意到分配不尊重实际的组百分比。EG 如果我们的百分比是 [.9, .1],我们注意到每小时之间的分配是一致的,分别为 80% 和 20%。我们已经确认choice
函数的输入是正确的,并且与实际行为不匹配。
有谁知道为什么会发生这种情况?是因为我们使用的是全局 numpy 吗?一些组将在 [.9, .1] 之间划分,而其他组将在 [.33,.34,.33] 等之间划分。不同组的组是否可能相互干扰?
我们在多个节点上的 python 烧瓶 Web 应用程序中运行此代码。
关于如何获得可靠的“随机”加权选择的任何建议?