← Blog
2026-08-01

Measuring chess performance with ChessDS XPA (Expectation Points Added)

ChessDS uses a new metric for player performance: Expectation Points Added, hereafter XPA. In my opinion this metric is strictly superior to the commonly cited “accuracy” delivered by other leading chess websites.

The central idea of XPA is to leverage our machine learning predictions of moves and results to compare player performance with what would be “expected” from a ~2600 GM in a classical game.

Measuring “expected loss”

XPA computes the “expected loss” of an average GM through the game, then computes the “actual loss” the player made and compares them. “Loss” in this context means a drop in expectation (the expected result of the game from the player’s perspective, integrating over the win, draw, and loss probabilities). We consider each move with its predicted move probability, the loss of each move, and take a weighted sum across these moves to measure expected loss. Consider the two examples below, both from Kasparov vs The World, 1999; one move which beats expectation, and one which does not.

For this calculation we only consider moves with ≥ 1% move probability. Although if the player selects a different move, we will include its actual loss in the actual loss computation (but not the expected one).

Turning that into a score

To produce the game-level score then, we just add these differences up across the whole game. They are multiplied by 100, so the interpretation is something like this: XPA is the total percentage points of expectation gained or lost through the game compared with that expected of an average GM — hence the name, Expectation Points Added. Therefore a number above zero is good, a number around 0 is average, and a number below 0 is worse play than expected from an average modern GM.

XPA is much more predictive than accuracy

How well does XPA predict game results? Very well, better than accuracy. Here I compare with Lichess accuracy which is published. Chesscom accuracy is a secret, but I doubt would tell a different story:

And the greater the delta is between players the stronger the likelihood of a result:

Another advantage I think compared with accuracy is the greater dynamic range of our measure. Accuracy tends to cluster in the high 90s for our elite GM games, while XPA has a more normal distribution, meaning very high quality games stand out properly. Accuracy offers little insight into truly well-played games, as short trivial draws can obtain near 100% scores.

Testing on real data: World Chess Championships

XPA gives us a way of comparing across generations that has face validity. Consider World Chess Championship matches. We see the level improving over time clearly:

Testing on real data: all classical games

Average XPA per move is another interesting comparison, although we should be aware of different event types. Here I filter out open events which are more prominent in recent years, to make it more comparable (classical games only). We again see a clear signal of play improving over the years:

Top players and games by XPA:

Note (September 2026): the tables below were computed on the archive as it stood in August 2026 (about 281,000 games). The archive has since grown to over 500,000 games, including many players’ junior-years games, so the career figures on the live player pages now differ from these tables.

Another key point of validation is to look across players’ entire careers, who has the highest average XPA per move? The two greatest players of all time are right at the top (classical games only, players with at least 100 games):

And the top games, by total and average XPA:

Stay tuned

I’m excited at the analytical possibilities here! Look out for more blogs coming soon that will leverage XPA to produce insights for chess fans (like me!).