Рейтинг (Помогите составить функцию для вычисления рейтинга)
Модератор: Модераторы разделов
-
Хрюндель
- Сообщения: 304
- ОС: Сам не знаю
Рейтинг
Мне очень нужен нормальный подсчёт рейтинга. Главная проблема при обычном рейтинге (обычное арифметическое среднее) в том что количество голосов не играет никакой роли. Получается что один голос с оценкой в 10 баллов - больше чем 10 голосов с 9ью баллами, что естественно неверно, так как если проголосовали 10 человек то популярность явно выше у данного оцениваемого предмета.
Сам я не особо силён в математике, единственное что смог придумать это:
z=(x/y)*кореньY
Где:
x - сумма оценок
y - количество голосов
Данная система немного балансирует оценку и включает в себя количество голосов. Проблем теперь в другом, если 100 человек проголосуют за что то с оценкой 3, то рейтинг получится выше чем 20 человек проголосуют с оценкой 6.. Как бы решить эту проблему?
Сам я не особо силён в математике, единственное что смог придумать это:
z=(x/y)*кореньY
Где:
x - сумма оценок
y - количество голосов
Данная система немного балансирует оценку и включает в себя количество голосов. Проблем теперь в другом, если 100 человек проголосуют за что то с оценкой 3, то рейтинг получится выше чем 20 человек проголосуют с оценкой 6.. Как бы решить эту проблему?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Рейтинг
Бери просто сумму баллов. Или, если хочешь, чтобы была верхняя граница, бери арктангенс от суммы баллов. Или что-то типа x/(1+x), где x = сумма баллов.
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Рейтинг
Потому что у него предел пи пополам на бесконечности.
Вообще, я как всякий математик, рассуждаю тупо. Среднее -- это сумма деленная на количество голосов. Если надо учесть количество голосов, надо на это количество умножить. Что получится -- сумма.
Но сумма возрастает неограниченно. Возьмем от нее возрастающую функцию, которая ограничена.
-
Хрюндель
- Сообщения: 304
- ОС: Сам не знаю
Re: Рейтинг
Но сумма возрастает неограниченно. Возьмем от нее возрастающую функцию, которая ограничена.
Вот тут можно поподробней? Если можно с реальным примером.
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
-
Хрюндель
- Сообщения: 304
- ОС: Сам не знаю
Re: Рейтинг
Дык что то я не вижу особого смысла в этом.
если есть 15 голосв с оценкой 10 получается atan(15*10)= 89.61
Теперь 55 голосов с оценкой 3 получается atan(55*3)=89.65
Приходим к той же проблеме.. Количество голосов приувеличены в данном случае.
Нет ли у товарища Uncle_Theodore, ещё каких нибудь вариантов..
Вот этот я вообще не понял x/(1+x) Может здесь чего то не хватает?
если есть 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: Рейтинг
Сформулируй, что в точности ты хочешь. Вот есть 10 голосов с оценкой 1 за позицию А и 1 голос с оценкой 10 за позицию Б. Средний рейтинг А = 1, Б = 10. Общий балл А = 10, Б = 10. Чего ты хочешь? Ответь в том же духе, А = ? Б = ?
Теперь обратная задача. Для В есть десять голосов с оценкой 10, у Г есть один голос с оценкой 1. Что бы ты хотел видеть для В и Г?
И наконец, для Д есть десять голосов с оценкой 5, а у Е один голос с оценкой 5. Что бы ты хотел видеть для Д и Е?
Проблема тут в том, что ты проектируешь двумерную точку (голоса, сумма) на одномерную прямую (рейтинг). Некоторые вещи будут невозможны...
Теперь обратная задача. Для В есть десять голосов с оценкой 10, у Г есть один голос с оценкой 1. Что бы ты хотел видеть для В и Г?
И наконец, для Д есть десять голосов с оценкой 5, а у Е один голос с оценкой 5. Что бы ты хотел видеть для Д и Е?
Проблема тут в том, что ты проектируешь двумерную точку (голоса, сумма) на одномерную прямую (рейтинг). Некоторые вещи будут невозможны...
-
sarutobi
- Сообщения: 676
- Статус: Добрость и скромнота
- ОС: Debian 5, FreeBSD 6.2/8.0
Re: Рейтинг
похоже ваша проблема решается обычной нормализацией.
Можно либо добавлять к рейтингу x/xmax либо суммировать баллы и делить на сумму максимально возможных - в любом случае получаете один и тот же нормализованный коэффициент.
2 Uncle_Theodore отношение среднего к максимально возможному? в пределе максимум ограниченный 1.....
Можно либо добавлять к рейтингу 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: Рейтинг
sarutobi,
Максимально возможная сумма баллов = n * 10 где n = количество поданных голосов.
Сумма баллов X деленная на максимально возможную сумму баллов есть
X/(n*10) = X/n * 1/10 , то есть просто одна десятая от арифметического среднего...
Че-то я не понял...
Максимально возможная сумма баллов = 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: Рейтинг
Пусть искомая функция будет расстояние от точки (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).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
sarutobi
- Сообщения: 676
- Статус: Добрость и скромнота
- ОС: Debian 5, FreeBSD 6.2/8.0
Re: Рейтинг
Uncle_Theodore писал(а): ↑06.06.2007 00:13sarutobi,
Максимально возможная сумма баллов = 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. Если голосов много то с одной стороны новость популярная, но с другой стороны если голосов очень много то среднее арифметическое здесь скорей всего верное.
Для примера приведу просто свои логические рассуждения по поводу количества голосов. Для наглядности возьмём что это рейтинг блогов.
1. Если голосов мало, то во-первых значит что блог не очень популярен раз ему ставят оценку так мало юзеров, во вторых среднее арифметическое может очень сильно врать, так как любой голос сильно меняет арифметическое среднее.
2. Если голосов много то с одной стороны новость популярная, но с другой стороны если голосов очень много то среднее арифметическое здесь скорей всего верное.