Рейтинг (Помогите составить функцию для вычисления рейтинга)

Модератор: Модераторы разделов

Аватара пользователя
Хрюндель
Сообщения: 304
ОС: Сам не знаю

Рейтинг

Сообщение Хрюндель »

Мне очень нужен нормальный подсчёт рейтинга. Главная проблема при обычном рейтинге (обычное арифметическое среднее) в том что количество голосов не играет никакой роли. Получается что один голос с оценкой в 10 баллов - больше чем 10 голосов с 9ью баллами, что естественно неверно, так как если проголосовали 10 человек то популярность явно выше у данного оцениваемого предмета.

Сам я не особо силён в математике, единственное что смог придумать это:

z=(x/y)*кореньY
Где:
x - сумма оценок
y - количество голосов

Данная система немного балансирует оценку и включает в себя количество голосов. Проблем теперь в другом, если 100 человек проголосуют за что то с оценкой 3, то рейтинг получится выше чем 20 человек проголосуют с оценкой 6.. Как бы решить эту проблему?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Рейтинг

Сообщение Uncle_Theodore »

Бери просто сумму баллов. Или, если хочешь, чтобы была верхняя граница, бери арктангенс от суммы баллов. Или что-то типа x/(1+x), где x = сумма баллов.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Рейтинг

Сообщение Liksys »

Можно вопрос? Почему арктангенс?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Рейтинг

Сообщение Uncle_Theodore »

Liksys писал(а):
05.06.2007 22:43
Можно вопрос? Почему арктангенс?

Потому что у него предел пи пополам на бесконечности. :)
Вообще, я как всякий математик, рассуждаю тупо. Среднее -- это сумма деленная на количество голосов. Если надо учесть количество голосов, надо на это количество умножить. Что получится -- сумма.
Но сумма возрастает неограниченно. Возьмем от нее возрастающую функцию, которая ограничена. ;)
Спасибо сказали:
Аватара пользователя
Хрюндель
Сообщения: 304
ОС: Сам не знаю

Re: Рейтинг

Сообщение Хрюндель »

Но сумма возрастает неограниченно. Возьмем от нее возрастающую функцию, которая ограничена.


Вот тут можно поподробней? Если можно с реальным примером.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Рейтинг

Сообщение KiWi »

Хрюндель писал(а):
05.06.2007 23:00
Но сумма возрастает неограниченно. Возьмем от нее возрастающую функцию, которая ограничена.


Вот тут можно поподробней? Если можно с реальным примером.

Тебе же сказали -- arctg.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Рейтинг

Сообщение Liksys »

Спасибо сказали:
Аватара пользователя
Хрюндель
Сообщения: 304
ОС: Сам не знаю

Re: Рейтинг

Сообщение Хрюндель »

Дык что то я не вижу особого смысла в этом.

если есть 15 голосв с оценкой 10 получается atan(15*10)= 89.61
Теперь 55 голосов с оценкой 3 получается atan(55*3)=89.65

Приходим к той же проблеме.. Количество голосов приувеличены в данном случае.

Нет ли у товарища Uncle_Theodore, ещё каких нибудь вариантов..
Вот этот я вообще не понял x/(1+x) Может здесь чего то не хватает?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Рейтинг

Сообщение Uncle_Theodore »

Сформулируй, что в точности ты хочешь. Вот есть 10 голосов с оценкой 1 за позицию А и 1 голос с оценкой 10 за позицию Б. Средний рейтинг А = 1, Б = 10. Общий балл А = 10, Б = 10. Чего ты хочешь? Ответь в том же духе, А = ? Б = ?
Теперь обратная задача. Для В есть десять голосов с оценкой 10, у Г есть один голос с оценкой 1. Что бы ты хотел видеть для В и Г?
И наконец, для Д есть десять голосов с оценкой 5, а у Е один голос с оценкой 5. Что бы ты хотел видеть для Д и Е?

Проблема тут в том, что ты проектируешь двумерную точку (голоса, сумма) на одномерную прямую (рейтинг). Некоторые вещи будут невозможны...
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: Рейтинг

Сообщение sarutobi »

похоже ваша проблема решается обычной нормализацией.
Можно либо добавлять к рейтингу x/xmax либо суммировать баллы и делить на сумму максимально возможных - в любом случае получаете один и тот же нормализованный коэффициент.
2 Uncle_Theodore отношение среднего к максимально возможному? в пределе максимум ограниченный 1.....
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Рейтинг

Сообщение Uncle_Theodore »

sarutobi,
Максимально возможная сумма баллов = n * 10 где n = количество поданных голосов.
Сумма баллов X деленная на максимально возможную сумму баллов есть
X/(n*10) = X/n * 1/10 , то есть просто одна десятая от арифметического среднего...
Че-то я не понял...
Спасибо сказали:
Аватара пользователя
Хрюндель
Сообщения: 304
ОС: Сам не знаю

Re: Рейтинг

Сообщение Хрюндель »

Сформулируй, что в точности ты хочешь. Вот есть 10 голосов с оценкой 1 за позицию А и 1 голос с оценкой 10 за позицию Б. Средний рейтинг А = 1, Б = 10. Общий балл А = 10, Б = 10. Чего ты хочешь? Ответь в том же духе, А = ? Б = ?
Теперь обратная задача. Для В есть десять голосов с оценкой 10, у Г есть один голос с оценкой 1. Что бы ты хотел видеть для В и Г?
И наконец, для Д есть десять голосов с оценкой 5, а у Е один голос с оценкой 5. Что бы ты хотел видеть для Д и Е?



A = 10
Б = 15

В = 80
Г = 1

Д = 35
Е = 13

Примерно вот такие результаты надо иметь по описаным выше ситуациям. Я подумал что можно упростить как то решение если например ограничить количество голосов. Например что бы функция работала правильно до 100 голосов, а потом уже неважно, так как думаю у меня больше 100 голосов не наберётся. Ну и рейтинг например что бы был после подсчёта от 0 до 100.
Спасибо сказали:
pktfag
Сообщения: 142
ОС: Arch Linux

Re: Рейтинг

Сообщение pktfag »


Пусть искомая функция будет расстояние от точки (x,y) до точки (0,0), где x - это оценка, y - количество голосов.
Из формулы расстояний получаем (x*x+y*y)^(1/2).
Но будут равные расстояния от точек A и Б до (0,0). Ну можно считать до точки (0,1), тогда искомой функцией будет (x*x+(y-1)*(y-1))^(1/2).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
pktfag
Сообщения: 142
ОС: Arch Linux

Re: Рейтинг

Сообщение pktfag »

)
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: Рейтинг

Сообщение sarutobi »

Uncle_Theodore писал(а):
06.06.2007 00:13
sarutobi,
Максимально возможная сумма баллов = n * 10 где n = количество поданных голосов.
Сумма баллов X деленная на максимально возможную сумму баллов есть
X/(n*10) = X/n * 1/10 , то есть просто одна десятая от арифметического среднего...
Че-то я не понял...

че то я невнимательно прочитал про учет числа голосовавших.... :(
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
Аватара пользователя
Хрюндель
Сообщения: 304
ОС: Сам не знаю

Re: Рейтинг

Сообщение Хрюндель »

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

Для примера приведу просто свои логические рассуждения по поводу количества голосов. Для наглядности возьмём что это рейтинг блогов.

1. Если голосов мало, то во-первых значит что блог не очень популярен раз ему ставят оценку так мало юзеров, во вторых среднее арифметическое может очень сильно врать, так как любой голос сильно меняет арифметическое среднее.
2. Если голосов много то с одной стороны новость популярная, но с другой стороны если голосов очень много то среднее арифметическое здесь скорей всего верное.
Спасибо сказали: