New method for ranking NCAA tennis players

Ed note — the full article (with rankings) is posted here, I will get more technical below.

I decided awhile back that the way players are ranked in the fall by the ITA is a bit arbitrary. I am not trying to be critical of the ITA, because trying to rank singles players across the country before they’ve played a single match is not only extremely difficult, not only from a pure mechanical standpoint, but also politically.

There are kids now who don’t even play ITA tennis in the fall and stick to the plethora of Futures and Challengers that make up the Oracle USTA Pro Circuit Collegiate Series. Some don’t play at all at are busy either catching up on studies or rehabbing (or both). My idea was to create a system that uses only results between college players for the school year and that’s it. If you are ranking players and this determines whether they get into the NCAA’s or not, that should be the only thing that matters.

With that in mind, I decided to create my own ranking system for the men. Here was my criteria:

  1. Any and all players who played a D1 match this fall were eligible, as were any D1 known players who played on the Pro Circuit from the last week of August until last week in Tallahassee.
  2. Only matches between D1 players were eligible. I know this limits the number of matches that counted on the circuit, but that’s the only way to be consistent.
  3. To maintain some baseline consistency, I used my system for the 2015-16 school year (applying the same rules) and created prior rankings for those returning this fall. I felt that this was important to give upperclassmen more weight. I did not use any previous year Pro Circuit matches, only NCAA D1 matches.
  4. Matches were weighted. Regular matches were standard weight, while Futures and USTA/ITA Regionals matches counted a little more and Challengers, The All-American and Indoors counted a little more.

This system is not perfect by any means but with the limited data so far this season, it seems fair.

Ranking the Division I Men’s Tennis Players Using Trueskill for the Fall Season

I was fooling around with some ideas about the season and decided I would put out some rankings for the fall half of the season. Sure I could write something or maybe use UTR, but what do college tennis players like even more than tennis? That’s right, video games. So i honor of this, I decided to use Microsoft’s Trueskill algorithm to rank how the fall season went (based on what has been entered into the ITA database as of this morning–11/11)…

posted here on my college tennis site

From Saidkarimov to Djokovic in 11 easy steps — Or How a player with 1 ATP Point has an Indirect over the World Number One

We’ve all played that game I beat so-and-so, who beat so-and-so, so by the transitive property, I also beat that player.

Yesterday I wrote about the path from Australian Chris Fletcher’s indirect win over the world’s top-ranked player, Novak Djokovic. I was knee-deep into the research on that when I discovered it counted walkovers.

I rewrote a little code and today I top that. No walkovers, longer paths.

Our journey this time starts in Uzbekistan where 18 year old Saida’lo Saidkarimov defeats Sarvar Ikramov in the second round of the Tashkent Challenger. Saidkarimov is a wild card and only garners one main draw victory this year (at Uzbekistan F4) and sits appropriately ranked 2150.

Ikramov is a former top-600 player. In 2012, he reached a high of 535. In 2015 at the Samarkand Challenger, he defeated another fellow Uzbek, Anton Djamalov, 61 62 in the first round of qualifying.

Djamalov is currently unranked and has only ever reached a career high of 1849, back in 2014. He has 60 60 losses in two recent Futures this Fall to such luminaries as Pavel Tsoy and Peter Bothwell. But at the Fergana Challenger he got a first round qualifying win over another Uzbek, Azizbek Lukmanov, 64 64.

Lukmanov is another guy who has fared poorly on the pro circuit (he has a single Futures main draw win this year), but can get direct entry into just about any Uzbek challenger. At Karshi, he defeated Timur Khabibulin, 64 36 63 in first round qualifying.

Khabibulin is a top-900 player from Kazakhstan, who has at least won a handful of matches. Heck, he’s even reached the final of a pair of double Futures this season. At the Astana Challenger in August, he defeated Djurabeck Karimov, 62 64.

Karimov, whose first name is recognized as Djurabeck by the ATP, but Jurabek in the ITF database, is a 17-year old Uzbek, who has risen into the top-800 this year. Karimov beat Divij Sharan of India, 46 64 76, at the Samarkand Challenger.

Sharan, a former top-500 player is now more of a doubles specialist with over 20 titles to his name and also reached the round of 16 at the US Open in 2013. At that same popular Samarkand Challenger, Sharan defeated Denis Matsukevitch, 61 36 62, in third round qualifying.

Matsukevitch is another of those players who is recognized by the ATP and ITF by different names. The ATP spells his last name without the ‘t’. The Russian is also a former top-300 player, but at the Cherbourgh Challenger he defeated Frederik Nielsen, 76 62.

Here’s where we get into familiar territory. Nielsen, the 2012 Wimbledon Doubles champion took down Ryan Harrison at the Manchester Challenger, 61 57 62. Then Harrison tops Dr. Ivo in Acapulco, 46 76 76. This brings us all the way home to the Karlovic win over Djokovic in Doha early in the season.

So there you have it. Eleven matches to get from an 18-year old Uzbek player with one ATP point all the way to the best player in the world without a single walkover.

This research has also prompted me to think of a deep dive into the apparent weakness of the Uzbekistan and Kazakhstan Challengers. I’ve known for awhile they were weak, but just how weak may be a topic for the future.

Saida’lo Saidkarimov (UZB) d. Sarvar Ikramov (UZB) — Tashkent Challenger
Sarvar Ikramov (UZB) d. Anton Djamalov (UZB) — Samarkand Challenger
Anton Djamalov (UZB) d. Azizbek Lukmanov (UZB) — Fergana Challenger
Azizbek Lukmanov (UZB) d. Timur Khabibulin (KAZ) — Karshi Challenger
Timur Khabibulin (KAZ) d. Djurabeck Karimov (UZB) — Astana Challenger
Djurabeck Karimov (UZB) d. Divij Sharan (IND) — Samarkand Challenger
Divij Sharan (IND) d. Denis Matsukevitch (RUS) — Samarkand Challenger
Denis Matsukevitch (RUS) d. Frederik Nielsen (DEN) — Cherbourgh Challenger
Frederik Nielsen (DEN) d. Ryan Harrison (USA) — Manchester Challenger
Ryan Harrison (USA) d. Ivo Karlovic (CRO) — Acapulco
Ivo Karlovic (CRO) d. Novak Djokovic – Doha

Ed Note: there is a slight possibility that this can be accomplished in a shorter path from Saidkarimov to Djokovic with the imperfect issue of ATP vs. ITF naming recognition.

Remember that time in 2015 when the world’s top-ranked player, Novak Djokovic lost to unranked Australian Chris Letcher?

Remember that time in 2015 when the world’s top-ranked player, Novak Djokovic lost to unranked Australian Chris Letcher? You don’t. Well it could’ve happened.

In doing some research on the 2015 season, I decided to jump down the wormhole of who would have the worst possible indirect win over Djokovic. These types of path or graph theory problems are fun to explore. What is the simplest, longest past over a certain player? And along the way, can we find the ‘worst’ or lowest-ranked player…

Letcher, who reached a career-high 508 in 2012, played one tournament this year. In Leon, Mexico he defeated Mexican Mauricio Astorga in the first round of the Challenger’s qualifying, 76 61.

Just two weeks later, Astorga defeated Bolivia’s Alejandro Mendoza in the first round of qualifying at the Guadalajara Challenger, 60 75.

Medoza, currently ranked 801, beat Chilean Guillermo Rivera-Aranguiz, currently ranked 534, in the second round of the Bogata Challenger qualifying by walkover.

At the same Bogata Challenger in May, Rivera-Aranguiz defeated Facundo Mena of Argentina in the second round, 16 63 62. Mena in turn, twice defeated Ecuador’s Ivan Endara in 2015, once at the Medellin Challenger and once at Colombia F5.

Then, at the San Luis Potosi Challenger, Endara defeats Rogerio Dutra Silva, 75 61. Dutra Silva defeats current top-20 player, Benoit Paire of France at the Milan Challenger, 64 64.

It can take several paths from here on in, but I try to follow them in some order.

Paire takes down Australia’s Nick Kyrgios in the ATP event in Tokyo, 36 64 61. Twice during the 2015 season, Kyrgios defeated Ivo Karlovic (Kuala Lumpur and at the Australian Open).

Which brings us to last January in Doha when our big-serving friend from Croatia topped the top-ranked Djokovic, 67 76 64.

To be fair, Letcher did have a few points from 2014 and actually finished the year ranked 999, but still quite a remarkable story.

Amazingly, this isn’t the most outrageous path. If you eliminate all walkovers, you get a new longest path. But to see it, you will have to stay tuned until tomorrow.

Chris Letcher (AUS) d. Mauricio Astorga (MEX) — Leon Challenger
Mauricio Astorga (MEX) d. Alejandro Mendoza (BOL) — Guadalajara Challenger
Alejandro Mendoza (BOL) d. Guillermo Rivera-Aranguiz (CHI) — Bogata Challenger
Guillermo Rivera-Aranguiz (CHI) d. Facundo Mena (ARG) — Bogata Challenger
Facundo Mena (ARG) d. Ivan Endara (ECU) — Medellin Challenger and Colombia F5
Ivan Endara (ECU) d. Rogerio Dutra Silva (BRA) — San Luis Potosi Challenger
Rogerio Dutra Silva (BRA) d. Benoit Paire (FRA) — Milan Challenger
Benoit Paire (FRA) d. Nick Kyrgios (AUS) — Tokyo
Nick Kyrgios (AUS) d. Ivo Karlovic (CRO) — Kuala Lumpur and Australian Open
Ivo Karlovic (CRO) d. Novak Djokovic (SRB) — Doha

Using Microsoft’s TrueSkill to Rank Texas Six-Man Football Teams

People have always compared six-man football to a computer game. With its wild scores and fast-paced style, six-man football can be just as exciting, if not more so.

So what if you played the entire six-man season on your Xbox?

That’s why I decided to use the TrueSkill Ranking System created by Microsoft Research for Xbox Live games and apply it to the season.

Microsoft uses this algorithm to track the skill of gamers in order to place them in competitive matches. On the Microsoft Research website it explains that the ranking system is characterized by two attributes: a players average skill level (ranking) and the degree of uncertainty in the gamer’s skill (this would be the variation in the players level). If you would like to read more, it can be found at the Microsoft Research website,

Heck, gamers love this thing. If you want to really know more about the math behind it, a guy named Jeff Moser has written a bunch on the subject.

Very nerdy links—→

And here

As with any algorithm, there are several ways you could implement it. I decided in the first trial I would start of with no priors. This means all teams started the season with the base ranking. Since I also program primarily in Python, I decided to use the Trueskill package developed by a South Korean game developer named Heungsub Lee. It seems to be well-written and moderately documented.

Let’s take a quick look at the top-10.

1 Richland Springs 432
2 Borden County 425
3 Buena Vista 409
4 Austin Veritas 408
5 Happy 403
6 Gorman 403
7 Jonesboro 396
8 SA FEAST Homeschool 388
9 Crowell 381
10 Houston Emery-Weiner 381

Not bad, but not stellar. Let’s see the next 20

11 Calvert 379
12 Midland Trinity 377
13 Garden City 374
14 Valley 373
15 Dallas Inspired Vision 372
16 Follett 370
17 Zephyr 370
18 Abbott 369
19 Pasadena First Baptist 368
20 Gordon 366
21 Balmorhea 366
22 San Marcos Hill Country Christian 366
23 Bryan Christian Homeschool (BVCHEA) 366
24 Rochelle 364
25 Baytown Christian 364
26 Mt. Calm 363
27 Hermleigh 360
28 Nazareth 357
29 Chester 357
30 Sterling City 352

OK, but again, you can see some flaws.

One of the really cool things TrueSkill brings is a pretty good ability to predict the winners of games. In the version I ran, I allowed TrueSkill to predict all of the games, but throwing out the really close ones where it determined the probabilities of a team were between 47%-53%. One of the reasons to do this would be that during all of week one games, with probabilities at 50-50, we can just throw those out.

For the season, TrueSkill predicted 832 of 1108 (75.1%) games, which isn’t bad. For the playoffs, it is even better at 82-20 (80.4%).

It will be interesting to see how it does this week.

Matchup: Zephyr (11-2-0) at Abbott (11-2-0)
Rating Before: 370~28 / 369~29
Match Quality: 0.82
Zephyr odds winning: 50.9%
Prediction: TOSS-UP –> Zephyr

Matchup: Crowell (9-3-0) at Borden County (13-0-0)
Rating Before: 381~28 / 425~33
Match Quality: 0.68
Crowell odds winning: 27.6%
Prediction: Borden County

Matchup: Follett (12-1-0) at Buena Vista (13-0-0)
Rating Before: 370~31 / 409~37
Match Quality: 0.68
Follett odds winning: 30.2%
Prediction: Buena Vista

Matchup: Midland Trinity (11-2-0) at Houston Emery-Weiner (11-2-0)
Rating Before: 377~28 / 381~28
Match Quality: 0.83
Midland Trinity odds winning: 47.4% [predict: TOSS-UP]
Prediction: TOSS-UP –> Houston Emery-Weiner

Matchup: Guthrie (11-2-0) at Richland Springs (13-0-0)
Rating Before: 351~29 / 432~35
Match Quality: 0.44
Guthrie odds winning: 13.8%
Prediction: Richland Springs

Matchup: San Marcos Hill Country Christian (11-1-0) at WF Notre Dame (9-2-0)
Rating Before: 366~35 / 341~30
Match Quality: 0.75
San Marcos Hill Country Christian odds winning: 63.3%
Prediction: San Marcos Hill Country Christian (this one was played this morning-correct)

Matchup: Austin Veritas (12-0-0) at Waco Live Oak (10-2-0)
Rating Before: 408~37 / 339~32
Match Quality: 0.51
Austin Veritas odds winning: 81.7%
Prediction: Austin Veritas (this one just finished-correct)

I plan on making some adjustments to this and seeing what comes up. Stay tuned.

Just for fun, here’s the entire list

1 Richland Springs 432
2 Borden County 425
3 Buena Vista 409
4 Austin Veritas 408
5 Happy 403
6 Gorman 403
7 Jonesboro 396
8 SA FEAST Homeschool 388
9 Crowell 381
10 Houston Emery-Weiner 381
11 Calvert 379
12 Midland Trinity 377
13 Garden City 374
14 Valley 373
15 Dallas Inspired Vision 372
16 Follett 370
17 Zephyr 370
18 Abbott 369
19 Pasadena First Baptist 368
20 Gordon 366
21 Balmorhea 366
22 San Marcos Hill Country Christian 366
23 Bryan Christian Homeschool (BVCHEA) 366
24 Rochelle 364
25 Baytown Christian 364
26 Mt. Calm 363
27 Hermleigh 360
28 Nazareth 357
29 Chester 357
30 Sterling City 352
31 Guthrie 351
32 Cedar Park Summit 351
33 Watauga Harvest 349
34 Milford 347
35 Waco Methodist Childrens Home 347
36 Southland 346
37 Austin Hill Country 344
38 Granbury North Central Texas Academy 344
39 Rockwall Heritage 341
40 WF Notre Dame 341
41 Ira 339
42 Waco Live Oak 339
43 Newcastle 335
44 Stephenville Faith 334
45 Bastrop Tribe Consolidated 333
46 Fort Worth THESA 331
47 Walnut Springs 330
48 Fort Worth Nazarene 329
49 Motley County 328
50 Willow Park Trinity 328
51 Aspermont 323
52 Tioga 315
53 Blum 314
54 Coolidge 314
55 Longview Trinity 314
56 Conroe Covenant Christian 313
57 Savoy 311
58 Bryson 311
59 Klondike 308
60 Sugar Land HCYA Fort Bend 308
61 Austin NYOS 308
62 Decatur Victory Christian 308
63 Meadow 307
64 Seguin Lifegate 303
65 Houston Texas Christian 302
66 Capital City Christian Home School 300
67 Knox City 299
68 Sands 298
69 Giddings State School 298
70 Miami 297
71 Katy Faith West 297
72 Red Oak Ovilla Christian 297
73 Robert Lee 296
74 Union Hill 296
75 EP Faith 296
76 Santa Anna 295
77 Bronte 294
78 Spur 293
79 Rising Star 292
80 Evant 292
81 Dallas Academy 292
82 Marfa 290
83 Irving Faustina 290
84 Loraine 289
85 Marshall Christian Academy 288
86 Dallas Tyler Street 286
87 Weatherford Christian 286
88 Oglesby 283
89 Forestburg 281
90 SA Castle Hills 281
91 Williamson County Home School 281
92 Temple Centex Homeschool 280
93 Oakwood 279
94 Sugar Land Logos Prep 279
95 Huntsville Alpha Omega 279
96 Arlington St. Paul Prep 279
97 EP Immanuel Christian 278
98 Groom 277
99 Anton 274
100 Rankin 274
101 McLean 273
102 Gholson 273
103 Eden 272
104 Denton Calvary 272
105 Lucas Christian 272
106 Waco Vanguard College Prep 271
107 Whitharral 270
108 Westlake Academy 270
109 Corpus Christi WINGS 270
110 Bulverde Bracken Christian 268
111 Petersburg 267
112 Lefors 264
113 Corpus Christi Annapolis 263
114 Plano CHANT 263
115 Rule 262
116 Kress 261
117 WF Wichita Christian 261
118 May 259
119 Iredell 259
120 Fort Davis 259
121 Paint Rock 258
122 Sierra Blanca 257
123 Cotton Center 257
124 Fredericksburg Heritage 256
125 Athens Christian Prep 252
126 Westbrook 251
127 O’Donnell 251
128 Avalon 251
129 Water Valley 249
130 Paducah 249
131 Hart 249
132 High Island 249
133 Sidney 249
134 Blanket 248
135 Lubbock Home School 248
136 Dallas Lutheran 248
137 Dallas Lakehill 248
138 Campbell 246
139 Tyler HEAT 245
140 Wylie Preparatory 242
141 Abilene Christian 242
142 Azle Christian 241
143 Bellville Faith 241
144 Corpus Christi Abundant Life 240
145 Austin Brentwood Christian 239
146 Hedley 237
147 Houston Mount Carmel 237
148 SA The Winston 237
149 Amherst 234
150 Wellman-Union 233
151 Richardson Canyon Creek Christian 232
152 SA Lutheran 232
153 Strawn 231
154 Cherokee 231
155 Chillicothe 230
156 Orange Community Christian 230
157 Grandfalls-Royalty 229
158 Fannindel 228
159 Lorenzo 224
160 White Deer 223
161 Wilson 222
162 Lewisville Lakeland 221
163 Aquilla 219
164 Haslet Heritage Christian 219
165 McKinney Cornerstone 218
166 Higgins 217
167 Blackwell 216
168 Dawson 215
169 Spring Providence Classical 215
170 Pflugerville Concordia 215
171 Woodson 214
172 SA Great Hearts Monte Vista 214
173 New Home 212
174 Lueders-Avoca 212
175 Lingleville 211
176 Medina 211
177 Morgan 211
178 Covington 210
179 Apple Springs 208
180 Arlington Newman 208
181 Plainview Christian 207
182 Trinidad 204
183 Kerrville Our Lady of the Hills 203
184 Lockhart Lighthouse Christian 202
185 Victoria Home School 199
186 Silverton 198
187 Saint Jo 198
188 Crosby Victory and Praise 197
189 Ropes 196
190 Lewisville Founders Classical 196
191 Mullin 194
192 Lake Jackson Brazosport Christian 194
193 EP Jesus Chapel 192
194 Brownwood Victory Life 189
195 Amarillo Holy Cross 189
196 Jayton 188
197 Benjamin 187
198 Canton EXEL 187
199 Dell City 187
200 Throckmorton 186
201 Rotan 186
202 SA The Atonement 186
203 Johnson County Sports Association 185
204 Cranfills Gap 182
205 Carrollton Christian 182
206 Spring Branch Living Rock Academy 182
207 Waco Parkview 181
208 Alvin Living Stones 181
209 Odessa Latter Rain 180
210 Granbury Cornerstone 178
211 Dallas Fairhill 178
212 Grady 175
213 Fort Hancock 175
214 SA Sunnybrook 175
215 Veribest 172
216 Greenville Christian 171
217 New Braunfels Christian 171
218 Moran 169
219 EP Home School 165
220 Highland 163
221 Bryan Allen Academy 163
222 Sanderson 160
223 Lometa 159
224 Temple Holy Trinity Catholic 157
225 Kopperl 156
226 Arlington Flint Academy 156
227 Paint Creek 155
228 Midessa Homeschool 151
229 Panther Creek 149
230 Tyler King’s Academy 148
231 Fruitvale 148
232 Houston Sanchez Charter 148
233 Leverett’s Chapel 146
234 Bynum 145
235 Buckholts 144
236 Whiteface 143
237 Prairie Lea 143
238 West Columbia Charter 141
239 Gustine 140
240 Lohn 140
241 East Texas Home School 140
242 Northside 139
243 Irving Universal Academy 137
244 Brookesmith 136
245 Lazbuddie 132
246 Fayette County Sports Association 125
247 Fort Worth Hill 123
248 Round Rock Christian 122
249 Trent 119
250 Fort Elliott 119
251 Loop 116
252 Clear Lake Christian 113
253 Patton Springs 111
254 Conroe Lifestyle Christian 111
255 Penelope 108
256 Selma River City Believers 107
257 Gold-Burg 105
258 Killeen Memorial 101
259 SA River City 100
260 Harrold 97

July ITF Futures Round-up

As we have now moved into August and it is officially the Dog Days of Summer, it is time to do a quick review of July’s Best and Worst performances on the ITF Futures Circuit. First we need to define July. I have defined July as being any tournament played in July, specifically the week of 29 June-05 July through last week, 27 July-02 August.

Now on to the Winners… Here’s a list of the multi-tournament winners for the month.


CAGNINA, Julien (BEL) 2
EVANS, Daniel (GBR) 2
GRIGELIS, Laurynas (LTU) 2
IGNATIK, Uladzimir (BLR) 2
LI, Zhe (CHN) 2
METREVELI, Aleksandre (GEO) 2
STRUVAY, Eduardo (COL) 2


Of course winning titles in nice, but the key is to get points and move up the rankings. Here’s a list of the top-50 point earners for the month.


Name QW QL MW ML PTS Ttitles
EVANS, Daniel (GBR) 0 0 13 1 62 2
LI, Zhe (CHN) 0 0 13 0 54 2
STRUVAY, Eduardo (COL) 0 0 10 0 54 2
GRIGELIS, Laurynas (LTU) 0 0 15 2 53 2
CAGNINA, Julien (BEL) 0 0 14 1 51 2
HORANSKY, Filip (SVK) 0 0 15 3 47 2
IGNATIK, Uladzimir (BLR) 0 0 10 0 45 2
ROCA BATALLA, Oriol (ESP) 0 0 10 0 45 2
KING, Evan (USA) 0 0 12 2 45 1
CHAZAL, Maxime (FRA) 0 0 14 3 44 1
REID, Matt (AUS) 0 0 10 2 43 1
SMETHURST, Daniel (GBR) 0 0 9 1 42 1
NEUCHRIST, Maximilian (AUT) 0 0 12 2 39 1
JANVIER, Maxime (FRA) 0 0 14 3 38 1
METREVELI, Aleksandre (GEO) 0 0 10 0 36 2
VIVERO GONZALEZ, Pablo (ESP) 0 0 10 0 36 2
MICHALICKA, Marek (CZE) 0 0 8 1 35 1
EYSSERIC, Jonathan (FRA) 0 0 8 1 35 1
KOCEVAR-DESMAN, Tom (SLO) 0 0 12 2 34 1
MARTI, Yann (SUI) 0 0 10 3 33 0
BONADIO, Riccardo (ITA) 0 0 12 3 32 1
MENA, Facundo (ARG) 0 0 8 2 31 1
DOME, Andre (USA) 0 0 7 2 30 1
TABATRUONG, Maxime (FRA) 0 0 10 3 29 1
WARD, Alexander (GBR) 0 0 12 3 29 1
GUEZ, David (FRA) 0 0 6 2 28 1
SAKHAROV, Gleb (FRA) 0 0 6 1 28 1
MERTENS, Yannick (BEL) 0 0 6 1 28 1
GRANOLLERS-PUJOL, Gerard (ESP) 0 0 11 3 28 1
JASIKA, Omar (AUS) 0 0 5 0 27 1
RAZBORSEK, Nik (SLO) 3 0 5 0 27 1
HUTA GALUNG, Jesse (NED) 0 0 5 0 27 1
FORTUNA, Claudio (ITA) 0 0 11 3 27 1
SINGH, Sanam (IND) 0 0 5 0 27 1
SAMPER-MONTANA, Jordi (ESP) 0 0 5 0 27 1
GIANNESSI, Alessandro (ITA) 0 0 5 0 27 1
COLLARINI, Andrea (ARG) 0 0 5 0 27 1
VLIEGEN, Joran (BEL) 2 1 5 1 27 1
MMOH, Michael (USA) 0 0 5 0 27 1
GIUSTINO, Lorenzo (ITA) 0 0 5 0 27 1
LAURENT, Yanais (FRA) 0 0 11 4 27 0
RUMENOV PAYAKOV, Georgi (ESP) 0 0 10 2 26 1
SETKIC, Aldin (BIH) 0 0 10 2 26 1
THOMPSON, Clay (USA) 0 0 9 3 26 0
BEGA, Alessandro (ITA) 0 0 11 3 24 1
PAZ, Juan Pablo (ARG) 0 0 8 3 24 1
GOMEZ, Alejandro (COL) 0 0 8 3 24 0
BANES, Maverick (AUS) 0 0 9 4 24 0
TEIXEIRA, Maxime (FRA) 0 0 7 3 23 0
HILTZIK, Jared (USA) 0 0 7 3 23 0

A quick explanation on the table: QW=qualifying wins, QL=qualifying losses, MW=main draw wins, ML=main draw losses, PTS=points earned, Titles= titles won

Several things stick out here.

At the top, Zhe Li, who went 13-0 for the month, but only won two tournaments. So how did he go 13-0? He was playing in the semifinals of China F9 when the tournament was abandon due to rain in Jinhua.

LI, Columbian Eduardo Struvay, Belarussian Uladzimir Ignatik, Spain’s Oriol Roco Batalla, Georgian Aleksandre Metreveli, and Spain’s Pablo Vivero Gonzalez all went undefeated for the month, winning two tournaments. Slovakian Nik Razborsek, pulled off an undefeated month as well winning Italy F16, but he had to go 3-0 in qualifying to do it.

Lots of current and former US College players in there. I don’t plan on listed them all, but awesome work, fellas.

Looking at the top-50 point-getters, you realize that what Razborsek did was rare. Out of the top-50 only two had to win any qualifying matches. This harkens back to my mention last week about the differences in grabbing points and development. I am planning a discussion on this in the next two weeks to dive into this deeper. It actually ties a little bit into another project I hope to post to the site here this week.

LAKAT, Florian (FRA) 12 0 5 5 5
LIZEN, Aswin (GBR) 10 0 2 5 2
ADDISON, Aaron (AUS) 10 1 2 3 2
MEYER, Jan (GER) 10 2 1 3 1
PUTTERGILL, Calum (AUS) 10 2 0 2 0
VON MASSOW, George (GER) 9 0 5 3 8
CAILLEAU, Jolan (BEL) 9 0 3 3 6
VIVES, Jordi (ESP) 9 0 3 3 3
BRAUN, Niclas (GER) 9 2 3 2 3
HUA, Runhao (CHN) 9 0 2 3 2
CANT, Louis (BEL) 9 0 2 4 2
BUTLER, Samm (GBR) 9 0 1 3 1
CHADAJ, Adam (POL) 9 0 1 3 1
DERKAS, Zdenek (CZE) 9 2 0 2 0
GOLUZA, Ivan (AUS) 9 1 0 3 0
PETERS, Flemming (GER) 9 3 0 2 0

Mississippi State’s Florian Lakat of France won the most qualifying matches on the Futures tour in July (one caveat, byes are counted as wins). He won a total of 17 matches last month, which would normally earn him the Grinder of the Month. He did earn five points though.

For the honor of Grinder of the Month, I go with Australian Calum Puttergill. He should win the honor based on name alone, but the fact that poor Calum scraped it out this month, winning 10 matches (ok, one was a bye) and didn’t earn a single point, clinched it.

Calum spent the month in Serbia and Slovakia toiling away. He probably didn’t even get to sight-see. I know nothing of Piestany, Slovakia, but when you Google it, you see nothing but nice photos of the town and people getting massages.



These four poor souls went 0-4 this month in the qualies. Better luck next month, guys.

New Site Dedicated to Pro Tennis to Focus on Analytics

Over the past few weeks I have been working on a new website,, dedicated to professional tennis analytics.

The site will primarily focus on the lower ITF Circuits to begin with. I have started collecting data and posted a brief article highlighting the first half of the 2015 season.

The website also boasts a Twitter account, @th3str1ngth30ry, which for the time being mostly tweets from a bot I built. The bot ‘visits’ the ITF live scoreboard every 24 minutes, sees if any matches are done and tweets out any results. It was quite a cool little project since they try to hide their data inside Flash, but with a little help, I managed to get it figured out. The program is not 100% stable, as the Java-based driver it uses seems to have some issues every once in awhile.

I hope to write more about the site, the bot and the analytics soon.

Musing From the First Half of the Year on the Futures Circuit

I decided it would be good to create some awards or recognition (good and bad) for the first half of the year on the Men’s ITF Pro Circuit. I am defining the first half of the year as being from January 1, 2015 to the finals played on July 5, 2015.

Most of these will be straight descriptive lists or players that stand out. I hope to do a deeper dive and analysis once I get everything going. In the future, I intend to include the women’s side and also do awards monthly.

I should probably start with the positive. Obviously the goal is to do well at the Futures level and get into Challengers. There’s also the need for player development at the Futures level. That opens up the argument of whether it is more important to accumulate points and move quickly or prepare yourself for the tougher matches you will eventually face heading up the ladder (i.e., do I play in Turkey or USA). There are obviously plenty of variables and philosophies and that’s for another post, so keep that in mind.


Name Titles
BELLOTTI, Riccardo (ITA) 6
NASO, Gianluca (ITA) 6
NOVAK, Dennis (AUT) 5
PANFIL, Grzegorz (POL) 4
KING, Darian (BAR) 4
CHAZAL, Maxime (FRA) 4
HUANG, Liang-Chi (TPE) 4
LINZER, Michael (AUT) 4

The first thing to note is three Italians in the top there. Bellotti is currently ranked 247 in the world and has moved n to Challengers. He grabbed his titles in Croatia and Turkey. Naso is back to 214 in the world. He is obviously playing Challengers and actualy won all of his titles in Italy. The third Italian, Crepaldi hasn’t fared to well at Challengers and is 300 in the world. He bagged most of his points traveling Tunisia, Cyprus, Turkey and Greece.

I found it interesting that the Israeli, Amir Weintraub (a former top-200 player), got all of his points in Israel, then immediately jumped into the Wimbledon qualies, where he was defeated by Bjorn Fratangelo.

Darian King, currently 205, has done well at Futures in the US and Mexico, but hasn’t played in almost a month.


BELLOTTI, Riccardo (ITA) 12 0 47 9 140 6
PECOTIC, Matija (CRO) 0 0 27 9 126 3
KING, Darian (BAR) 0 0 34 9 122 4
NASO, Gianluca (ITA) 4 0 40 6 121 6
NOVAK, Dennis (AUT) 2 0 38 7 116 5
SAFWAT, Mohamed (EGY) 0 0 39 7 109 3
SARKISSIAN, Alexander (USA) 0 1 33 10 108 2
SANDGREN, Tennys (USA) 0 0 29 6 107 2
HALYS, Quentin (FRA) 0 0 25 8 105 2
MACHADO, Rui (POR) 0 0 33 4 103 4

Again Bellotti is at the top, which is understandable since he won six tournaments. What was interesting was the fact he had to qualify in the early stages and went 12-0. Also impressive was the fact that Naso won six of the 12 Futures tournaments he entered in this time frame.

Of note to fans of American college tennis is the Croatian Matija Pecotic, who played at Princeton. He’s a great kid (I’m old) who I had the chance to hang out with a bit when his team came to Austin a few years back. He started the year in Georgia (the country), then Turkey, Egypt, and Great Britain before picking up two titles in Nigeria and one in the US (Winston-Salem).

Also making the list are former Pepperdine and Tennessee standouts, Sarkissian and Sandgren. Sarkissian has spent time in the US, Australia, Mexico, Hong Kong and actually won a South Korean Challenger (Gimcheon). Sandgren went to Australia and China as well, but has done most of his playing in the US and Canada, including some Challenger success, reaching the semifinal in Tallahassee.


SMITH, Raleigh (USA) 37 8 7 9 7
MESQUIDA BERG, Oscar (ESP) 32 7 3 11 3
LIZEN, Aswin (GBR) 27 4 3 11 3
UHLIG, Daniel (GER) 27 7 2 6 2
CHAPLIN, Jarryd (AUS) 26 7 10 10 11
TABERNER, Carlos (ESP) 26 0 6 8 9
MARDONES, Bruno (ESP) 26 11 3 9 3
WAGNER, Hannes (GER) 26 8 2 6 2
KAPRIC, Denis (GER) 26 15 0 5 0

I know 26 matches is just an arbitrary number, but this is the Ultimate Grinder Award. A few years back (over 10), I was 39 and playing a lot. I was also writing some for the USTA and following all of the events in Texas. One year I attended 13 pro events alone. I decided to play a couple of wild card and qualifying tournaments. The guys I met were amazing. I also met some of these grinders. The guys who just want to play, get a point or two and see where it takes them. I’ve known some of these guys who would get a single point and just travel to the ends of the Earth to try and get a second and see the world. I also knew a guy who always seemed to qualify for the main draw, but could never get that elusive point. I envied them. I felt their pain.

Former Northwestern tennis player Raleigh Smith stands out with 37 qualifying wins alone. He’s been grinding mostly in the US, Israel and Turkey. My goal here is to get him to tweet more from the road (@raleighs_myth).

Look out for Spain’s Carlos Taberner. The 17-year old did not lose a single qualifying match and has subsequently broken out with a semifinal appearance this month.

The last guy, Denis Kapric, however, wins the ULTIMATE GRINDER AWARD. Having gone 26-15 in qualifying rounds, he’s 0-5 in main draw appearances. He has two points from last year, but those get wiped out in a few months. His European vacation has taken him to Germany, Italy, France, Switzerland, Croatia, Bosnia/Herzegovina, Slovenia, Bulgaria and Romania this year alone. This sounds like a great trip for the 20-year old German. I hope he grabs another point or two here soon.

Building the Wine Snob Twitter Bot

Yes, I built a Twitter bot. My bot tweets random, nonsensical wine reviews (you can find it here @WineSnobBot).

of fresh peaches, this low-alcohol effort is further bolstered by sémillon, this is now past its peak.

I know what you are all asking – WHY?

I have been working recently on a variety of projects. One of them included getting a new server running at the house to mine data and run various other automated scripts. As usual, these projects get bigger and bigger and I haven’t been able get much out the door.

Then I heard on one of my new favorite podcasts, Partially Derivative, about the Beer Snob Says twitter bot, by Greg Reda. It was such a fun sounding project and he posted the code on GitHub.  Greg does an incredible job explaining the process behind the Markov Chains in the code that generates the reviews and I thought it would be fun to experiment with.

I decided a wine review bot would be a good challenge, so I plotted out a plan in three parts: getting data, modifying the Markov generator and automating a bot to post the results to Twitter.

Like any Markov process, the inputs are key. I needed a massive amount of data (real reviews) to make this work. Greg mentions this in his article, stating your likelihood of a more readable random tweet increases as you increase the size of the corpus.

I started with a few sites and quickly ran into problems. I just couldn’t get enough reviews that were well-written enough to be consistent. Many were amateur reviews with sloppy language.

I eventually found one site that had a database of about 100,000 short reviews of 40-60 words dating from 2000 to the present. I will delve into where more at a later date, since I somehow got away with over 12,000 calls to their website one night. I also plan on combining a few more sources in the future.

So now I have a corpus of over 4 million words. One of the things I first noticed was that certain punctuation works better than others – commas and periods look better in random sentences than parenthesis, colons and semi colons. The result thus far looks like this:

the palate, though it’s infused with creme de cassis, dark chocolate, grilled bacon, fine herbs comprise the nose.

You will notice it is all lowercase. It just seems to make more sense when it’s all lowercase, rather than just random capitalization. I plan on capitalizing the first word and any subsequent words after periods, but haven’t as yet.

angeles—a cool-climate, coastal pinot, especially one that’s amply balanced by orangy acids. —this is a wine to foreign markets.

I am also torn about dashes. They seem to crop up in numbers. The division of words like Los Angeles also concerns me, but I’m still formulating my thoughts on proper nouns.

To this point, I needed to get the Markov process running a little better. I started with the basic Python script Reda created and added a few new rules. One rule is to not start a tweet with the word ‘and’. The word ‘with’ is a tougher call, but for now I am keeping it simple.

smooth, honeyed finish. grenache, cinsault and grenache are prevalent in the initial taste is your style.

Here you can see some work still needs to be done on the Markov process. A layer to possibly eliminate duplication of ‘complex’ words, like Grenache, might help. One thought is to test words in length greater than 5 and force a redo when any are duplicated.

Lastly I needed to automate it. Since my python program will reside on a Mini Mac server, I created a Launchd file to fire off the bot every 4444 seconds (about one hour and 14 minutes). Within the python code, I create a tweet, using Twython, and save it to a file (so I can check the language and perfect the code) but only actually tweet approximately every one in six times (randomly generated of course). I figure a bot tweeting about four times a day is enough.

This is obviously a work in progress. The first order of business was to get it out the door. The next part is to improve the logic it uses to craft the tweets. Please follow along and let the Wine Snob Bot know what you think. I will post code and more details in the future.