После тщательного обдумывания, лучшее решение для этого рейтинга фильмов выглядит следующим образом.
Необходимые данные:
- The number of votes taken on each pairing of films.
- And also a sorted version of this data grouped like in radix sort
- Сколько раз проголосовали за каждый фильм в каждой паре фильмов
Дополнительные данные:
- Сколько раз каждый фильм участвовал в голосовании для каждого пользователя
Как выбрать голос для пользователя:
- Выберите вариант голосования из отсортированного списка в самой низкой используемой группе счисления (случайным образом)
- Необязательно: используйте личную статистику голосования пользователя, чтобы отфильтровать фильмы, за которые его просили проголосовать слишком много раз, возможно, перейдя в более высокие корзины счисления, если нет ничего подходящего.
Как рассчитать рейтинг фильма:
- Начать счет с 0
- Go through each other film in the system
- Add
voteswon / votestaken
versus this film to the score
- If no votes have been taken between these two films, add 0.5 instead (This is of course assuming you want new films to start out as average in the rankings)
Примечание. Необязательный элемент предназначен только для того, чтобы не дать пользователю заскучать, но может быть полезен и для других статистических данных, особенно если указать, сколько раз они проголосовали за этот фильм, а не за другой.
Убедиться, что статистика по вновь добавленным фильмам собрана как можно скорее, а голоса по всем существующим фильмам очень равномерно распределены, жизненно важно для сохранения правильной статистики по остальным фильмам. Возможно, стоит отложить ввод в систему нескольких новых фильмов, чтобы избежать временных сбоев в рейтинге (хотя и не немедленных и не серьезных).
===ЭТО ОРИГИНАЛЬНЫЙ ОТВЕТ===
Проблема на самом деле очень простая. Я предполагаю, что вы хотите отдать предпочтение голосу за фильм, т. е. фильм № 1 в рейтинге — это фильм, который с наибольшей вероятностью будет выбран в голосовании. Если вы сделаете так, чтобы в каждом голосовании вы выбирали два фильма совершенно случайным образом, вы можете рассчитать это с помощью простой математики.
Во-первых, каждый выбор из двух фильмов для голосования равновероятен, поэтому результаты каждого голосования можно просто сложить вместе для получения балла (за исключением умножения на 1/nC2 для всего). И очевидно, что вероятность того, что кто-то проголосует за один конкретный фильм против другого конкретного фильма, составляет всего votesforthisfilm / numberofvotes
.
Таким образом, чтобы рассчитать оценку для одного фильма, вы просто суммируете votesforthisfilm / numberofvotes
для каждого фильма, с которым он может быть сопоставлен.
Здесь есть небольшая проблема, если вы добавите новый фильм, который не набрал значительного количества голосов по сравнению со всеми другими фильмами, поэтому вы, вероятно, захотите оставить его вне рейтинга, пока не наберется количество голосов.
===ТО, ЧТО СЛЕДУЕТ, ПОЧТИ НЕПРАВИЛЬНО И ПРИВЕДЕНО В ОСНОВНОМ ДЛЯ ИСТОРИЧЕСКОГО КОНТЕКСТА===
Этот метод подсчета очков основан на цепи Маркова вашей системы голосования, предполагая, что все возможные вопросы для голосования были равновероятными. [Это первое предложение неверно, потому что все вопросы для голосования должны быть равновероятными в цепи Маркова, чтобы получить значимые результаты] Конечно, это не так, и на самом деле это тоже можно исправить, поскольку вы знаете, насколько вероятным был каждый вопрос для голосования, это просто количество голосов, которые были сделаны по этому вопросу! [Вероятность получения определенного вопроса для голосования на самом деле не имеет значения, поэтому это не помогает] Таким образом, используя тот же график, но с ребрами, взвешенными по сделанным голосам...
Вероятность получения каждого фильма при условии, что он был включен в голосование, равна вероятности получения каждого фильма и его участия в голосовании, деленной на вероятность того, что он был включен в голосование. Получается sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes
разделить на sumoverallvotes(numberofvotes) / totalnumberofvotes
. С большим количеством отмен это приходит к votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm
. Что действительно просто!
person
KernelJ
schedule
15.12.2009