Концептуальная помощь по внедрению рейтинговой системы, которая позволяет элементам уменьшаться во времени
Я запускаю веб-сайт, который позволяет пользователям вносить свой вклад, позволяя им загружать файлы по определенным темам. Прямо сейчас моя рейтинговая система является наихудшей из возможных (количество загрузок файла). Это не только крайне неточно с точки зрения контроля качества, но и не позволяет новому контенту в ближайшее время попасть в топ. Вот почему я хочу изменить свою систему рейтингов, чтобы пользователи могли голосовать за/против каждого пункта. Однако это не должно быть единственным фактором, демонстрирующим популярность такой предмет. Я хотел бы, чтобы более старый контент со временем снижал рейтинг. Возможно, я мог бы даже учесть количество загрузок, но с очень низким процентом.
Итак, мои вопросы таковы:
- Какую формулу вы бы предложили в предположении, что каждый день происходит 1 новая загрузка?
- Как бы вы реализовали это в среде php/mysql?
Моя проблема в том, что сейчас я просто сортирую свои вещи по строке downloads
в базе данных. Как я могу отсортировать запрос по коэффициенту, который рассчитывается извне (в php), или мне нужно обновлять новую строку в моей таблице с коэффициентом рейтинга каждый раз, когда кто-то звонит на сайт в своем браузере?
(Пожалуйста, извините за любые ошибки, я не являюсь носителем языка)
2 answers
Прежде всего, в любом случае вам потребуется добавить хотя бы один столбец в вашу таблицу. Лучше всего было бы иметь отдельный стол с id
, upvotes
, downvotes
, datetime
Если вы хотите принять во внимание свежесть сообщений (или загрузок, или комментариев, или...) Я думаю, что лучший фактический метод - это оценка Уилсона с параметром гравитации.
Для хорошего начала работы с реализацией Wilson score в PHP проверьте это.
Затем вам нужно будет прочитать это , чтобы понять плюсы и минусы других решений и использовать SQL напрямую.
Примечание: гравитация явно не описана в коде SQL, но благодаря PHP вы сможете заставить его работать.
Обратите внимание, что если вы хотите что-то более простое, но все же не хромающее, вы можете проверить с помощью Байесовского среднего . IMDB использует байесовскую оценку для вычисления своего верхнего 250.
Реализация вашей собственной статистической модели приведет только к недостаткам, которые вы не представляли себе в первую очередь (слишком далеко от среднего значения, понижающие голоса важнее, чем повышающие, слишком быстро затухают и т. Д.)
Наконец, вы говорите о прямой загрузке рейтинга, а не о пользователе, который загружает файлы. Если вы хотите сделать то же самое с пользователем, проще было бы использовать байесовскую оценку с результатами оценок ваших загрузок.
Вам есть что почитать, просто в стековом потоке, чтобы высушить тему.
Ваше путешествие начинается здесь ...
Я не очень хорошо владею php или mysql, но что касается рейтинговой системы, если вы хотите вовремя смягчить ситуацию, рассматривали ли вы экспоненциальный спад? С самого начала я бы, наверное, сделал что-то вроде
$rating = $downloads * exp(-1*$elapsedTime)
Вы можете прочитать об этом здесь http://en.wikipedia.org/wiki/Exponential_decay . Возможно, постройте за неделю или месяц или что-то в этом роде, прежде чем вы начнете снижать результаты, или люди сразу же снизят свою загрузку.