Move Classification Explained: From Brilliant to Blunder
After analyzing a game, you see labels next to every move.
Brilliant. Great. Best. Excellent. Good. Inaccuracy. Mistake. Blunder. Miss.
Nine categories. Each one means something specific.
Here's how it actually works under the hood.
The Core Idea
Stockfish evaluates positions in centipawns (a centipawn is 1/100th of a pawn). If you're up 100 centipawns, the engine thinks you're about a pawn ahead.
Every move changes the evaluation. If you go from +0.5 to +1.5, you gained something. If you go from +1.5 to -0.5, you lost something.
The classification system measures how much the evaluation changed. And how that affects your winning chances.
Win Probability Loss (WPL)
Raw centipawn changes don't tell the full story. Losing 50 centipawns when you're already down 300 isn't the same as losing 50 centipawns in a equal position.
So the app converts centipawns to win probability using a sigmoid function. This maps evaluation to a percentage between 0% and 100%.
The classification is based on how much win probability you lost with your move, compared to the best move.
The Nine Tiers
Best
Your move matches or is very close to the engine's top suggestion. No significant win probability lost.
Excellent
Slightly suboptimal but still a strong move. Minor win probability loss. Usually under 2%.
Good
A reasonable move that isn't ideal. Win probability loss between 2% and 4.5%. You had a better option, but you didn't hurt yourself much.
Inaccuracy
A meaningful mistake. Win probability loss between 4.5% and 8%. You missed a better continuation, and your position is noticeably worse than it could have been.
Mistake
A clear error. Win probability loss between 8% and 19%. This is where games start to turn.
Blunder
A serious error. Win probability loss of 19% or more. You went from a good position to a bad one, or from equal to losing.
Great
A move that improves your position significantly more than the alternatives. Requires at least a 15% win probability gain compared to other reasonable moves. These are rare by design.
Brilliant
The highest tier. Reserved for moves that find a tactic, sacrifice, or deep idea that significantly improves your position. The algorithm prioritizes this above everything else. If a move is checkmate or finds a forced win, it gets Brilliant.
Miss
You had a winning move available but didn't play it. This is different from a mistake. A miss means you were in a winning position and failed to find the decisive continuation.
Accuracy Percentage
Each move gets an accuracy score between 0% and 100%.
The formula: 103.17 * exp(-0.05 * diff) - 3.17
Where diff is the win probability difference between your move and the best move.
Perfect play = 100% accuracy. A 200 centipawn mistake drops you to roughly 65%.
The overall game accuracy is a volatility-weighted harmonic mean of all move accuracies. This means:
- Moves in quiet positions carry less weight.
- Moves in critical positions (where there's a lot at stake) carry more weight.
- A single blunder in an otherwise perfect game lowers your score less than the same blunder in a game full of mistakes.
This is loosely inspired by Lichess's approach, but with independently tuned constants.
What About Book Moves?
Moves that match known opening theory (from the local opening database or a Polyglot book) get classified as Book and automatically receive 100% accuracy. The theory is: if you followed known opening lines, there's nothing to penalize.
Checkmate Handling
If your move delivers checkmate, it's always classified as Best. The engine's evaluation is capped at ±2000 centipawns for mate, and the classification algorithm treats it as the optimal outcome.
How the Prioritization Works
The classifier checks conditions in a specific order:
- Was it checkmate? → Best
- Did you miss a forced mate? → Miss
- Did you find a winning move? → Brilliant
- Was it the best move? → Best
- Did you miss a winning continuation? → Miss
- Was it a blunder? → Blunder
- Was it a mistake? → Mistake
- Was it an inaccuracy? → Inaccuracy
- Was it good? → Good
- Was it excellent? → Excellent
- Otherwise → Great
The win probability loss thresholds are checked after the priority logic, so a checkmate always gets classified correctly regardless of the WPL.
This Changed Over Time
Earlier versions of Chess Analyzer Pro had different thresholds. The v2.0.1 release adjusted them to better align with what players expect from Chess.com-style classification:
- Blunder threshold was tightened (from 15% to 19% WPL)
- Mistake threshold was adjusted (from 6% to 8% WPL)
- Inaccuracy threshold was adjusted (from 3% to 4.5% WPL)
- Book move detection was improved with a cooldown to prevent premature exits from theory
These thresholds are not configurable through the UI. They're set in the code based on testing across hundreds of games.
Links
- Download Chess Analyzer Pro: chess-analyzer-ut.vercel.app/releases
- GitHub Repository: github.com/imutkarsht/Chess_analyzer
- Analysis Calculation Docs: chess-analyzer-ut.vercel.app/docs/analysis-calc-logic