Каков наилучший алгоритм для расчета наиболее набранного предмета? - PullRequest
15 голосов
/ 25 января 2010

У меня есть музыкальные предметы, которые оцениваются пользователями от 1 до 5, и Мне нужна формула, чтобы получить 5 самых набранных предметов.

Но очевидно, что элемент, набравший в среднем 3,5 балла от 1000 разных пользователей, будет оценен больше, чем элемент, набравший в среднем 4,9 балла только от 5 пользователей ... другими словами, я думаю, что если элемент привлечет внимание людей к оценке это, это указывает, что пункт интересен. таким образом, в расчете параметр voiceCount должна быть степень. (сколько сил? Я не уверен, и я прошу вас, чтобы получить идеи).

Я думаю, что нам нужны следующие параметры в функции: voiceAverage, голосованияCount.

Ответы [ 5 ]

28 голосов
/ 25 января 2010

Взвешенное голосование по 5-звездочным системам с большим количеством избирателей

Вы можете использовать байесовские оценки для расчета взвешенного голосования.

IMDb (База данных фильмов в Интернете) использует этот расчет для определения своей верхней 250 IMDb. (Примечание: IMDb использует 10 звезд, но формулы идентичны, используя 5 звезд).

Формула для расчета 250 наименований с самым высоким рейтингом дает истинную байесовскую оценку:

взвешенный рейтинг (WR) = (v ÷ (v + m)) × R + (m ÷ (v + m)) × C

где:

  • R = среднее для фильма (среднее) = (рейтинг)
  • v = количество голосов за фильм = (голосов)
  • m = минимальное количество голосов, необходимое для включения в список 250 лучших (в настоящее время 3000)
  • C = среднее количество голосов по всему отчету (в настоящее время 6,9)

Ссылка IMDb

Справочник по Википедии

8 голосов
/ 25 января 2010

Алгоритм оценки Reddit, вероятно, является лучшим выбором, если вы действительно хотите сделать это правильно. Это подробно объяснено здесь и на высоком уровне автором xkcd Рэндаллом здесь .

Проблема в том, что она не работает для пятизвездочных рейтингов, а это то, что вы собираетесь. Вы должны быть в состоянии обобщить систему сортировки Reddit, чтобы использовать рейтинги. Черт, это, вероятно, уже где-то сделано. Я собираюсь искать это.

6 голосов
/ 25 января 2010

Простой способ сбалансировать систему - это добавить фиксированное количество гипотетических пользователей (скажем, счет H), которые все проголосуют за долгосрочный средний A всех ваших произведений. Скажите, что в среднем 3; тогда формула становится

Оценка = (голосовСчет х голосовСреднее + В х А) / (голосовСчет + Н)

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

Вы можете установить H экспериментально или подумав об этом. Например. если вы считаете, что для установления относительно сильного рейтинга достаточно 20 голосов, вы можете установить H = 5. Скажем.

0 голосов
/ 18 декабря 2013

Я использую для своих музыкальных файлов следующий метод:

Рейтинг измеряется в процентах (0-100) Песни, которые не оценены, получают 50% в подарок Каждый раз, когда кто-то голосует за песню, ее рейтинг увеличивается Каждый раз, когда кто-то голосует против песни, ее рейтинг уменьшается Если рейтинг песни превышает MAX, равный 100, то MAX устанавливается на текущий рейтинг песни. Если рейтинг песни опускается ниже MIN, то MIN устанавливается на рейтинг песни После каждого голосования, которое меняет MIN или MAX, я делаю нормализацию для каждой песни в списке следующим образом:

NewRating = (CurrentRating - MIN) * 100 / (MAX -MIN) Затем я возвращаю MIN к 0, а MAX к 100.

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

При выборе песен для воспроизведения (или голосования) я генерирую случайное число в диапазоне от 0 до 100 и ищу следующую песню с рейтингом, равным или превышающим это число.

Плохие песни идут вниз и выбираются редко, хорошие песни поднимаются и выбираются чаще, но я все еще оставляю шанс, что даже худшая песня будет сыграна (проголосована) в будущем.

0 голосов
/ 26 января 2010

Термин для этого Байесовская оценка .

Один общий пример:

Байесовский рейтинг = (v*R + m*C)/(v+m)
где:
R = средний рейтинг песни
v = количество голосов за песню
m = минимальное количество голосов, необходимое для внесения в список (например, 10)
C = средний голос по всем песням

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...