Search code examples
algorithmranking

How to rank a set of people based on competition results?


I'm having a bit of a brain melt here.

I have a set of people. They compete against each other in timed events. Each compeition yields a set of results showing everyone, ranked by their times.

From this data, I can see that (say) person A has beaten person B 73% of the time in 48 meetings. Simple.

Let's suppose I have people A B C D E F G though. For any pairing I can see who's the victor by comparing them to each other, but how do I come up with the "most accurate" OVERALL ranking?

Does it need to be some sort of iterative process? Any tips appreciated, I don't know where to start really!

(Each competition is not necessarily a complete set of all of the competitors, if that matters.)

I might like to further improve things by taking into account their relative times, not JUST "A beat B" or "B beat A". "A beat B by 6.3 seconds", etc etc. But let's keep things simple for now, I think!

Happy to give more info if needed, just tell me what!

Many thanks!


Solution

  • As a first step, I'd implement the elo rating system.

    http://en.wikipedia.org/wiki/Elo_rating_system

    It will do a decent job. You can get fancier with more complicated systems like Glicko or Trueskill, but I'd just go with Elo first and see if it is good enough for you.