Chess Elo estimator (Lichess, bullet / blitz / rapid)

Estimates the rating of a Lichess player from 10 of their games already analysed by Lichess, with an 80% uncertainty interval and a style profile. One LightGBM model per time control.

These files are used by the web service of the project; code, method and documentation: https://github.com/wafaaBerrais/chess-elo-prediction-player-profiling

  • Published from Git commit 8ec2ea9 on 2026-10-14T16:19:43+00:00
  • Model versions (first characters of the SHA-256 of each model file): bullet 8f9382d76ebd, blitz 66efe74e66df, rapid dfde063955e0

Results on held-out players

20% of the players of each time control were held out before training and tuning.

Time control Test MAE (Elo) Test R² Test players Real Elo inside the 80% interval (3 / 5 / 10 games) η² style → Elo Style traits from
Bullet 177.3 0.50 140 78% / 79% / 82% 0.023 tempo, error_risk, time_pressure
Blitz 155.6 0.57 140 80% / 80% / 81% 0.006 tempo, time_pressure
Rapid 158.4 0.50 98 78% / 78% / 71% 0.005 tempo, time_pressure

Files

Path Content
models/<time_control>/model.skops scikit-learn pipeline (median imputation + LightGBM), skops format
models/<time_control>/uncertainty.json interval calibration, by number of games
models/<time_control>/style_reference.json reference population for the style profiles
reports/<time_control>/*.json test metrics, interval coverage, profile quality
manifest.json Git commit and model versions

Load a model (only the listed classes can be rebuilt; a skops file cannot run arbitrary code):

import skops.io
model = skops.io.load("models/blitz/model.skops", trusted=[
    "collections.OrderedDict", "numpy.dtype",
    "lightgbm.basic.Booster", "lightgbm.sklearn.LGBMRegressor",
])
model.feature_names_in_   # the 213 expected features, in order

The 213 features are computed from the games by the code of the GitHub repository (chess_elo.features); the model cannot be used without it.

Training data

About 1,900 Lichess players sampled across Elo buckets from 1000 to 2200, 30 rated games each, all analysed by Lichess's server-side Stockfish; 10 games per player are used. The target is the player's mean rating over the games. The dataset is not published, and these files contain no username or game identifier.

Intended use and limits

  • A demonstration of a few-shot rating estimate and of style description, not an official rating.
  • Only games already analysed by Lichess can be used.
  • Estimates are pulled towards the middle of the scale: the interval contains the real Elo less often for players below 1400 or above 2000 than for those in between.
  • In bullet, estimates from a PGN file are less precise (clocks rounded to the second).
  • Style traits are shown only for dimensions that are stable with 10 games.
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support