Snooker ELO-Inspired Scores and Dashboard

Snooker Player Data Analytics

New ELO-inspired scoring to reflect latest forms and strength

Visualization and Interactive Dashboard available at HERE

Method A

In this approach, apart from typical ELO, recent abilities to make 70+ breaks are taken into consideration. Average score for all players is 1500.

ELO is handled on frame level

For a Match between player1 and player2, we have expected frame win rate for player1 as:

$$P_{1,2} = \frac{1}{1+e^{(S_1-S_2)/400}}$$

Where $S_1$ and $S_2$ are the scores of player1 and player2 respectively. After a match, the scores are updated as:

$$S_1’ = S_1 + K \cdot (F_1 - T_{1,2} \cdot P_{1,2})$$

$$S_2’ = S_2 + K \cdot (F_2 - T_{2,1} \cdot P_{2,1})$$

Where:

  • $F_1$ and $F_2$ are the actual frame wins for player1 and player2 respectively
  • $T_{1,2} = T_{2,1} = F_1 + F_2$ is the total frames played in the match
  • $P_{2,1} = 1 - P_{1,2}$ is the expected frame win rate for player2 against player1
  • $K$ is a constant that determines the sensitivity of score updates

This so far is standard frame-wise ELO, satisfying the Zero-Sum property, meaning the total score of both players remains constant after a match, because:

$$T_{1,2} = T_{2,1} = F_1 + F_2$$
$$P_{2,1} + P_{1,2} = 1$$

Count of 70+ breaks is introduced

$$S_1’’ = S_1’ + M \cdot (B_1 - G \cdot F_1) $$
$$S_2’’ = S_2’ + M \cdot (B_2 - G \cdot F_2) $$

Where:

  • $B_1$ and $B_2$ are the counts of 70+ breaks for player1 and player2 respectively
  • $G$, usually around 0.31-0.33, is the season global average of 70+ breaks per frame, calculated as total 70+ breaks divided by total frames in the season
  • $M$ is a constant that determines the weight of 70+ breaks in the score

Now the Zero-Sum property is no longer satisfied on the match level, since two players could play both well (many 70+) or bad and therefore have both positive or negative changes in scores.

However, on a season level, the average score of all players remains constant, because we compared player’s match performance against the seasonal average 70+ breaks per frame, and the total 70+ breaks and total frames are fixed for the season, and therefore the total score change from 70+ breaks across all players will sum to zero.

Method A score prior to 2026 World Open last 64:

Rank Player Name Latest Score
1 Zhao Xintong 2406.340808642514
2 Mark Selby 2378.5029682660784
3 Judd Trump 2328.046582784832
4 Wu Yize 2323.810588553531
5 Chang Bingyu 2293.6605320392305
6 John Higgins 2264.31645446841
7 Kyren Wilson 2236.3574342426523
8 Mark Allen 2228.2852619426403
9 Barry Hawkins 2191.193175970828
10 Zhou Yuelong 2187.0799682827574
11 Shaun Murphy 2178.3587654488315
12 Ronnie O’Sullivan 2123.3886251770477
13 Xiao Guodong 2109.266799325858
14 Jack Lisowski 2109.135987267064
15 Elliot Slessor 2092.8455557749594
16 Neil Robertson 2083.49485922483

A demonstration of Score evolution since 2022/2023 season for Judd Trump, Zhao Xintong and Mark Selby:

Method A Score Evolution

Method B

The main problem for Method A is that the number of total frames in a match is not fixed.

Expected Number of Frames won

Method B calculates the expected number of frames won by players. For a scenario when player 1 wins k frames and player 2 wins r frames, the probability of this scenario is calculated as:

$$P(F_1=k,F_2=r,k \gt r) = \binom{k+r-1}{r} \cdot P_{1,2}^k \cdot P_{2,1}^r$$

$$P(F_1=k,F_2=r,k \lt r) = \binom{k+r-1}{k} \cdot P_{1,2}^k \cdot P_{2,1}^r$$

Where $P_{1,2}$ and $P_{2,1}$ are the expected frame win rates for player1 and player2 respectively, calculated as in Method 1.

Considering all scenarios, the expected number of frames won by player1 and player 2 are:

$$E[F_1] = \sum_{k}{} \sum_{r}^{} k \cdot P(F_1=k,F_2=r)$$
$$E[F_2] = \sum_{k}{} \sum_{r}^{} r \cdot P(F_1=k,F_2=r)$$

Then the score updates are calculated as:

$$S_1’ = S_1 + K \cdot (F_1-E[F_1])$$
$$S_2’ = S_2 + K \cdot (F_2-E[F_2])$$

In this case, there is no match level zero-sum property. Take example of a match where Zhao Xintong best an amateur player 4-3:

  • Method A would deduct Zhao’s score because he has about 90+% expected frame win rate but only won 4 out of 7
  • Method B would increase Zhao’s score slightly because he won more frames than expected (but very close to 4)
  • Both Methods would increase the amateur player’s score significantly because he won much more frames than expected

Therefore, we need a solution to balance out the inflation of scores caused by Method B, introducing:

Score Decay and Recovery

For a match on day $t$ for a player. Check their last match’s date $t’$, if $\Delta t=t-t’>7$, it triggers decay or recovery before we evaluate the matches expected number of frames won by players.

  • if the player’s current score is below 1500 and their historical highest score, we “recover” their score by an amount proportional to $\Delta t$ and the difference between current score and historical highest, with a maximum cap.
  • else, if the player’s current score is above its historical average score, we “decay” their score by an amount proportional to $\Delta t$ and the difference between the current score and the historical average, with a maximum cap.

By adjusting the hyperparameters of decay and recovery, we can control the overall inflation of scores caused by Method B, keeping the overall average around 1500.

This “decay and recovery” mechanism also helps to reflect players’ current forms more accurately, as elite players who have been inactive for a while will have their skills regressed towards their average, and players with lower scores will recover from the break.

A important note to this method is that an initialization of players’ estimated scores are recommended (or a burn-in period), otherwise the historical average would not be accurate.

Method B score prior to 2026 World Open last 64:

Rank Player Name Latest Score
1 Mark Selby 2960.1461099128837
2 Zhao Xintong 2753.019490099193
3 Wu Yize 2546.3414952509206
4 John Higgins 2426.842646091861
5 Mark Allen 2391.3486734734875
6 Judd Trump 2333.2611272735026
7 Barry Hawkins 2284.461814312875
8 Ronnie O’Sullivan 2235.531035051619
9 Xiao Guodong 2234.5004336109746
10 Elliot Slessor 2213.436021451588
11 Jack Lisowski 2210.7400483689507
12 Kyren Wilson 2191.188032900559
13 Zhang Anda 2176.361755067192
14 Shaun Murphy 2159.3051323349814
15 Chang Bingyu 2128.725427902105
16 Chris Wakelin 2116.705502290573

A demonstration of Score evolution since 2022/2023 season for Judd Trump, Zhao Xintong and Mark Selby:

Method B Score Evolution

Prediction for 2026 World Open last 64:

source:

sourcecode:


Snooker ELO-Inspired Scores and Dashboard
https://fredfreddo.github.io/2026/03/13/Snooker-ELO-Inspired-Scores-and-Dashboard/
Author
Fredfreddo
Posted on
March 13, 2026
Licensed under