Алгоритм рейтинга и архитектура хранения

wc3banderlog

Новичок
Встала задача, расчет рейтинга для публикаций. Имеем следующие сущности: публикация, отзыв на публикацию, оценка отзыва.

Формула:
CodeCogsEqn (1).gif
где r0 - функция среднего значения рейтинга всех публикаций, которое со временем стремится к нулю (таким образом новым публикациям дается шанс попасть немного в топ на некоторое время)
lim.gif , где n - количество дней(или другая единица измерения), за которое стартовый рейтинг упадет до нуля

R - оценка поставленная в отзыве (например шкала от 1 до 5),
m - количество добавленных отзывов,
V - насколько полезен был отзыв (сумма голосов за и против),
Vc - общее количество голосов за отзыв.
Таким образом если отзыв максимально полезен, то он получит заявленное значение, если же нет, то значение будет меньше, ну тут думаю все понятно.

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

Сервер крутиться на php, framework bitrix.
Хотелось бы узнать ваше мнение по поводу всего этого и:
- какой период времени задать для стартового рейтинга (т.е. какой n) и как часто пересчитывать его?
- использовать ли средний рейтинг по всем публикациям или средний рейтинг публикаций в корневой категории (например, раздел Спорт)?
- повесить вычисления средних значений на cron или делать все расчеты на ходу? Если на ходу, то как в php их можно перенаправить в отдельный поток (или как это назвать), например, я добавил отзыв/добавил оценку к отзыву, рейтинг публикации изменился, а следовательно и средний рейтинг всех публикаций (что с большим количеством публикаций со временем будет занимать время)

ЗЫ. Простите за сумбур, полночь на дворе)
 

HraKK

Мудак
Команда форума
Я думаю, тебе убрать эту фигню про рейтинги и добавить более конкретные вопросы, про то что же ты хочешь от нас услышать со стороны теории программирования.
 

wc3banderlog

Новичок
Я думаю, тебе убрать эту фигню про рейтинги и добавить более конкретные вопросы, про то что же ты хочешь от нас услышать со стороны теории программирования.
Ок, давайте начнем упрощать. Перейдем к конкретному примеру.

Допустим есть 2 публикации, с отзывами к ним. Полезность публикации определяется как некое среднее значение между положительными, отрицательными и нейтральными отзывами.
1 публикация имеет 10 отзывов, а другая 100 отзывов. Средние значения отличаются на 0,00001, но первая публикация по рейтингу выше.
В качестве поддержки клиентов, хочется чтобы публикация со 100 отзывами (т.е. вторая) была выше, потому что она уже проверена пользователями. Но как видим изза малого количества отзывов первая ее незначительно обходит.

Вопрос. Как бы конвертировать количество отзывов в какой-нибудь коэффициент, чтобы поднимать записи с большим количеством отзывов выше, чем публикации с фактически чуть-чуть большим рейтингом, но меньшим количеством отзывов. И при этом постараться сохранить адекватную выборку.
 

HraKK

Мудак
Команда форума
Ответ: 42

Блин, неужели такую задачу самому не интересно решить?
 

Adelf

Administrator
Команда форума
прибавляй к рейтингу логарифм от количества голосов.
основание логарифма придется подбирать эмпирически.
 

Breeze

goshogun
Команда форума
Партнер клуба
Что имеет большую ценность: публикация, где 500 оценок (350 - 5, 150 - 4), или где 900 оценок (300 - 5, 300 - 4, 300 - 3)?
 

wc3banderlog

Новичок
Ответ: 42
Блин, неужели такую задачу самому не интересно решить?
Конечно интересно и даже есть решение, но пока оно не кажется оптимальным, поэтому и решил узнать, кто-то ведь уже задумывался. Ведь для того и форум ;) Я же не спрашиваю тривиальные вещи как мне кажется.

Что имеет большую ценность: публикация, где 500 оценок (350 - 5, 150 - 4), или где 900 оценок (300 - 5, 300 - 4, 300 - 3)?
Можно посчитать как среднее, если отрицательный - 1 балл, нейтральный - 2 балла, положительный - 3.
ЗЫ. Ушел в баню, по приходу додумаю

прибавляй к рейтингу логарифм от количества голосов.
основание логарифма придется подбирать эмпирически.
Вот да, как то так сейчас и у меня, только до конца не отшлифовано
 
Сверху