Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Самый лучший фильм


Автор: Самозванка 16.3.2009, 16:26
Может кто подскажет какой алгоритм тут применить...? Сейчас на сайте "самые лучшие" вычисляются правильно с математической точки зрения, но неправльно с логической -- не учитывается количество проголосовавших. Допустим, за фильм проголосовал 1 чел на "5", а за другой фильм 5 чел на "5" и 1 чел. "4" -- этот второй фильм окажется хуже.

Помогите придумать адекватную схему расчета "хорошести". smile 

Автор: Lipetsk 16.3.2009, 17:21
Думаю это не реально  smile 

Автор: UniBomb 16.3.2009, 17:50
Цитата(Самозванка @  16.3.2009,  16:26 Найти цитируемый пост)
второй фильм окажется хуже

А он и будет хуже. Ведь за первый фильм никто не проголосовал хуже чем "5". 

Автор: ksnk 16.3.2009, 18:17
Самозванка, Вот примерная формула, только что высосана из пальца...  smile 

Чем больше народу проголосовало - тем интереснее фильм. Оценка, по сути, не важна smile. Для пущей "объективности" :  От числа проголосовавших "за" - отнимаем 1/3 всех и получившуюся неотрицательную величину записываем в "+". от числа проголосовавших "против" отнимаем 1/3 и получившуюся неотрицательную  величину записываем в "-". 1/3 - это примерное количество неадекватных посетителей smile видимо, нужно настраивать, в зависимости от контента сайта...

Формула - чего-то вроде:

(K1*N) + K2*Max(0,Nплюс-(N/3)) - K2*Max(0,Nминус-(N/3)), где

K1, K2 - коэффициенты среднепотолочные... к примеру {1, 3}

Nплюс - сколько плюсов, Nминус - сколько минусов, N - сколько всего.



Автор: bars80080 16.3.2009, 18:41
может просто сложить положительные и отрицательные оценки?

Автор: GoldFinch 16.3.2009, 18:42
тут надо копать в сторону теорвера, например делать чтото вроде поправки n/(n-1)

Автор: Soah 16.3.2009, 18:49
ИМХО, надо сравнивать среднее арифметическое значение,
если ровно, смотрим у кого больше отрицательных - тот хуже.

Автор: W4FhLF 17.3.2009, 06:40
Умножаешь количество оценок каждого номинала (от 1 до 5) на номинал оценки и делишь на количество оценок, далее суммируешь. Получаешь средневзвешанное, где в качестве веса выступает номинал оценки. 

Автор: Самозванка 17.3.2009, 09:40
bars80080, оценки положительные все. от 0 до 5.
Цитата(W4FhLF @  17.3.2009,  06:40 Найти цитируемый пост)
Умножаешь количество оценок каждого номинала (от 1 до 5) на номинал оценки и делишь на количество оценок, далее суммируешь. Получаешь средневзвешанное, где в качестве веса выступает номинал оценки.  

спасибо, подходит  smile 

Автор: Самозванка 17.3.2009, 13:32
Цитата(Самозванка @  17.3.2009,  09:40 Найти цитируемый пост)
спасибо, подходит 

вернее не подходит...
1 фильм - 5
2 фильм - 5 5 4

(5*1)/1  а второй (5*2)/3 + (4*1)/3

получаем опять первый лучше...


Автор: GoldFinch 17.3.2009, 15:23
если число оценок = 1, оценка = X, писать  "оценка примерно X"
если число оценок >1, то считать по формулам матожидание m и СКО s ошибки, писать "оценка равна m+-s"

если база оценок большая, что можно откорректировать вероятности оценок по их частоте в базе

Автор: ksnk 17.3.2009, 16:13
W4FhLF, А оно чем-нибудь от среднего арифметического отличается? 

Автор: nworm 17.3.2009, 18:09
Самозваночка,
Можно делать как примерно как сказал ksnk

Оценка=N5*(количество пятёрок)+N4*(количество четвёрок)+N3*(количество троек)+N2*(количество двоек)+N1*(количество единиц)

Коэффициенты N1,N2,N3,N4,N5 взять с потолка
Типа
Оценка=1*(количество пятёрок)+0.5*(количество четвёрок)+0.1*(количество троек)-0.5*(количество двоек)-1*(количество единиц)

И всё время будут недовольные как в парадоксе Эрроу.

Автор: bars80080 17.3.2009, 18:26
может не ломать голову? писать среднюю оценку и в скобках показывать количество проголосовавших? 8,6 (17 голосов)

Автор: Самозванка 17.3.2009, 18:58
bars80080, так сейчас так и пишется

ладно, пусть будет так...  smile

Добавлено через 12 секунд
и спасибо всем

Автор: Silent 18.3.2009, 13:15
напрашивается идея ранжирования по количеству голосов, что-нить типа умножения средневзвешенной на некую величину, которая зависит от количества голосов, я предлагаю такую формулу:
ln(n+e)*средневзвешенная
где е - экспонента, exp(1)

пример:
Код

№  Оценки               Формула                                             Итоговые баллы
1) 5                          ln(1+e)*(5*1/1)                                6,566308438
2) 5 5 4                      ln(3+e)*(5*2/3+4*1/3)                        8,13711911
3) 5 4 4                      ln(3+e)*(5*1/3+4*2/3)                        7,555896316
4) 5(10) 4(5) 3(1)        ln(16+e)*(5*10/16+4*5/16+3*1/16)                  13,36584687
5) 5(12)                     ln(12+e)*(5*12/12)                             13,44545191


наглядно видно что приоритет отдается тем фильмам, у кого больше голосов, но зело с великой хитростию (№4 и №5) - качество оценок тоже имеет огромное значение. Например, фильм, за который проголосовало 12 человек, но все пятерками (наверняка очень хороший фильм!), обгонит в рейтинге фильм с бОльшим количеством голосов - №5 - за который проголосовало аж 16 человек (у него ж на четверть голосов больше!)


P.S. Жаль что здесь нельзя вставлять таблицы, а то все разъехалось

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)