Skocz do zawartości

Średnia ocena


Rekomendowane odpowiedzi

  • Administratorzy

Ostatnio przy okazji pewnego projektu rozkminiam pewien problem. Jak wiecie, wiele serwisów oferuje opcję oceniania zawartości (w tym GMCLAN też) - ale w większości istnieje pewien dość ciekawy bug - otóż gdy na jedną pozycję zagłosuje 1000 osób i wystawi średnią ocenę 9.9, a na jakąś nową pozycję zagłosuje jedna, dająć 10, to w liście najlepszych pozycji ta nowość będzie jako najlepsza. Co jest nieprawdą, bo taką ocenę mógłby sobie nawet sam twórca wystawić.

Jak spojrzelibyście na ten problem, żeby na liście najlepszych pozycji znajdowały się jednak warte tego pozycje, a nie te z jednym głosem? Średnia ważona? A może coś innego?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ale tą liczbę ciężko oszacować. Może sie okazać, że 100 głosów to będzie dużo, ale np. za dwa-trzy lata, 10000 głosów to będzie nadal mało. Szukam uniwersalnego rozwiązania, bo o takim właśnie z miminalną ilością głosów już myślałem, ew. że przed osiągnięciem pewnego limitu ocena jest uszczuplana.

 

Jednak gdy coś jest hitem, powinno na listę najlepszych trafiać już z początku (ale nie od razu na sam szczyt, np. na 10, 15 miejsce).

Odnośnik do komentarza
Udostępnij na innych stronach

Ludu! Co się dzieje na tym świecie, że Gnysek się pyta o coś NAS. :P

Zastanowię się, jak coś wymyślę, napiszę. :D

 

EDIT:

MAM!

Sprawdza daną rzecz z największą ilością głosów i wylicza np 10% z tego co jest limitem od którego może zaliczyć na top.

Dobre?

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj tę średnią wymnażać przez logarytm o podstawie 10 z liczby głosów.

 

Wtedy średnia 10 da nam punktów:

0 - 1 głos

10 - 10 głosów

20 - 100 głosów

30 - 1000 głosów

 

Można zamiast logarytmu zastosować jakąś funkcję co ma asymptotę poziomą, żeby była górna granica tych punktów.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Hm, nad logarytmami nie pomyślałem, tylko czy przeskok ze 100 na 1000 nie będzie za duży. Może ogólnie od 0 do 100 liczyć głosy z zaokrągleniem w góre do pełnych 10 głosujących, a powyżej 100 co każde 100 w górę? Wtedy np. jak zagłosują 4 osoby, każda dajac 9/10, to średnią było by np. 36/10 = 3.6, a gdy 450, to 4050/500 = 8.1 ? Tylko czy z kolei nie jest to za bardzo krzywdzące przy dolnej ilości głosów, np. 401 głosów ?

Dość trudna sprawa jak się okazuje...

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem jak ty to liczysz. Nie rozumiem twojego algorytmu. Ja miałem na myśli coś takiego:

 

4 głosy 9/10 daje nam (4*9)/4 *log(4) = 9*log(4) = 5,42

450 głosów 9/10 daje nam (450*9)/450 *log(450) = 9*log(450) = 23,87

1000 głosów 9/10 da znów 27 więc różnica już będzie niewielka.

 

I oto chodzi by przy małej ilości głosów ta różnica była spora, ale by przy wielu głosach już to nie miało większego znaczenia.

Tylku tutaj te punkty nie mają górnego ograniczenia więc nie jest to żadna średnia.

Odnośnik do komentarza
Udostępnij na innych stronach

A to czaje. Mimo wszystko uważam, że przeskok za 100 na tysiąc, a nawet z 10000 na 100000 nie będzie za duży. Przy takiej ilości głosów już to nie powinno mieć wpływu.

 

EDIT:

A jak Ci za dużo to sobie strzel jaki logarytm naturalny, albo z pi dla szpanu. Albo i pierwiastek sześcienny jak chcesz. To już zależy od twoich preferencji.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ale jakbym wg. tego posortował wyniki, a wyświetlał średnią liczoną normalnym sposobem, to bym otrzymał już w miarę poprawną kolejność (fakt, że czasem 9.4 byłoby przed 9.8, ale własne o to chodzi, zeby lista najlepszych faktycznie nią była, a nie że 5 osób da 10/10 i już mają podium w top 10).

Odnośnik do komentarza
Udostępnij na innych stronach

Dla dziesięcio stopniowej skali ocen:

 

1-3 głosy >> Zawsze po pozostałych

4-10 głosów >> Zawsze po pozycjach z oceną 5 i wyżej ( jeżeli pozycja ma 31+ głosów ) i po pozycjach z oceną 7 i wyżej ( po pozycjach z przedziału 11-30 )

11-30 głosów >> Zawsze po pozycjach z oceną 8.5 i wyżej ( jeżeli pozycja ma 31+ głosów )

31 wzwyż >> Już jest na takie zróżnicowane głosów że większych limitów nie trzeba

 

W liczeniu głosów nie podoba mi się że praktycznie słabsza pozycja może być wyżej na liście jeżeli ma odpowiednio dużo głosów. Tutaj zaś ustalamy jakiś limit od kiedy liczba głosów staję się dosyć dobrym odpowiednikiem różnych opinii i możemy normalnie wtedy zliczać oceny od tej wartości.

Odnośnik do komentarza
Udostępnij na innych stronach

Google naprowadziło mnie na algorytm zwany "średnią Bayesa". Korzystają z tego m.in. na IMDB (pod listą jest opisane jak to wyliczyli). A tu: http://www.animenewsnetwork.com/encycloped...tings-anime.php można porównać wyniki tego algorytmu z średnią ważoną :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Tylko, że to nie jest optymalne. Tutaj chodzi o to, aby pobierać z bazy wyniki tak:

 

SELECT * FROM toplista ORDER BY wynik DESC LIMIT 10;

 

I żadnego porównywania już nie robić, oraz nie przeliczać wyników od nowa, gdy jakaś pozycja przekracza kolejny próg typu 10, 100 czy 1000 głosów zmieniając skalę. Chodzi o to, by skala od razu była uniwersalna.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...