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
Xi'an Grand Prix Qualifiers Sept. 2, 2025, 6:07 p.m. 2025 Jordan Brown 5 1 Oliver Brown
Xi'an Grand Prix Qualifiers Sept. 2, 2025, 6:07 p.m. 2025 Luca Brecel 0 5 Sunny Akani
Xi'an Grand Prix Qualifiers Sept. 2, 2025, 6:07 p.m. 2025 Jamie Jones 5 1 Connor Benzey
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Jimmy Robertson 5 2 Cheung Ka Wai
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Aaron Hill 5 2 Liu Wenwei
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Mark Davis 5 1 Reanne Evans
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Barry Hawkins 5 0 Hatem Yassin
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Hossein Vafaei 0 5 Jiang Jun
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Pang Junxu 3 5 Wang Yuchen
Xi'an Grand Prix Qualifiers Sept. 3, 2025, 8:59 a.m. 2025 Stephen Maguire 5 2 Bai Yulu

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 1649.95
2 Kyren Wilson 1619.35
3 Xiao Guodong 1559.60
4 John Higgins 1559.40
5 Neil Robertson 1558.98
6 Mark Selby 1557.92
7 Ronnie O'Sullivan 1552.23
8 Mark Allen 1551.36
9 Mark Williams 1525.88
10 Zhao Xintong 1525.77
11 Joe O'Connor 1519.28
12 Barry Hawkins 1515.15
13 Ali Carter 1496.49
14 Ding Junhui 1496.44
15 Luca Brecel 1492.23
16 Hossein Vafaei 1480.07
17 Si Jiahui 1479.22
18 Shaun Murphy 1478.44
19 Stephen Maguire 1477.90
20 Matthew Selt 1462.54
21 Chris Wakelin 1453.93
22 Yuan Sijun 1449.40
23 Wu Yize 1448.84
24 Ricky Walden 1448.73
25 Elliot Slessor 1448.60
26 Jak Jones 1443.91
27 David Gilbert 1431.74
28 Zhang Anda 1428.83
29 Jack Lisowski 1428.07
30 Pang Junxu 1425.71
31 Gary Wilson 1421.71
32 Cao Yupeng 1420.40
33 Stuart Bingham 1417.99
34 Thepchaiya Un-Nooh 1411.42
35 Ben Woollaston 1406.67
36 Anthony McGill 1401.58
37 Zhou Yuelong 1397.84
38 Ryan Day 1396.80
39 Stan Moody 1396.46
40 Jackson Page 1396.14
41 Xu Si 1392.54
42 Sam Craigie 1391.89
43 Noppon Saengkham 1390.07
44 Tom Ford 1389.36
45 Graeme Dott 1388.42
46 Martin O'Donnell 1381.87
47 Aaron Hill 1380.08
48 Oliver Lines 1377.28
49 Lyu Haotian 1376.89
50 Matthew Stevens 1376.76
51 Daniel Wells 1369.84
52 Lei Peifan 1369.65
53 Sunny Akani 1360.25
54 Jamie Jones 1359.19
55 Scott Donaldson 1359.14
56 Fan Zhengyi 1358.36
57 Mark Davis 1355.54
58 Robbie Williams 1353.83
59 Jimmy Robertson 1353.50
60 Marco Fu 1352.69
61 He Guoqiang 1348.70
62 Long Zehuang 1348.43
63 Michael Holt 1344.91
64 Robert Milkins 1343.19
65 David Lilley 1340.83
66 Chang Bingyu 1339.77
67 Zak Surety 1336.65
68 Liu Hongyu 1333.07
69 Louis Heathcote 1322.61
70 Liam Davies 1312.75
71 Ishpreet Chadha 1310.44
72 Ben Mertens 1305.62
73 Dylan Emery 1304.68
74 Jimmy White 1300.42
75 Jordan Brown 1297.65
76 Antoni Kowalski 1297.33
77 Steven Hallworth 1295.56
78 Jiang Jun 1293.68
79 Liam Highfield 1290.37
80 David Grace 1288.22
81 Duane Jones 1279.21
82 Gong Chenzhi 1274.44
83 Allan Taylor 1272.00
84 Ken Doherty 1271.27
85 Artemijs Zizins 1269.83
86 Alexander Ursenbacher 1269.68
87 Gao Yang 1268.98
88 Julien Leclercq 1268.83
89 Ross Muir 1267.32
90 Yao Pengcheng 1260.46
91 Sanderson Lam 1258.98
92 Ian Burns 1258.56
93 Bulcsu Revesz 1258.27
94 Lan Yuhao 1253.86
95 Chatchapong Nasa 1253.07
96 Lim Kok Leong 1252.45
97 Wang Yuchen 1250.71
98 Michał Szubarczyk 1243.99
99 Iulian Boiko 1239.19
100 Xu Yichen 1239.05
101 Cheung Ka Wai 1238.92
102 Florian Nüßle 1237.04
103 Amir Sarkhosh 1236.02
104 Liu Wenwei 1233.49
105 Zhao Hanyang 1233.29
106 Connor Benzey 1230.65
107 Sahil Nayyar 1228.22
108 Haris Tahir 1227.88
109 Leone Crowley 1226.07
110 Mateusz Baranowski 1225.55
111 Liam Pullen 1222.64
112 Oliver Brown 1217.77
113 Huang Jiahao 1215.69
114 Mohammed Shehab 1214.27
115 Bai Yulu 1211.85
116 Farakh Ajaib 1209.26
117 Liam Graham 1204.67
118 Mitchell Mann 1203.43
119 Haydon Pinhey 1197.33
120 Fergal Quinn 1189.18
121 Robbie McGuigan 1188.16
122 Jonas Luz 1173.40
123 Chris Totten 1171.21
124 Kreishh Gurbaxani 1166.47
125 Hatem Yassin 1146.04
126 Ng On Yee 1144.09
127 Reanne Evans 1097.58
128 Mink Nutcharut 1045.30

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.