2015-06-15 2 views
0

Я ищу базовый алгоритм, который дает больше веса недавним отзывам.Рейтинг с временным весом

Таким образом, выходное значение алгоритма является изменяемым. Например, два отзыва с точно такой же оценкой будут иметь другой рейтинг, основанный на отметке времени создания.

Review_1 
Score 10 
creation 10/5/2014 

Review_2 
Score 10 
creation 10/5/2015 

весомостью, как:

1 if review ts < 1 year 
0.5 if review > year 

Таким образом, я могу использовать что-то вроде (review_1.score * 1) + (review_1.score * 0.5).

Однако, если оба отзыва старые, не имеет смысла (review_1.score * 0.5) + (review_1.score * 0.5), верно? В целом будет половина оригинальной оценки только потому, что новых отзывов нет.

+0

Рассмотрите временную метку последнего обзора как «настоящего» для купирования взвешивания. – collapsar

+0

Вы только взвешиваете числитель; вес знаменателя тоже. Или вы не делаете в среднем? –

+0

@DanGetz, я не вижу, как это решает проблему. Но да, я делаю в среднем. – user2990084

ответ

0

Для уточнения @Dan Getz и добавить @collapsar ответ я добавлю следующее:

Формула Дэн правильно:

(score1 * weight1 + ... + scoreN * weightN)/(weight1 + ... + weightN)

Красота средневзвешенного является вы можете выбрать веса!

Таким образом, мы выбираем дни с момента первого сообщения в виде веса. Поэтому я выберу некоторые данные и покажу, как это работает. Во всех случаях простое значение равно 5,0.

Сначала мы рассмотрим рейтинги, которые со временем увеличились.

Date[0]: May 6  Rating[0]: 1  Weight[0]: 0 
Date[1]: May 7  Rating[1]: 3  Weight[1]: 1 
Date[2]: May 8  Rating[2]: 5  Weight[2]: 2 
Date[3]: May 9  Rating[3]: 7  Weight[3]: 3 
Date[4]: May 10  Rating[4]: 9  Weight[4]: 4 

так для расчета весов:

Weight[i] = Date[i] - Date[0] 

Для расчета среднего

(Rating[0]*Weight[0] + Rating[1]*Weight[1] + ... + Rating[N]*Weight[N])/
(Weight[0] + Weight[1] + ... + Weight[N]) 

Расчет:

(1*0 + 3*1 + 5*2 + 7*3 + 9*4)/(0 + 1 + 2 + 3 + 4) = (0+3+10+21+36)/10 = 7.0 

Аналогичным рейтинг, который снизился с течением времени:

Date[0]: May 6  Rating[0]: 9  Weight[0]: 0 
Date[1]: May 7  Rating[1]: 7  Weight[1]: 1 
Date[2]: May 8  Rating[2]: 5  Weight[2]: 2 
Date[3]: May 9  Rating[3]: 3  Weight[3]: 3 
Date[4]: May 10  Rating[4]: 1  Weight[4]: 4 

Расчет будет:

(9*0 + 7*1 + 5*2 + 3*3 + 1*4)/(0 + 1 + 2 + 3 + 4) = (0+7+10+9+4)/10 = 3.0 

Я выбрал вес таким образом, что большие веса соответствуют рейтингам, которые я хотел бы иметь больше веса.

0

Чтобы сделать средневзвешенное значение, вместо деления взвешенной суммы на количество баллов, разделите взвешенную сумму на общий вес.

Объяснение

Когда вы сделаете нормальное среднее N баллов, которые могут варьироваться от 0 до maxScore, вы начинаете, добавляя все баллы:

score1 + score2 + ... + scoreN 

Этого значение может варьироваться в зависимости от индивидуальных особенностей баллов от 0 до maxScore * N. Таким образом, чтобы превратить его в диапазоне от 0 до maxScore, мы должны разделить на N:

(score1 + score2 + ... + scoreN)/N 

Если вы взвешенное среднее, общее количество баллов имеет другую формулу:

score1 * weight1 + score2 * weight2 + ... + scoreN * weightN 

В этом нет дольше будет колебаться от 0 до N * maxScore, поэтому нет смысла делиться на N. Она варьируется от 0 до:

maxScore * weight1 + maxScore * weight2 + ... + maxScore * weightN 

который является maxScore * totalWeight. Таким образом, чтобы превратить вашу взвешенную сумму в средневзвешенный, нам нужно разделить на общем весе:

(score1 * weight1 + ... + scoreN * weightN)/(weight1 + ... + weightN) 

Обратите внимание, что если вы установите каждый вес, равный 1, вы получите формулу для нормального среднего, что является что мы могли бы сделать эту математику правильно.

+0

Дэн, мой вопрос в том, как это решает проблему взвешивания времени? – user2990084

+0

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

+1

Я думаю, что комментарий @collapsar - единственный ответ здесь, который фокусируется на проблеме. Спасибо, в любом случае. – user2990084

Смежные вопросы