У меня есть система, где люди могут проголосовать или вниз проголосовать за объект, и я хочу отобразить результаты этого как пятизвездочная оценка.
Я пробовал, используют Байесовский алгоритм Оценки, объясненный здесь и здесь без успеха.
Например: у Меня есть три объекта (A, B и C) в моей базе данных:
A = 500 и 500 вниз голоса B = 0 и 1000 вниз голоса C = 0 и 1000 вниз голоса
Как я вычисляю Байесовскую среднюю оценку для каждого объекта так, чтобы это имело счет в масштабе 1 - 5?
Простая алгебра:
AvgVotes = Сумма всех голосов / Сумма всех элементов
AvgRating = Сумма голосов за все элементы * 5 / Сумма всех голосов
CurVotes = Количество голосов за текущий элемент
CurRating = Сумма голосов за текущий элемент * 5 / Количество голосов за текущий элемент
TotalVotes = Сумма всех голосов + Сумма голосов за текущий элемент
((AvgVotes * AvgRating) + (CurVotes * CurRating)) * 5 / TotalVotes
Итак, вставляем ваши числа, оценивающие вес для A ...
AvgRating = 1000
AvgRating = 0 (Помните, не включайте числа для элемент, который вы оцениваете в этом расчете)
CurVotes = 1000
CurRating = 500 * 5/1000 = 2,5
Всего голосов = 2000 + 1000 = 3000
((1000 * 0) + (1000 * 2.5)) * 5/3000 = 4.166
Я забыл добавить, НЕ включайте в какие-либо вычисления или суммы выше элементы, за которые нет голосов, иначе это сбросит вес.
РЕДАКТИРОВАТЬ - Упрощенное решение:
Я должен отметить, что существует упрощенное решение проблемы, которое может быть выполнено. Я демонстрировал только печатную форму для понимания. Сжатый алгоритм выглядит так:
Определения:
SET = Все, что не связано с текущей целью оценки, где количество голосов больше нуля.
TARGET = Элемент, который вы в настоящее время пытаетесь оценить
25 * (((Сумма голосов за SET) / (сумма голосов за SET)) + (сумма голосов за TARGET)) / (Сумма ЦЕЛЕВЫЕ голоса + сумма голосов SET)
Снова подключаемся к вашим числам, оценивающим «А» для разъяснения и доказательства:
(25 * ((0/2) +500)) / (1000 + 2000) = 4,166
В этом сообщении блога Как не сортировать по среднему рейтингу точно описывается ваша ситуация и способы ее решения с использованием доверительного интервала оценки Вильсона . Reddit успешно использовал это .