2017-01-21 4 views
0

У меня есть система, которая назначает пользователей экспериментам на основе номера приоритета эксперимента. Каждый эксперимент имеет вес, который определяет, как часто он будет выбран для показа пользователю. Например, пользователю может быть присвоен эксперимент 1 с приоритетом 100 по эксперименту 2, который имеет приоритет 80. Как только мы выберем эксперимент на основе его веса, мы проверим номер распределения трафика эксперимента, чтобы назначить пользователя этому эксперименту.Средние значения по весу

Таким образом, хотя эксперимент 1 имеет приоритет 100, если его номер распределения трафика составляет 80%, пользователи, которые настроены для этого эксперимента, будут назначены ему только 80% времени. Остальные 20% будут назначены контрольной группе. Однако решение распределить пользователя на эксперимент или контролировать этот эксперимент основано на приоритете экспериментов. Другие эксперименты с низким приоритетом не так часто показываются пользователям.

Как я могу назначить пользователей эксперименту на основе приоритета, так что эксперименты с низким приоритетом также часто назначаются и не голодают.

Какой алгоритм я могу использовать, чтобы убедиться, что все эксперименты назначены независимо от приоритета; хотя эксперименты с высоким приоритетом будут назначаться пользователям чаще.

+0

Что вы описываете, это проблема планирования, называемая «голодание». Google это и прочитать об этом и возможных решениях. – alfasin

+0

Проблема довольно слабо определена; например, нет четкого разделения между выборами между экспериментами и назначением контрольной группы. –

+0

Ваш вопрос мне не очень понятен ... Соответствуют ли весы какие-то вероятности? Другими словами: если эксперимент A имеет вес 100, а эксперимент B имеет вес 80, означает ли это, что на 180 общих пользователей 100 должны быть назначены (в среднем) до A и от 80 до B? – xzoert

ответ

0

Ваша проблема плохо сформулирована. Давайте разберемся, и вы говорите, полезная ли сортировка.

Во-первых, используйте приоритетные номера для присвоения веса эксперименту. Пусть P_e является приоритетом эксперимента e. Пусть R_e - вероятность (от 0 до 1), что пользователю назначается эксперимент e. Предположим, что эксперименты 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 в [0..1) как «монетный бросок», чтобы решить, будет ли она контролировать или проверять. Если - это распределение трафика, тогда выберите тест, если 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 означает проверку пользователя. В противном случае пользователь будет управлять.

+0

Можете ли вы привести мне пример того, что вы – Jasmine

+0

Среднее значение, которое дает мне действительные цифры – Jasmine

+0

@ Жасмин добавил пример – Gene