1 vs 1 głos: Oblicz ocen (Flickchart.com)

Zamiast Oceniać przedmioty z ocenami od 1 do 10, chciałbym mieć "Walki 1 na 1". Dwa elementy są wyświetlane obok siebie, a Ty wybierasz ten, który lubisz bardziej. Na podstawie tych wyników "walki" algorytm powinien obliczać oceny dla każdego przedmiotu.

Możesz zobaczyć to podejście na Flickchart.com gdzie filmy są oceniane za pomocą tego podejścia.

Wygląda tak:

Zrzut ekranu http://i45.tinypic.com/2nv3ugy.jpg

As you can widzisz, przedmioty są wypychane w górę, jeśli wygrają "walkę". Ranking zawsze się zmienia w zależności od wyników "walki". Ale nie może to być oparte tylko na cytacie wygranej (tutaj 54%), ponieważ trudniej jest wygrać z "Titanic" niż z" 25th Hour " lub tak.

Jest kilka rzeczy, które są dla mnie dość niejasne: - Jak obliczane są oceny? Jak zdecydować, który film znajdzie się na pierwszym miejscu w rankingu? Trzeba wziąć pod uwagę, jak często przedmioty wygrywa i jak dobre są pobite przedmioty. - Jak aby wybrać, które elementy mają "walkę"?

Oczywiście, nie możesz mi powiedzieć, jak Flickchart dokładnie robi to wszystko. Ale może powiesz mi, jak można to zrobić. Z góry dzięki!

Author: Charles Stewart, 2009-12-06

9 answers

Może to nie jest dokładnie to, co robi flickchart, ale możesz użyć wariantu algorytmu ELO stosowanego w szachach (i innych sportach), ponieważ są to zasadniczo walki / gry, które wygrywają / przegrywają.

Zasadniczo wszystkie filmy zaczynają się od 0 wygranych/przegranych i za każdym razem, gdy wygrywają, otrzymują określoną liczbę punktów. Zwykle masz średnią około 20 (ale każda liczba wystarczy), a wygrana z filmem o tej samej ocenie co Ty Da dokładnie to 20. Wygrana ze złym filmem może dać około 10 punktów, podczas gdy wygrana z lepszym filmem może dać 30 punktów. Na odwrót, tracąc do dobrego filmu tracisz tylko 10 punktów, ale jeśli tracisz do złego filmu, tracisz 30 punktów.

Specyfika algorytmu znajduje się w linku do Wikipedii.

 8
Author: Christian P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-06 16:53:19

Jak obliczane są oceny? Jak zdecydować, który film znajdzie się na pierwszym miejscu w rankingu? Trzeba wziąć pod uwagę, jak często przedmioty wygrywa i jak dobre są pobite przedmioty.

To, czego chcesz, to ocena ważona, zwana również estymacją Bayesowską.

Myślę, że Najlepsze 250 filmów IMDB jest lepszym punktem wyjścia do stworzenia witryny rankingowej. Niektóre filmy mają ponad 300 000 głosów, podczas gdy inne mają mniej niż 50 000. IMDB wykorzystuje szacunki bayesowskie do oceniaj filmy przeciwko sobie bez niesprawiedliwego ważenia popularnych filmów. Algorytm podany jest na dole strony:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C Gdzie:

  • R = średnia dla filmu (średnia) = (Ocena)
  • v = Liczba głosów na film = (głosów)
  • m = Minimalna liczba głosów wymagane do umieszczenia w Top 250 (obecnie 3000)
  • C = średnia liczba głosów w całym raporcie (obecnie 6.9)

Tylko dla Top 250 głosy za: uwzględnia się stałych wyborców.

Nie wiem, jak IMDB wybrał 3000 jako swój minimalny głos. Mogli wybrać 1000 lub 10000, a lista byłaby mniej więcej taka sama. Może używają "średniej liczby głosów po 6 tygodniach w kasie", a może używają metody prób i błędów.

W każdym razie, to nie ma znaczenia. Powyższa formuła jest w zasadzie standardem normalizacji głosów na stronach rankingowych i jestem prawie pewien, że Flickrchart używa czegoś podobnego w tle.

Formuła działa tak dobrze, ponieważ "ciągnie" oceny w kierunku średniej, więc oceny Powyżej średniej są nieznacznie zmniejszone, oceny Poniżej średniej są nieznacznie zwiększone. jednakże Siła przyciągania jest odwrotnie proporcjonalna do liczby głosów, jakie ma film. Więc filmy z kilkoma głosami są bardziej agresywnie przyciągane w stronę średniej niż filmy z dużą ilością głosów. Oto dwa punkty danych, które demonstrują własność:

Rank  Movie            Votes            Avg Rating        Weighted Rating
----  -----            -----            ----------        ---------------
219   La Strada        15,000+          8.2               8.0
221   Pirates of the   210,000+         8.0               8.0
      Caribbean 2

Oglądalność obu filmów jest zmniejszona, ale La Strada jest bardziej dramatyczna, ponieważ ma mniej głosów i dlatego nie jest tak reprezentatywna jak oglądalność dla PotC.


W twoim konkretnym przypadku, masz dwa przedmioty w "walce". Prawdopodobnie powinieneś zaprojektować swoją tabelę w następujący sposób:

Items
-----
ItemID (pk)
FightsWon (int)
FightsEngaged (int)

Średnia ocena to Rating ważony oblicza się według powyższego wzoru.

Gdy użytkownik wybiera zwycięzcę w walce, zwiększ pole walki zwycięskiego przedmiotu o 1, zwiększ pole walki obu przedmiotów o 1.

Mam nadzieję, że to pomoże! - Juliet
 5
Author: Juliet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-11 03:47:55

Od jakiegoś czasu sam bawiłem się problemem rankingu pozycji za pomocą porównania w parach i chciałem poświęcić czas na opisanie pomysłów, które do tej pory wymyśliłem.

Na razie sortuję po <fights won> / <total fights>, najpierw najwyższa. To działa dobrze, jeśli tylko Ty głosujesz, lub jeśli głosuje Wiele osób. W przeciwnym razie może szybko stać się niedokładne.

Problem polega na tym, jak wybrać, z którymi dwoma przedmiotami walczyć. Jedna rzecz, która wydaje się działać dobrze (subiektywnie) jest pozwolić przedmiotowi, który ma najmniej walczy do tej pory, walczyć z przypadkowym przedmiotem. Prowadzi to do stosunkowo jednolitej liczby walk o pozycje (- > dokładność), kosztem być może nudne dla wyborców. Często będą porównywać najnowszy przedmiot z czymś innym, co jest trochę nudne. Aby to złagodzić, możesz wybrać n przedmioty o najniższej liczbie walk i wybrać jeden z nich losowo jako pierwszy zawodnik.

Wspomniałeś, że chcesz, aby zwycięstwa z silnymi przeciwnikami liczą się bardziej niż z słabymi. Jak wspomniano w innych postach powyżej, systemy rankingowe stosowane w szachach i tym podobnych (Elo, Glicko) mogą działać. Osobiście chciałbym użyć TrueSkill Microsoftu, ponieważ wydaje się być najdokładniejszy, a także zapewnia dobry sposób, aby wybrać dwa przedmioty do pit przeciwko sobie-te z najwyższym prawdopodobieństwem remisu obliczonym przez TrueSkill. Ale niestety, moje rozumienie matematyki nie jest wystarczająco dobre, aby naprawdę zrozumieć i zaimplementuj szczegóły systemu, a i tak może on podlegać opłatom licencyjnym...

Zbiorowy wybór: konkurencyjne systemy rankingowe ma ładny przegląd kilku różnych systemów rankingowych, jeśli potrzebujesz więcej informacji / inspiracji.

Oprócz systemów rankingowych, można również wypróbować różne proste systemy drabinkowe. Jeden przykład:

  1. Randomizuj listę przedmiotów, aby były w rankingu od 1 do n
  2. wybierz dwa przedmioty losowo i pozwól im walczyć
  3. Jeśli zwycięzca jest wyżej od przegranego: nie rób nic
  4. Jeśli przegrany jest wyżej od zwycięzcy:
    • Jeśli przegrany znajduje się bezpośrednio nad zwycięzcą: zamień je
    • Else: Przesuń zwycięzcę w górę drabiny x % w stronę przegranego w walce.
  5. Goto 2

Jest to stosunkowo niestabilne na początku, ale powinno się poprawić w czasie. Jednak nigdy nie przestaje się wahać.

Mam nadzieję, że chociaż trochę pomogę.
 2
Author: DataWraith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 18:15:47

Jeśli chodzi o flickchart, trochę się nim bawiłem i uważam, że system ocen jest dość nieskomplikowany. W pseudo-kodzie moim zdaniem wygląda to mniej więcej tak:

if rank(loser) == null and rank(winner) == null
    insert loser at position estimated from global rank
    insert winner at position estimated from global rank
else if rank(winner) == null or rank(winner) < rank(loser)
    then advance winner to loser's position and demote loser and all following by 1
Dlaczego tak myślę? Po pierwsze, jestem całkowicie przekonany, że ich bayesowskie kartoteki nie opierają się na starannym wydobyciu moich poprzednich wyborów. Wydaje się, że nie mają sposobu, aby zgadnąć, że ponieważ lubię Powrót Jedi, że lubię Imperium kontratakuje. W rzeczywistości, nie mogą zrozumieć, że ponieważ widziałem sam w domu 2, że może widziałem sam w domu 1. Po setkach oglądalności, wybór nie wyszedł.

Po drugie, jeśli spojrzysz na powyższy kod, Możesz znaleźć mały błąd, który na pewno zauważysz na stronie. Możesz zauważyć, że czasami dokonasz wyboru, a zwycięzca przesunie się o jeden . Wydaje się, że dzieje się tak tylko wtedy, gdy przegrany nie został wcześniej dodany. Domyślam się, że to, co się dzieje, to to, że przegrany jest dodawany wyżej niż zwycięzca.

Poza tym, zauważysz, że rankingi nie zmieniają się w ogóle, chyba że film o niższej pozycji jest lepszy niż film o wyższej pozycjibezpośrednio . Nie wydaje mi się, aby utrzymywano prawdziwe wyniki: strona wydaje się być całkowicie pozbawiona pamięci, z wyjątkiem rangi Porządkowej każdego filmu i Twojej najnowszej oceny.

 2
Author: David Berger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-15 21:59:15

A może chcesz użyć wariantu PageRank zobacz prof. Wilf ' s cool description .

 1
Author: JanHudecek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-09 11:32:38

Po przemyśleniu sprawy, Najlepsze rozwiązanie tego rankingu jest następujące.

Wymagane dane:

  • liczba głosów oddanych na poszczególne pary filmów.
    • a także posortowana Wersja tych danych pogrupowana jak w Radix sort
  • ile razy głosowano na każdy film w każdym parowaniu filmów

Dane opcjonalne:

  • ile razy każdy film był zaangażowany w głosowanie na każdy user

Jak wybrać głos na użytkownika:

  • Wybierz wybór głosów z posortowanej listy w najniższej używanej grupie radix (losowo)
  • Opcjonalnie: użyj osobistych statystyk głosowania użytkownika, aby odfiltrować filmy, na które został poproszony, aby głosować zbyt wiele razy, prawdopodobnie przechodząc na wyższe wiadra radix, jeśli nie ma nic odpowiedniego.

Jak obliczyć wynik rankingu dla Filmu:

  • Zacznij wynik od 0
  • przejść przez siebie film w systemie
    • Dodaj voteswon / votestaken kontra ten film do partytury
      • Jeśli nie oddano głosów między tymi dwoma filmami, dodaj 0,5 (oczywiście zakładając, że chcesz, aby nowe filmy zaczynały się jako średnie w rankingach)

Uwaga: opcjonalne rzeczy są po prostu po to, aby użytkownik nie nudził się, ale mogą być przydatne również dla innych statystyk, zwłaszcza jeśli uwzględnisz, ile razy głosowali na ten film kolejny.

Upewnienie się, że nowo dodane filmy mają statystyki zebrane na nich jak najszybciej i bardzo równomiernie rozłożone głosy we wszystkich istniejących filmach jest niezbędne do utrzymania poprawnych statystyk dla reszty filmów. Być może warto wprowadzić kilka nowych filmów do systemu, aby uniknąć chwilowych usterek w rankingach (choć nie natychmiastowych ani poważnych).

= = = TO JEST ORYGINALNA ODPOWIEDŹ== =

Problem jest bardzo prosty. Zakładam, że ty chcesz zamówić według preferencji głosuj na film tzn. Film #1 w rankingu to film, który najprawdopodobniej zostanie wybrany w głosowaniu. Jeśli zrobisz to tak, aby w każdym głosowaniu wybrać dwa filmy całkowicie losowo, możesz to obliczyć za pomocą prostej matematyki.

Po pierwsze każdy wybór dwóch filmów do głosowania jest równie prawdopodobny, więc wyniki z każdego głosowania można po prostu zsumować dla wyniku (oszczędza mnożenie przez 1 / nC2 na wszystkim). I oczywiście prawdopodobieństwo, że ktoś zagłosuje na konkretny film w stosunku do innego konkretnego filmu to po prostu votesforthisfilm / numberofvotes.

Więc aby obliczyć wynik dla jednego filmu, wystarczy zsumować votesforthisfilm / numberofvotes dla każdego filmu, z którym może być dopasowany.

Jest mały problem, jeśli dodasz nowy film, który nie ma znacznej liczby głosów w stosunku do wszystkich innych filmów, więc prawdopodobnie chcesz go pominąć w rankingu, dopóki liczba głosów Nie wzrośnie.

= = = TO, CO NASTĘPUJE, JEST W WIĘKSZOŚCI BŁĘDNE I JEST TU GŁÓWNIE DLA HISTORYCZNYCH CONTEXT= = =

Ta metoda punktacji wywodzi się z łańcucha Markowa Twojego systemu głosowania, zakładając, że wszystkie możliwe pytania dotyczące głosowania były równie prawdopodobne. [to pierwsze zdanie jest błędne, ponieważ tworzenie wszystkich pytań do głosowania musi być równie prawdopodobne w łańcuchu Markowa, aby uzyskać znaczące wyniki] oczywiście, tak nie jest, a w rzeczywistości możesz to również naprawić, ponieważ wiesz, jak prawdopodobne było każde pytanie do głosowania, to tylko liczba głosów, które zostały zrobione na tym pytanie! [prawdopodobieństwo uzyskania konkretnego pytania głosowania jest w rzeczywistości nieistotne, więc to nie pomaga] {47]} w ten sposób, używając tego samego grafu, ale z krawędziami ważonymi przez głosy zrobione...

Prawdopodobieństwo otrzymania każdego filmu biorąc pod uwagę, że został uwzględniony w głosowaniu, jest takie samo jak prawdopodobieństwo otrzymania każdego filmu i to, że jest w głosowaniu podzielone przez prawdopodobieństwo, że został uwzględniony w głosowaniu. Jest to sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes podzielone przez sumoverallvotes(numberofvotes) / totalnumberofvotes. Z dużym odwołaniem dochodzi do votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm. Co jest naprawdę proste!

 1
Author: KernelJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-16 06:49:32

Http://en.wikipedia.org/wiki/Maximize_Affirmed_Majorities?

Algorytm Veryblinddate voting algorithm (Veryblinddate voting algorithm) - algorytm voting voting voting algorithm (Veryblinddate voting algorithm).]}
 0
Author: Stobor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 18:50:23

Wydaje mi się, że taki scenariusz 1 na 1 może być rodzajem analizy zespolonej zwanej wyborem dyskretnym . Widzę je dość często w ankietach internetowych do badań rynkowych. Klient jest zazwyczaj proszony o wybór pomiędzy dwoma różnymi zestawami funkcji, które preferują najbardziej. Niestety jest to dość skomplikowane(dla faceta nie-Statystyki jak ja), więc może mieć trudności ze zrozumieniem.

 0
Author: Joe Phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 06:36:19

Serdecznie polecam książkę Programming Collective Intelligence do wszelkiego rodzaju ciekawych algorytmów i analizy danych w tym zakresie.

 -1
Author: DanDan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-15 15:13:00