An alternative rating system for snooker players

Here, I am going to make an alternative world ranking system for snooker. Currently, the world snooker rankings are based on a two-year rolling sum of prize money won by players in ranking tournaments. However, this may be a bit distorted for example because:

To create this ranking system I am going to use match, event and player data sourced from the excellent snooker.org via their API. I have obtained historical data back to the beginning of the 2013 season and have implemented a script to add the latest matches once per day from the Snooker.org API. As an example of the match data the table below has the last ten matches included in the ranking system.

Event Datetime Season Player1 Name Player1 Score Player2 Score Player2 Name
International Championship Qualifiers Sept. 18, 2026, 1:35 p.m. 2026 Michael Holt 3 6 Marco Fu
International Championship Qualifiers Sept. 18, 2026, 1:35 p.m. 2026 Martin O'Donnell 4 6 Julien Leclercq
International Championship Qualifiers Sept. 18, 2026, 1:35 p.m. 2026 Xiao Guodong 4 6 Dylan Emery
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Noppon Saengkham 3 6 Sam Craigie
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Daniel Wells 6 2 Oliver Brown
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Aaron Hill 6 3 Antoni Kowalski
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Matthew Selt 2 6 Ross Muir
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Long Zehuang 6 2 Phil O'Kane
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 John Higgins 6 2 Craig Steadman
International Championship Qualifiers Sept. 18, 2026, 6:30 p.m. 2026 Jack Lisowski 5 6 Ashley Carty

Using the full database of snooker matches I can calculate an alternative player rating system. This rating system works by initialising all players ratings at a chosen level before their first match and then adjusting the ratings after each match based on each of the players ratings before the match and the outcome of the match. The current ratings are given in the table below:

Ranking Player Rating
1 Judd Trump 1648.04
2 Mark Selby 1627.32
3 Zhao Xintong 1619.32
4 Kyren Wilson 1576.46
5 Shaun Murphy 1559.69
6 Wu Yize 1558.20
7 John Higgins 1555.98
8 Mark Allen 1550.71
9 Mark Williams 1538.09
10 Barry Hawkins 1521.48
11 Ali Carter 1519.55
12 Zhou Yuelong 1514.90
13 Ronnie O'Sullivan 1513.31
14 Neil Robertson 1512.15
15 Jak Jones 1506.48
16 Xiao Guodong 1501.46
17 Zhang Anda 1489.39
18 Ding Junhui 1481.64
19 Chang Bingyu 1474.36
20 Stuart Bingham 1471.23
21 Luca Brecel 1456.29
22 Pang Junxu 1452.60
23 Hossein Vafaei 1447.43
24 David Gilbert 1442.06
25 Elliot Slessor 1438.07
26 Jack Lisowski 1436.42
27 Anthony McGill 1436.31
28 Si Jiahui 1435.47
29 Noppon Saengkham 1434.59
30 Stephen Maguire 1434.01
31 Chris Wakelin 1431.35
32 Matthew Selt 1429.59
33 Stan Moody 1425.47
34 Yuan Sijun 1423.27
35 Joe O'Connor 1419.23
36 Sam Craigie 1407.16
37 Ryan Day 1405.94
38 Gary Wilson 1403.91
39 Liam Highfield 1403.68
40 Tom Ford 1401.50
41 Ricky Walden 1401.14
42 Jackson Page 1401.01
43 Aaron Hill 1399.08
44 Jiang Jun 1391.30
45 Xu Si 1389.16
46 Daniel Wells 1388.52
47 Robbie Williams 1385.60
48 Fan Zhengyi 1384.26
49 Lei Peifan 1376.24
50 Thepchaiya Un-Nooh 1372.44
51 Martin O'Donnell 1370.15
52 Liam Davies 1360.99
53 Marco Fu 1357.69
54 He Guoqiang 1355.54
55 Liu Hongyu 1355.35
56 Scott Donaldson 1354.92
57 Ben Woollaston 1349.47
58 Lyu Haotian 1349.01
59 Matthew Stevens 1347.81
60 Dylan Emery 1346.67
61 Louis Heathcote 1346.30
62 Julien Leclercq 1341.23
63 Gao Yang 1338.52
64 Michael Holt 1336.83
65 Ben Mertens 1335.68
66 Oliver Lines 1334.54
67 Jimmy Robertson 1328.58
68 Long Zehuang 1328.10
69 Liam Pullen 1326.42
70 Yao Pengcheng 1326.03
71 Zak Surety 1325.73
72 Alfie Burden 1321.07
73 Ishpreet Chadha 1317.56
74 Jamie Jones 1309.84
75 David Grace 1303.20
76 Jimmy White 1301.32
77 David Lilley 1300.07
78 Artemijs Zizins 1298.09
79 Wang Xinbo 1297.32
80 Steven Hallworth 1296.69
81 Jamie Clarke 1295.75
82 Antoni Kowalski 1295.25
83 Iulian Boiko 1294.35
84 Ashley Carty 1290.64
85 Jordan Brown 1289.78
86 Andrew Higginson 1288.78
87 Ashley Hugill 1288.07
88 Ross Muir 1286.55
89 Ian Burns 1285.11
90 Igor Figueiredo 1273.57
91 Mitchell Mann 1270.88
92 Oliver Sykes 1262.83
93 Cheung Ka Wai 1258.56
94 Lan Yuhao 1252.83
95 Alexander Ursenbacher 1250.49
96 Gong Chenzhi 1246.60
97 Huang Jiahao 1242.46
98 Stuart Carrington 1240.76
99 Michał Szubarczyk 1237.64
100 Michael Larkov 1237.08
101 Hammad Miah 1236.31
102 Luo Zetao 1231.01
103 Deng Haohui 1228.86
104 Craig Steadman 1228.70
105 Liu Yang 1224.69
106 Zhao Hanyang 1221.98
107 Thanawat Tirapongpaiboon 1218.35
108 Liu Wenwei 1217.97
109 Florian Nüßle 1214.78
110 Xu Yichen 1213.26
111 Paul Norris 1204.65
112 Mateusz Baranowski 1203.93
113 Phil O'Kane 1202.55
114 Oliver Brown 1195.12
115 Liam Graham 1188.78
116 Sahil Nayyar 1188.21
117 Leone Crowley 1184.07
118 Chatchapong Nasa 1183.84
119 Connor Benzey 1174.71
120 Mahmoud El Hareedy 1171.90
121 Fergal Quinn 1138.38
122 Anton Kazakov 1111.41
123 Sean O'Sullivan 1108.96

At the moment the rating system is quite simple and not optimised but I intend to do some work to calibrate the rating system to maximise some chosen evaluation metric when time allows.