lichess.org
Donate

This is how much ELO you are losing in the opening

ChessAnalysisOpeningChess engineSoftware Development
Combining stockfish evaluations with Lichess's winning chances allows us to derive an exact amount of ELO that each opening mistake is costing you.

How Much Elo Are You Really Losing in the Opening?

If you are like me, you love studying openings and perfecting your repertoire. One of the struggles I personally had was knowing which openings most needed my attention. Sure, you have a feeling for which openings are weak, but how much are these mistakes actually costing you ELO-wise? Turns out we can calculate an approximate ELO loss for every mistake, and the math is more interesting than you'd expect.

TL;DR: try it for your own games at Opening Coach

From Centipawns to Win Probability

Stockfish speaks centipawns. A +100 cp evaluation rougly means "white is up about one pawn of equivalent advantage." But centipawns are not linearly related to winning chances: going from 0 to +100 matters far more than going from +800 to +900.

Luckily, Lichess already solved this problem. In lila/pull/11148, the team fit a logistic curve to 75,000 positions from 2300+ rated rapid games:

winProb(cp) = 1 / (1 + e^(-0.00368 × cp))

Plug in +100 cp and you get roughly 59% winning chances as a human. At +300 cp you're at about 75%. At +1000 cp, 97%. That constant 0.00368 neatly aligns with actual human winning chances given an engine evaluation.

This is the foundation. Once you can translate any position into "chance I win this game from here," you can start asking interesting questions.

The Cost of a Single Mistake

Suppose on move 7 of your pet Caro-Kann line, you always play ...Bf5, but the engine prefers ...Bg4. Stockfish says the position after your move is -40 cp (slightly worse), and after the best move it would be +20 cp (slightly better).

Convert both to win probability:

Δp = winProb(+20) - winProb(-40) ≈ 0.518 - 0.463 ≈ 0.055
    ≈ 0.518 - 0.463
    ≈ 0.055

So this single move costs you about 5.5 percentage points of expected score, every single time you reach that position.

Of course, you don't play that position in every game. If it came up in 20 of your last 500 games, the mistake's weighted contribution to your average result is:

gain = (20 / 500) × 0.055 = 0.0022

It may look small, but these things add up as we will see in the next section.

Expected Score → Elo Points

Elo is designed so that the expected score between two players follows a known curve. Invert it, and you can ask: "if my average result improves by X, how many Elo is that worth?"

ΔElo = -400 × log10((0.5 - totalGain) / (0.5 + totalGain))

When you do the math across a player's full opening repertoire, the numbers are nothing to scoff at. A typical 1500-rated player's opening mistakes often works out to 100+ Elo of pure opening debt.

What This Actually Tells You

There are a few caveats worth stating plainly:

  • The estimate assumes fixing a mistake means you'd always play the engine's top move in that exact position.
  • Openings interact. Fixing one mistake changes which positions you reach, which changes which other mistakes matter.
  • Opening gains don't fully convert to winning chances if your middlegame and endgame don't keep pace.

But even with all that, the exercise is useful because it replaces vague anxiety ("my openings are bad") with hard data ("these six positions are costing you 42 Elo, in this order").

Try It on Your Own Games

If you want to see this analysis run on your actual Lichess games, I've been building Opening Coach, which does exactly this: pulls your games via the Lichess API, runs Stockfish on every opening position, aggregates the mistakes you keep making, ranks them by weighted Elo impact, and lets you drill them in a spaced-repetition trainer.

The math above is literally what it uses — the methodology page walks through the same derivation if you want to verify it.

It's completely free. No paywall, no "pro tier," no account required to try it. I built it because I wanted it for myself, and it seemed silly not to let others use it too.