How does the analysis engine determine some moves are blunders vs mistakes or inaccuracies?

Sort:
Avatar of blocktree

Look at this game for example: https://www.chess.com/live#g=2038060715

 

It classifies this move of 7 mine as a blunder:

BHKCHM5.png

 

bVgYgOG.png

 

But later when my opponent loses his queen because he did not notice that I had just moved my knight to threaten it, the engine says this is just an "inaccuracy."

 

fBVQeDS.png

 

A7j5k0Y.pngh3TUeQm.pngUHwfzoa.pngTGjJA0n.png

 

Someone please explain this?

Avatar of Williamfwm

It's based on how large the swing in advantage is, but it's scaled based on how big the existing advantage is. I'd say the math is just off, and doesn't correctly identify what humans would call blunders.

 

According to a quick analysis, black is 6 ahead before, at 19...Ne5, and 18.6 ahead afterwards, at 20. Nc2. Whatever scaling math they're doing isn't considering that a blunder since white is already severely losing, but the math is just wrong. Any human would say that blundering the queen while losing is still a blunder.

 

Chess.com has a help article partially answering your question, and mentioning the scale factor, but not what their exact scaling method is:

 

https://support.chess.com/customer/portal/articles/1444907-in-the-computer-analysis-what-s-the-difference-between-inaccuracy-mistake-and-blunder-

 

(Read carefully and note that a swing of 2 points is considered a blunder in a roughly equal position, not in all positions.)

Avatar of Williamfwm

Digging in to their Javascript, they have a gradeMove() function inside computer-analysis.service.js with some magic numbers used as falloff thresholds to sort score changes of different magnitudes into inaccuracy, blunder, etc, and yes, it looks like the short answer is that their logic doesn't work terribly well for some situations, like yours

 

// for any single non-mating move, function moveGrade accepts
//
// * playerSdiff: the score-difference between the player
// move and the best engine move (always positive)
//
// * playerRelativeScore: the absolute engine score after the
// given player move, cast into positive/negative according to
// the perspective of the current player, *not* signed
// according to white/black.
//
// Note: there are various bits of defensive driving below for
// mate-level score cases, But this function is really not
// intended for that purpose. It is doubtful that it works well
// at a playerRelativeScore magnitude greater than +/- 10.
// However, it is still better and more consistent than any past
// system at chess.com.

 

Avatar of MenuGardened

cool ig