Most traditional ranking methods work with a simple update rule:
- A player's ability changes only when they play.
- If they do not play, their ability either stays the same or decreases due to inactivity.
- When a player wins, their ability goes up, and when they lose, it goes down.
However, this approach can create some unexpected results. For example:
- Imagine five players: A, B, C, D, and E. Player A beats B, but B then defeats C, D, and E. Since B has three wins while A has only one, traditional methods rank B higher than A. This seems unfair because A already proved they’re stronger by defeating B directly.
- Now consider players A and B with similar abilities. A takes a break from playing, while B continues but loses every match. B’s rating drops as expected, but A’s stays the same. This suggests A is still strong, even though their ability should be seen as comparable to B’s, which has now been revealed as weaker.
To address these issues, we propose a Bayesian method that uses a simple mathematical model for tennis matches, offering a fairer way to calculate rankings.
Each player
When player A faces player B, the outcome of each point is modeled as a Bernoulli random variable with probability
For doubles, a team’s ability is the average of its two players,
From the table below, we see how a difference in ability (
| 0 | 0.50 |
| 1 | 0.53 |
| 2 | 0.56 |
| 3 | 0.59 |
| 5 | 0.65 |
| 10 | 0.75 |
From the table, we can see:
- Differences close to zero indicate balanced players with roughly equal chances of winning.
- As the difference increases from one to three, the stronger player’s advantage grows steadily.
- Once the difference exceeds three, the outcome becomes predictable, as the stronger player is likely to win most points.
If
To regularize the solution, we add a prior distribution. Each ability
The loss function
After optimization, we shift and scale the final abilities so that the median rating is 100.
We can also reduce the impact of older matches by introducing weights
One way to define these weights is with an exponential decay:
where
Please see A01. Tutorial for an example of how to use this package.
If you have any questions, feel free to email me at [email protected].
