Chess! 2022 FIDE Candidates Tournament!
The 2022 FIDE Candidates tournament is being played right now with the winner facing Magnus Carlsen for a chance to become the world champion (or maybe not). Either way, the winner of this tournament will secure a spot in the World Championship Match (and possible the runner-up, if Magnus decides not to play). The tournament consists of 8 players and who play each opponents twice, once as white and once as black, for a total of 14 matches. Players get 1 for a win, 1/2 for a draw, and 0 for a loss and they are currently 9 games into the 14 total and are on a rest day. (Why do they need a rest day in chess? Because some of these games are like 8 hours long!?!?).
I’m also teaching a Bayesian class this summer, which gave me an excuse to use the data from the candidates tournament in a Bayesian example. So I showed the students a simple multinomial model for the three outcomes of (win, draw, loss). And we got to have a nice discussion about what our priors should be. I showed them that if we use a non-informative prior here and let the data dominate, we get kind of nonsense results because they’ve only played so few games in the candidates tournament. But we have a ton of prior knowledge! Since all these players qualified for this tournament, we are very confident that they are all very very good and also very very close in terms of skill. In the model that we set up, the strength coefficients are all relative to each other so we put priors on the betas with mean 0 and HIGH precision (low variance) since we have confidence that these players are all very similar to each other. We don’t want to let the result of a single game drastically change the regression coefficients. I’ve included the JAGS model below and the full code can be found here.
Jags Model
"model {
#Likelihood
for (i in 1:N){
##Sampling model
#y[i] ~ dmulti(p[i,1:J], 1)
y[i] ~ dcat(p[i, 1:J]) # alternative
for (j in 1:J){
log(q[i,j]) <- alpha[j] + inprod(X[i,], beta[,j])
p[i,j] <- q[i,j]/sum(q[i,1:J])
}
yrep[i] ~ dcat(ppred[i, 1:J])
for (j in 1:J){
log(qpred[i,j]) <- alpha[j] + inprod(X[i,], beta[,j])
ppred[i,j] <- qpred[i,j]/sum(qpred[i,1:J])
}
}
##Priors
for (j in 1:3) {
alpha[j] ~ dnorm(0, 1)
for (k in 1:8) {
beta[k, j] ~ dnorm(0, 5)
}
}
for (m in 1:Npred){
ypred[m] ~ dcat(ppred2[m, 1:J])
for (j in 1:J){
log(qpred2[m,j]) <- alpha[j] + inprod(Xpred[m,], beta[,j])
ppred2[m,j] <- qpred2[m,j]/sum(qpred2[m,1:J])
}
}
}”
Results
Some model results
Given equally matched players the model predicts that the player with the white pieces will win 10.10%, the player with the black pieces with win 6.28% of the time and there will be a draw 83.62% of the time. This all seems very reasonable. (Though the white win percentage in actual games exploded to about 27% given three with wins yesterday). I also made some fun plots to see the differences in players. The first plot is the the probability of the players winning vs drawing playing as white and the second plot is the same but for players playing as black. The dashed lines represent expected values that are equal. So for instance, in the first plot (players playing as white), Nepo is more likely to win as white and less likely than the others to draw, but his EV is near 0.55. The only other player with a white EV above 0.525 is Fabi. When playing as black, the model actually gives Caruana the highest probability to win, but Nepo’s draw probability is high enough that he still have the highest EV as black of almost exactly 0.5.
Expected Final Points
Based on the results of this model, I simulated the remaining games in the tournament 5000 times and then computed the final standings. Here are the expected number of points for the final tournament standings, with 95% credible intervals:
- Nepo: 8.70 (7.5, 10)
- Caruana: 8.08 (7, 9)
- Hikaru: 7.03 (6, 8)
- Rapport: 6.99 (6,8)
- Duda: 6.49 (5.5, 7.5)
- Ding: 6.47 (5.5, 7.5)
- Radjabov: 6.38 (5, 7.5)
- Alireza: 5.87 (5, 7)
And I made a fun plot for the number of points that each player will end with. The darker the colors the more likely that outcome. (Is there a name for this type of plot? It’s like a histogram with color. Does this have a name?). What’s notable about this is that Rapport, Radjabov, and Firouzja are all stuck at 4/9 but the model is predicting that Rapport and Radjabov are likely to finish with more points of Firouzja.
Probability of winning the candidates
I’ve calculated two probabilities for every player: 1) The probability they win the candidates outright and 2) the probability that either win outright OR are part of a tie for first.
Probability of winning the candidates outright
- Nepo: 67.76%
- Caruana: 10.44%
- Hikaru: 0.58%
- Rapport: 0.5%
- Duda: 0.06%
- Ding: <0.02%
- Radjabov: <0.02%
- Alireza: <0.02%
Probability of finishing with at least a piece of first place
- Nepo: 87.94%
- Caruana: 29.46%
- Hikaru: 2.26%
- Rapport: 2.02%
- Duda: 0.38%
- Ding: 0.12%
- Radjabov: 0.38%
- Alireza: <0.02%
Probabilities of most likely outcomes
- Nepo wins outright: 67.76%
- Nepo and Caruana two way tie: 16.88%
- Caruana wins outright: 10.44%
- Nepo, Caruana, Hikaru three way tie: .76%
- Nepo and Rapport two way tie: .64%
- Hiarku wins outright: 0.58%
- Nepo and Hikaru two way tie: 0.52%
- Nepo, Caruana, Rapport three way tie: .52%
- Rapport wins outright: 0.5%
- Caruana and Hikaru two way tie: 0.26%
- Caruana and Rapport two way tie: 0.2%
- Nepo and Duda(!!!) two way tie: 0.16%
- Nepo and Radjabov two way tie: 0.14%
- Nepo, Caruana, and Radjabov three way tie: 0.12%
- Nepo, Caruana, and Duda three way tie: 0.12%
- Nepo, Caruana, Hikaru, and Rapport FOUR WAY TIE: <0.1%
- Duda wins outright: <0.1%
- Nepo, Caruana, and Ding three way tie: <0.1%
- Nepo and Ding two way tie: <0.1%
- Nepo, Caruana, Hikaru, and Radjabov FOUR WAY TIE: <0.1%
- Nepo, Caruana, Rapport, and Radjabov FOUR WAY TIE: <0.1%
- Nepo, Rapport, Radjabov, and Ding FOUR WAY TIE: <0.1%
- Nepo, Caruana, Rapport, Ding, and Duda FIVE WAY TIE(!!!): <0.1%
- Nepo, Duda, Radjabov three way tie: <0.1%
- Nepo, Duda, Rapport three way tie: <0.1%
- Radjabov and Rapport two way tie: <0.1%
Cheers.
Posted on June 28, 2022, in Uncategorized. Bookmark the permalink. 2 Comments.
Eww JAGS.
Sincerely,
Stan
PS
You haven’t pushed to your GitHub repo yet.
PPS
I like the Predicted Final Points figure with shaded blocks for the CIs, I had never seen that before.
is this base R?