Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>After having thought things through, the <strong>best</strong> solution for this film ranking is as follows.</p> <p>Required data:</p> <ul> <li>The number of votes taken on each pairing of films. <ul> <li>And also a sorted version of this data grouped like in radix sort</li> </ul></li> <li>How many times each film was voted for in each pairing of films</li> </ul> <p>Optional data:</p> <ul> <li>How many times each film has been involved in a vote for each user</li> </ul> <p>How to select a vote for a user:</p> <ul> <li>Pick out a vote selection from the sorted list in the lowest used radix group (randomly)</li> <li>Optional: use the user's personal voting stats to filter out films they've been asked to vote on too many times, possibly moving onto higher radix buckets if there's nothing suitable.</li> </ul> <p>How to calculate the ranking score for a film:</p> <ul> <li>Start the score at 0</li> <li>Go through each other film in the system <ul> <li>Add <code>voteswon / votestaken</code> versus this film to the score <ul> <li>If no votes have been taken between these two films, add 0.5 instead <em>(This is of course assuming you want new films to start out as average in the rankings)</em></li> </ul></li> </ul></li> </ul> <p><em>Note: The optional stuff is just there to stop the user getting bored, but may be useful for other statistics also, especially if you include how many times they voted for that film over another.</em></p> <p>Making sure that newly added films have statistics colleted on them ASAP and very evenly distributed votes across all existing films is vital to keeping stats correct for the rest of the films. It may be worth staggering the entry of a bunch of new films to the system to avoid temporary glitches in the rankings (though not immediate nor severe).</p> <p>===THIS IS THE ORIGINAL ANSWER===</p> <p>The problem is actually very easy. I am assuming here that you want to order by preference to vote for the film i.e. the #1 ranked film is the film that is most likely to be chosen in the vote. If you make it so that in each vote, you choose two films completely at random you can calculate this with simple maths.</p> <p>Firstly each selection of two films to vote on is equally likely, so results from each vote can just be added together for a score (saves multiplying by 1/nC2 on everything). And obviously the probability of someone voting for one specific film against another specific film is just <code>votesforthisfilm / numberofvotes</code>.</p> <p>So to calculate the score for one film, you just sum <code>votesforthisfilm / numberofvotes</code> for every film it can be matched against.</p> <p>There is a little trouble here if you add a new film which hasn't had a considerable number of votes against all the other films, so you probably want to leave it out of the rankings until a number of votes has built up.</p> <p>===WHAT FOLLOWS IS MOSTLY WRONG AND IS MAINLY HERE FOR HISTORICAL CONTEXT===</p> <p>This scoring method is derived from a Markov chain of your voting system, assuming that all possible vote questions were equally likely. <em>[This first sentence is wrong because making all vote questions have to be equally likely in the Markov chain to get meaningful results]</em> Of course, this is not the case, and actually you can fix this as well, since you know how likely each vote question was, it's just the number of votes that have been done on that question! <em>[The probability of getting a particular vote question is actually irrelevant so this doesn't help]</em> In this way, using the same graph but with the edges weighted by votes done...</p> <p>Probability of getting each film given that it was included in the vote is the same as probability of getting each film and it being in the vote divided by the probability it was included in the vote. This comes to <code>sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes</code> divided by <code>sumoverallvotes(numberofvotes) / totalnumberofvotes</code>. With much cancelling this comes to <code>votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm</code>. Which is really simple!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload