SnowballSH
← Back to Projects
July 2022•Chess & Games

Lichess Accuracy Model

The win-probability model behind Lichess's game-analysis accuracy, fitted to real human games. In production for 4 million daily users.

PythonRustMachine LearningStatistics
The Lichess homepage

Lichess Accuracy Model

When you analyze a game on Lichess, the world’s second-largest chess platform, every inaccuracy, mistake, and blunder, and your overall accuracy score, comes from a model that turns an engine evaluation into the probability that a human wins from that position. I replaced that model with one fitted to real games. It improved correlation with a win-rate benchmark by 7.9%, and it has been in production for Lichess’s 4 million daily active users since 2022.

The problem

The original curve was set by hand, with nothing checking it against how humans actually play. I found that it did not match how real players convert advantages, raised it with the Lichess developers, and set out to measure the old model and build a better one.

Method

  • Data. I took every game from the June 2022 Lichess open database, over 87 million games, and wrote a Rust tool to pull the ratings, evaluation, time control, and result for each position out of the PGN files.
  • Filtering. Game analysis matters most to strong players, so I kept games where both players were rated 2300 or higher and the time control was at least 8 minutes, and dropped time forfeits, abandoned games, and quick draws. That left 75,000 high-quality positions.
  • Fit. I modeled the win probability at evaluation x as the logistic curve w(x) = 2 / (1 + exp(-kx)) - 1 and fitted k with SciPy and NumPy.
  • Refinement. A year later I retrained on newer data, split by rating band and time control, because stronger players convert winning positions more reliably and everyone blunders more in time trouble.

After I reported the method and results, the Lichess developers merged the model, and it is still what grades every analyzed game today.

View All Projects

Let's talk

Have a question or an idea? I would love to hear from you.

Get in touch →