Administratorzy gnysek Opublikowano 3 Marca 2011 Administratorzy Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Platyna Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 Wrzucałbym do topów dopiero po osiągnięciu pewnego limitu liczby głosów. Ewentualnie można wykluczać głosy jakoś znacznie odstające od średniej, ale to chyba bez sensu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Marca 2011 Autor Administratorzy Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Czarny Ass Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
GlonyIPorosty Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 Spróbuj zastosować głosy o różnej sile np. sila_glosu=ocena+(sqrt(ilość głosów)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Marca 2011 Autor Administratorzy Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Platyna Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Marca 2011 Autor Administratorzy Udostępnij Opublikowano 3 Marca 2011 Ja liczyłem bez logarytmów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Marca 2011 Autor Administratorzy Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Crackkk-GM Opublikowano 3 Marca 2011 Udostępnij Opublikowano 3 Marca 2011 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 Więcej opcji udostępniania...
Snake Opublikowano 4 Marca 2011 Udostępnij Opublikowano 4 Marca 2011 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 Więcej opcji udostępniania...
pablo1517 Opublikowano 4 Marca 2011 Udostępnij Opublikowano 4 Marca 2011 Może po prostu porównuj ile osób zagłosowało na daną pozycję. Jeśli mają zbliżone oceny i jeśli jedna z nich swoją ocenę ma z ilości głosów przekraczającej o 50% ilość głosów innej pozycji, to dajesz jej wyższy priorytet? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Marca 2011 Autor Administratorzy Udostępnij Opublikowano 4 Marca 2011 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 Więcej opcji udostępniania...
Kofel Opublikowano 4 Marca 2011 Udostępnij Opublikowano 4 Marca 2011 Sam jesteś nieoptymalny. Wiesz co to cache? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę