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 in开发者_Python百科fo if needed, just tell me what!
Many thanks!
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.
You can use Elo Rating System (used in chess to evaluate players around the world).
I think it works the following way: each player starts with a given number of points. When two players challenge each other they will win or lose a different amount of points, based on the points that each player has.
Losing agains someone much stronger than you won't make you lose as much points as if you were playing against someone within your level (or below it). I think that the total points may be different after the match. For example, one player could win 10 points and the other lose 5, creating 5 new points in the system.
I believe this algorithm was used in Hot or not.
Some similar alternatives: Glicko Rating System and Chessmetrics
精彩评论