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


Я запускаю веб-сайт, который позволяет пользователям вносить свой вклад, позволяя им загружать файлы по определенным темам. Прямо сейчас моя рейтинговая система является наихудшей из возможных (количество загрузок файла). Это не только крайне неточно с точки зрения контроля качества, но и не позволяет новому контенту в ближайшее время попасть в топ. Вот почему я хочу изменить свою систему рейтингов, чтобы пользователи могли голосовать за/против каждого пункта. Однако это не должно быть единственным фактором, демонстрирующим популярность такой предмет. Я хотел бы, чтобы более старый контент со временем снижал рейтинг. Возможно, я мог бы даже учесть количество загрузок, но с очень низким процентом.

Итак, мои вопросы таковы:

  1. Какую формулу вы бы предложили в предположении, что каждый день происходит 1 новая загрузка?
  2. Как бы вы реализовали это в среде php/mysql?

Моя проблема в том, что сейчас я просто сортирую свои вещи по строке downloads в базе данных. Как я могу отсортировать запрос по коэффициенту, который рассчитывается извне (в php), или мне нужно обновлять новую строку в моей таблице с коэффициентом рейтинга каждый раз, когда кто-то звонит на сайт в своем браузере?

(Пожалуйста, извините за любые ошибки, я не являюсь носителем языка)

Author: halfcat, 2012-07-27

2 answers

Прежде всего, в любом случае вам потребуется добавить хотя бы один столбец в вашу таблицу. Лучше всего было бы иметь отдельный стол с id, upvotes, downvotes, datetime

Если вы хотите принять во внимание свежесть сообщений (или загрузок, или комментариев, или...) Я думаю, что лучший фактический метод - это оценка Уилсона с параметром гравитации.

Для хорошего начала работы с реализацией Wilson score в PHP проверьте это.

Затем вам нужно будет прочитать это , чтобы понять плюсы и минусы других решений и использовать SQL напрямую.
Примечание: гравитация явно не описана в коде SQL, но благодаря PHP вы сможете заставить его работать.

Обратите внимание, что если вы хотите что-то более простое, но все же не хромающее, вы можете проверить с помощью Байесовского среднего . IMDB использует байесовскую оценку для вычисления своего верхнего 250.

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

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

Вам есть что почитать, просто в стековом потоке, чтобы высушить тему.

Ваше путешествие начинается здесь ...

 2
Author: Romain, 2017-05-23 12:29:11

Я не очень хорошо владею php или mysql, но что касается рейтинговой системы, если вы хотите вовремя смягчить ситуацию, рассматривали ли вы экспоненциальный спад? С самого начала я бы, наверное, сделал что-то вроде

$rating = $downloads * exp(-1*$elapsedTime)

Вы можете прочитать об этом здесь http://en.wikipedia.org/wiki/Exponential_decay . Возможно, постройте за неделю или месяц или что-то в этом роде, прежде чем вы начнете снижать результаты, или люди сразу же снизят свою загрузку.

 2
Author: bigbenbt, 2012-07-27 18:06:10