├── LICENSE ├── functions.py ├── game_result_by_evaluation.ipynb ├── position_sharpness.ipynb └── queries.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Chris Goldammer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /functions.py: -------------------------------------------------------------------------------- 1 | CONNSTRING_PROD = "host=localhost port=5434 user=postgres dbname=chess_prod" 2 | CONNSTRING_DEV = "host=localhost port=5434 user=postgres dbname=chess_dev" 3 | 4 | names = { 5 | 0: "number_moves_own" 6 | , 1: "number_moves_opp" 7 | , 2: "number_checks_own" 8 | , 3: "number_checks_opp" 9 | , 4: "number_takes_own" 10 | , 5: "number_takes_opp" 11 | , 6: "number_takes_pawn_own" 12 | , 7: "number_takes_pawn_opp" 13 | , 8: "opp_kings" 14 | , 9: "piece_values_own" 15 | , 10: "piece_values_opp" 16 | , 11: "kings_pawn_own" 17 | , 12: "kings_pawn_opp" 18 | , 13: "king_row_own" 19 | , 14: "king_row_opp" 20 | , 15: "queens_own" 21 | , 16: "queens_opp" 22 | , 17: "rooks_own" 23 | , 18: "rooks_opp" 24 | , 19: "in_check" 25 | } 26 | 27 | # data StatType = NumberMovesOwn 28 | # | NumberMovesOpp 29 | # | NumberChecksOwn 30 | # | NumberChecksOpp 31 | # | NumberTakesOwn 32 | # | NumberTakesOpp 33 | # | NumberTakesPawnOwn 34 | # | NumberTakesPawnOpp 35 | # | OppKings 36 | # | PieceValuesOwn 37 | # | PieceValuesOpp 38 | # | KingPawnsOwn 39 | # | KingPawnsOpp 40 | # | KingRowOwn 41 | # | KingRowOpp 42 | # | QueensOwn 43 | # | QueensOpp 44 | # | RooksOwn 45 | # | RooksOpp deriving (Eq, Enum) 46 | 47 | def top_code(x, val): 48 | x[x > val] = val 49 | return x 50 | 51 | def bottom_code(x, val): 52 | x[x < val] = val 53 | return x 54 | 55 | def top_and_bottom(x, bottom, top): 56 | return top_code(bottom_code(x, bottom), top) 57 | 58 | -------------------------------------------------------------------------------- /game_result_by_evaluation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Overview\n", 8 | "\n", 9 | "In this analysis, we measure how well players convert an advantage, as measured by the computer evaluation.\n", 10 | "\n", 11 | "For instance, we would expect a player to obtain roughly 50% of all available points if they have an equal position against a similarly-rated player. But this percentage will increase if they are higher-rated than their opponent.\n", 12 | "\n", 13 | "I find that, if you are playing against someone who is 300 points lower-rated than you, and you are in a losing position (-2), then you're still expected to get more than 50% of points!\n", 14 | "\n", 15 | "The impact of the rating on the win percentage is not strongly affected by player quality, the effects are similarly strong for a sample of strong players (Elo > 2000) and super tournaments." 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "# Setup" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 5, 28 | "metadata": {}, 29 | "outputs": [], 30 | "source": [ 31 | "import pandas as pd\n", 32 | "import numpy as np\n", 33 | "import psycopg2\n", 34 | "import pandas.io.sql as sqlio\n", 35 | "import statsmodels.formula.api as smf\n", 36 | "import imp" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 6, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/plain": [ 47 | "" 48 | ] 49 | }, 50 | "execution_count": 6, 51 | "metadata": {}, 52 | "output_type": "execute_result" 53 | } 54 | ], 55 | "source": [ 56 | "import queries\n", 57 | "import functions as f\n", 58 | "imp.reload(f); imp.reload(queries)" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 7, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "pd.set_option('precision', 2) \n", 68 | "pd.set_option('display.width', 200)\n", 69 | "\n", 70 | "%matplotlib inline\n", 71 | "import matplotlib\n", 72 | "import numpy as np\n", 73 | "import matplotlib.pyplot as plt" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 13, 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "use_dev = False\n", 83 | "connstring = f.CONNSTRING_DEV if use_dev else f.CONNSTRING_PROD\n", 84 | "conn = psycopg2.connect(connstring)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [ 91 | "# Data cleaning" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "We look only at moves between move 10 and 40 of a game. Thus we exclude moves in which most players are still in book and also long endgames which provide a lot of observations, but little change in the status of the game." 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 18, 104 | "metadata": {}, 105 | "outputs": [], 106 | "source": [ 107 | "params = {\n", 108 | " 'move_number_start': 10,\n", 109 | " 'move_number_end': 40\n", 110 | "}" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 24, 116 | "metadata": {}, 117 | "outputs": [ 118 | { 119 | "data": { 120 | "text/plain": [ 121 | "(572665, 6)" 122 | ] 123 | }, 124 | "execution_count": 24, 125 | "metadata": {}, 126 | "output_type": "execute_result" 127 | } 128 | ], 129 | "source": [ 130 | "df = sqlio.read_sql_query(queries.q_rating, conn, params=params) \n", 131 | "df.shape" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "## Summary statistics" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": {}, 144 | "source": [ 145 | "### Number of observations " 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": 25, 151 | "metadata": {}, 152 | "outputs": [ 153 | { 154 | "data": { 155 | "text/plain": [ 156 | "kingbase_random 532836\n", 157 | "Rejkjavik Open 2018 23716\n", 158 | "Candidates 2011-2018 5916\n", 159 | "Wijk An Zee (Tata Steel) 2012-2018 5193\n", 160 | "Supertournaments 2017 4461\n", 161 | "World Championships 1886-2014 543\n", 162 | "Name: db_name, dtype: int64" 163 | ] 164 | }, 165 | "execution_count": 25, 166 | "metadata": {}, 167 | "output_type": "execute_result" 168 | } 169 | ], 170 | "source": [ 171 | "df.db_name.value_counts()" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": 26, 177 | "metadata": {}, 178 | "outputs": [], 179 | "source": [ 180 | "df['difference'] = df.rating_own - df.rating_opponent \n", 181 | "df['result'] = df.win + 0.5 * df.draw" 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "metadata": {}, 187 | "source": [ 188 | "### Standard deviation of rating difference\n", 189 | "The standard deviation is much smaller in elite tournaments than in opens:" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 27, 195 | "metadata": {}, 196 | "outputs": [ 197 | { 198 | "data": { 199 | "text/plain": [ 200 | "db_name\n", 201 | "Candidates 2011-2018 35.01\n", 202 | "Rejkjavik Open 2018 321.70\n", 203 | "Supertournaments 2017 61.70\n", 204 | "Wijk An Zee (Tata Steel) 2012-2018 87.20\n", 205 | "World Championships 1886-2014 82.67\n", 206 | "kingbase_random 173.47\n", 207 | "Name: difference, dtype: float64" 208 | ] 209 | }, 210 | "execution_count": 27, 211 | "metadata": {}, 212 | "output_type": "execute_result" 213 | } 214 | ], 215 | "source": [ 216 | "df.groupby('db_name').difference.std()" 217 | ] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "metadata": {}, 222 | "source": [ 223 | "## Data cleaning" 224 | ] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "metadata": {}, 229 | "source": [ 230 | "Creating a grouped variable for the rating difference" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 28, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [ 239 | "df['difference_group'] = round(df.difference / 200)\n", 240 | "diff_max = 3\n", 241 | "df.loc[df.difference_group < -diff_max, 'difference_group'] = -diff_max\n", 242 | "df.loc[df.difference_group > diff_max, 'difference_group'] = diff_max\n", 243 | "\n", 244 | "df['eval_group'] = round(df.ev / 100)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "markdown", 249 | "metadata": {}, 250 | "source": [ 251 | "# Summarizing the data" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 35, 257 | "metadata": {}, 258 | "outputs": [], 259 | "source": [ 260 | "df_king = df.query('db_name == \"kingbase_random\"')" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 36, 266 | "metadata": {}, 267 | "outputs": [], 268 | "source": [ 269 | "means = pd.DataFrame(\n", 270 | " df_king\n", 271 | " .query('-3 <= eval_group <= 3')\n", 272 | " .groupby(['difference_group', 'eval_group'])\n", 273 | " .result\n", 274 | " .mean()\n", 275 | ")\n", 276 | "counts = (df_king\n", 277 | " .query('-3 <= eval_group <= 3')\n", 278 | " .groupby(['difference_group', 'eval_group'])\n", 279 | " .result\n", 280 | " .count())\n", 281 | "\n", 282 | "means['counts'] = counts \n", 283 | "means = means.query('counts >= 10 and difference_group >= 0')\n", 284 | "del means['counts']" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 42, 290 | "metadata": {}, 291 | "outputs": [], 292 | "source": [ 293 | "table = means.unstack(0) * 100 \n", 294 | "table.index = [int(v) for v in table.index]\n", 295 | "def group_name(v):\n", 296 | " return '%s to %s' % (v*200-100, v*200+100)\n", 297 | "table.columns = [group_name(v) for v in table.columns.get_level_values(1)]" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 43, 303 | "metadata": {}, 304 | "outputs": [ 305 | { 306 | "data": { 307 | "text/plain": [ 308 | "" 309 | ] 310 | }, 311 | "execution_count": 43, 312 | "metadata": {}, 313 | "output_type": "execute_result" 314 | }, 315 | { 316 | "data": { 317 | "image/png": "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yYSEhEjxV8wopQgJCZEzt0IIIUodKQDtRIq/4kleNyGEEKWRFIBCCCGEEKWMFIAl0L59+2jXrh3e3t68+eabpraVK1dSp04dIiMjmTZtWkb8yJEjtGnThsjISO6//35SU1NzfOypU6cSGRlJnTp1+Pnnn3M85rXXXit0zi+88AJVq1alTJkypnhKSgr3338/kZGRtGnThqNHjxYql4I+LyGEEKI0kQKwBAoODub999/n6aefNsUtFgsjR45kxYoV7Nmzhy+//JI9e/YAMG7cOMaMGcPBgwcJCgpi7ty52R53z549LFq0iN27d7Ny5Uoee+wxLBZLtuOupQC866672LhxY7b43LlzCQoK4uDBg4wZM4Zx48YVKpeCPC8hhBCitJFZwHZUffyPDn38o9PuKNBxFSpUoEKFCvz4ozmfjRs3EhkZSc2aNQHo168fy5Yto169evz222988cUXAAwYMIBJkyYxYsQI0/2XLVtGv3798Pb2pkaNGkRGRrJx40batWuXccz48eNJSkqiadOmNGjQgM8//5y3336befPmATBkyBCefPLJbDm3bds2x+eybNkyJk2aBECfPn0YNWoUWusC5aK1LtDzEkIIIUobOQNYikRHR1O1atWM2+Hh4URHRxMXF0e5cuXw8PAwxQt6/8ymTZuGr68v27dv5/PPP2fLli3Mnz+fDRs2sH79eubMmcO2bduuKWcPDw8CAwOJi4srUC4FfV5CCCFEaSMFoHCov//+m169euHv70+ZMmXo3bs3f/31l6vTEkIIIUo1KQBLgFmzZtG0aVOaNm1KTExMrseFhYVx4sSJjNtRUVGEhYUREhJCfHw86enppnhB7+9ImftMT08nISGBkJCQAuVS0OclhBBClDpaa/koxEeLFi10Vnv27MkWKwomTpyo33jjjYzbaWlpukaNGvrw4cM6JSVFN27cWO/atUtrrXWfPn30l19+qbXWetiwYXrWrFnZHm/Xrl26cePGOjk5WR8+fFjXqFFDp6enZzuuXLlyOjU1VWut9ZYtW3SjRo305cuX9aVLl3SDBg301q1bc83Z39/fdHvmzJl62LBhWmutv/zyS33fffcVKpeCPK+i+voJIYQQ1wvYrHOoZ1xeUBW3j+JQAJ48eVKHhYXpgIAAHRgYqMPCwnRCQoLWWusff/xR16pVS9esWVNPmTIl4z6HDh3S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\n", 318 | "text/plain": [ 319 | "
" 320 | ] 321 | }, 322 | "metadata": { 323 | "needs_background": "light" 324 | }, 325 | "output_type": "display_data" 326 | } 327 | ], 328 | "source": [ 329 | "fig, ax = plt.subplots()\n", 330 | "ax.set_xlabel(\"Evaluation\", fontsize=20)\n", 331 | "ax.set_ylabel(\"Result percentage\", fontsize=20)\n", 332 | "settings = {\n", 333 | " 'title': \"Result percentage as function of evaluation and rating difference\",\n", 334 | " 'fontsize': 20,\n", 335 | " 'legend': True,\n", 336 | " 'figsize': (10, 10),\n", 337 | " 'lw': 4,\n", 338 | " 'ax': ax\n", 339 | "}\n", 340 | "table.plot(**settings)" 341 | ] 342 | }, 343 | { 344 | "cell_type": "markdown", 345 | "metadata": {}, 346 | "source": [ 347 | "The graph shows the expected result percentage as a function of the position evaluation and the rating difference to the opponent.\n", 348 | "\n", 349 | "For instance, we find that, if you play against someone who is 400 points lower-rated then you and your evaluation is -3, then you are still obtaining more than 40% of the points. This is among players with Elo above 2000.\n", 350 | "\n", 351 | "Note, however, that this is just one point on this graph. To quantify this by summarizing all the data, we work with a linear regression, below. " 352 | ] 353 | }, 354 | { 355 | "cell_type": "markdown", 356 | "metadata": {}, 357 | "source": [ 358 | "The same data in table format" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 44, 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "data": { 368 | "text/html": [ 369 | "
\n", 370 | "\n", 383 | "\n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | "
-100.0 to 100.0100.0 to 300.0300.0 to 500.0500.0 to 700.0
-37.3415.9834.40NaN
-215.3829.4139.17NaN
-130.7850.3756.4179.41
052.5871.1581.5095.54
166.2782.8290.7998.02
287.7294.1195.96100.00
393.5497.1297.35100.00
\n", 445 | "
" 446 | ], 447 | "text/plain": [ 448 | " -100.0 to 100.0 100.0 to 300.0 300.0 to 500.0 500.0 to 700.0\n", 449 | "-3 7.34 15.98 34.40 NaN\n", 450 | "-2 15.38 29.41 39.17 NaN\n", 451 | "-1 30.78 50.37 56.41 79.41\n", 452 | " 0 52.58 71.15 81.50 95.54\n", 453 | " 1 66.27 82.82 90.79 98.02\n", 454 | " 2 87.72 94.11 95.96 100.00\n", 455 | " 3 93.54 97.12 97.35 100.00" 456 | ] 457 | }, 458 | "execution_count": 44, 459 | "metadata": {}, 460 | "output_type": "execute_result" 461 | } 462 | ], 463 | "source": [ 464 | "table" 465 | ] 466 | }, 467 | { 468 | "cell_type": "markdown", 469 | "metadata": {}, 470 | "source": [ 471 | "## Quantifying the rating-evaluation tradeoff\n", 472 | "We know try to quantify these effects and calculate the tradeoff between player rating and the position evaluation. We do this using a linear regression." 473 | ] 474 | }, 475 | { 476 | "cell_type": "markdown", 477 | "metadata": {}, 478 | "source": [ 479 | "Creating helper variables that are scaled, which gives us nicer regression coefficients." 480 | ] 481 | }, 482 | { 483 | "cell_type": "code", 484 | "execution_count": 45, 485 | "metadata": {}, 486 | "outputs": [], 487 | "source": [ 488 | "df['rating_own_small'] = df.rating_own / 100\n", 489 | "df['rating_opponent_small'] = df.rating_opponent / 100\n", 490 | "df['diff_small'] = df.difference / 100\n", 491 | "df['eval_small'] = df.ev / 100" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": 47, 497 | "metadata": {}, 498 | "outputs": [ 499 | { 500 | "data": { 501 | "text/html": [ 502 | "\n", 503 | "\n", 504 | "\n", 505 | " \n", 506 | "\n", 507 | "\n", 508 | " \n", 509 | "\n", 510 | "\n", 511 | " \n", 512 | "\n", 513 | "\n", 514 | " \n", 515 | "\n", 516 | "\n", 517 | " \n", 518 | "\n", 519 | "\n", 520 | " \n", 521 | "\n", 522 | "\n", 523 | " \n", 524 | "\n", 525 | "\n", 526 | " \n", 527 | "\n", 528 | "\n", 529 | " \n", 530 | "\n", 531 | "
OLS Regression Results
Dep. Variable: result R-squared: 0.362
Model: OLS Adj. R-squared: 0.362
Method: Least Squares F-statistic: 1.453e+05
Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00
Time: 12:55:14 Log-Likelihood: -1.4711e+05
No. Observations: 511532 AIC: 2.942e+05
Df Residuals: 511529 BIC: 2.943e+05
Df Model: 2
Covariance Type: nonrobust
\n", 532 | "\n", 533 | "\n", 534 | " \n", 535 | "\n", 536 | "\n", 537 | " \n", 538 | "\n", 539 | "\n", 540 | " \n", 541 | "\n", 542 | "\n", 543 | " \n", 544 | "\n", 545 | "
coef std err t P>|t| [0.025 0.975]
Intercept 0.5119 0.000 1122.939 0.000 0.511 0.513
eval_small 0.1280 0.000 336.778 0.000 0.127 0.129
diff_small 0.0875 0.000 325.704 0.000 0.087 0.088
\n", 546 | "\n", 547 | "\n", 548 | " \n", 549 | "\n", 550 | "\n", 551 | " \n", 552 | "\n", 553 | "\n", 554 | " \n", 555 | "\n", 556 | "\n", 557 | " \n", 558 | "\n", 559 | "
Omnibus: 7838.850 Durbin-Watson: 0.076
Prob(Omnibus): 0.000 Jarque-Bera (JB): 5068.977
Skew: -0.108 Prob(JB): 0.00
Kurtosis: 2.562 Cond. No. 1.84


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." 560 | ], 561 | "text/plain": [ 562 | "\n", 563 | "\"\"\"\n", 564 | " OLS Regression Results \n", 565 | "==============================================================================\n", 566 | "Dep. Variable: result R-squared: 0.362\n", 567 | "Model: OLS Adj. R-squared: 0.362\n", 568 | "Method: Least Squares F-statistic: 1.453e+05\n", 569 | "Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00\n", 570 | "Time: 12:55:14 Log-Likelihood: -1.4711e+05\n", 571 | "No. Observations: 511532 AIC: 2.942e+05\n", 572 | "Df Residuals: 511529 BIC: 2.943e+05\n", 573 | "Df Model: 2 \n", 574 | "Covariance Type: nonrobust \n", 575 | "==============================================================================\n", 576 | " coef std err t P>|t| [0.025 0.975]\n", 577 | "------------------------------------------------------------------------------\n", 578 | "Intercept 0.5119 0.000 1122.939 0.000 0.511 0.513\n", 579 | "eval_small 0.1280 0.000 336.778 0.000 0.127 0.129\n", 580 | "diff_small 0.0875 0.000 325.704 0.000 0.087 0.088\n", 581 | "==============================================================================\n", 582 | "Omnibus: 7838.850 Durbin-Watson: 0.076\n", 583 | "Prob(Omnibus): 0.000 Jarque-Bera (JB): 5068.977\n", 584 | "Skew: -0.108 Prob(JB): 0.00\n", 585 | "Kurtosis: 2.562 Cond. No. 1.84\n", 586 | "==============================================================================\n", 587 | "\n", 588 | "Notes:\n", 589 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", 590 | "\"\"\"" 591 | ] 592 | }, 593 | "execution_count": 47, 594 | "metadata": {}, 595 | "output_type": "execute_result" 596 | } 597 | ], 598 | "source": [ 599 | "df_king = df.query('db_name == \"kingbase_random\"')\n", 600 | "reg = smf.ols('result ~ eval_small + diff_small', data=df_king.query('-5 <= eval_small <= 5')).fit()\n", 601 | "params = reg.params\n", 602 | "reg.summary()" 603 | ] 604 | }, 605 | { 606 | "cell_type": "markdown", 607 | "metadata": {}, 608 | "source": [ 609 | "To check for a non-linear effect, I include a squared term in the regression. The coefficient is small." 610 | ] 611 | }, 612 | { 613 | "cell_type": "code", 614 | "execution_count": 50, 615 | "metadata": {}, 616 | "outputs": [ 617 | { 618 | "data": { 619 | "text/html": [ 620 | "\n", 621 | "\n", 622 | "\n", 623 | " \n", 624 | "\n", 625 | "\n", 626 | " \n", 627 | "\n", 628 | "\n", 629 | " \n", 630 | "\n", 631 | "\n", 632 | " \n", 633 | "\n", 634 | "\n", 635 | " \n", 636 | "\n", 637 | "\n", 638 | " \n", 639 | "\n", 640 | "\n", 641 | " \n", 642 | "\n", 643 | "\n", 644 | " \n", 645 | "\n", 646 | "\n", 647 | " \n", 648 | "\n", 649 | "
OLS Regression Results
Dep. Variable: result R-squared: 0.362
Model: OLS Adj. R-squared: 0.362
Method: Least Squares F-statistic: 9.687e+04
Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00
Time: 12:55:38 Log-Likelihood: -1.4709e+05
No. Observations: 511532 AIC: 2.942e+05
Df Residuals: 511528 BIC: 2.942e+05
Df Model: 3
Covariance Type: nonrobust
\n", 650 | "\n", 651 | "\n", 652 | " \n", 653 | "\n", 654 | "\n", 655 | " \n", 656 | "\n", 657 | "\n", 658 | " \n", 659 | "\n", 660 | "\n", 661 | " \n", 662 | "\n", 663 | "\n", 664 | " \n", 665 | "\n", 666 | "
coef std err t P>|t| [0.025 0.975]
Intercept 0.5129 0.000 1038.282 0.000 0.512 0.514
eval_small 0.1281 0.000 336.586 0.000 0.127 0.129
I(eval_small * eval_small) -0.0007 0.000 -5.364 0.000 -0.001 -0.000
diff_small 0.0875 0.000 325.726 0.000 0.087 0.088
\n", 667 | "\n", 668 | "\n", 669 | " \n", 670 | "\n", 671 | "\n", 672 | " \n", 673 | "\n", 674 | "\n", 675 | " \n", 676 | "\n", 677 | "\n", 678 | " \n", 679 | "\n", 680 | "
Omnibus: 7840.481 Durbin-Watson: 0.076
Prob(Omnibus): 0.000 Jarque-Bera (JB): 5098.351
Skew: -0.110 Prob(JB): 0.00
Kurtosis: 2.564 Cond. No. 4.33


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." 681 | ], 682 | "text/plain": [ 683 | "\n", 684 | "\"\"\"\n", 685 | " OLS Regression Results \n", 686 | "==============================================================================\n", 687 | "Dep. Variable: result R-squared: 0.362\n", 688 | "Model: OLS Adj. R-squared: 0.362\n", 689 | "Method: Least Squares F-statistic: 9.687e+04\n", 690 | "Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00\n", 691 | "Time: 12:55:38 Log-Likelihood: -1.4709e+05\n", 692 | "No. Observations: 511532 AIC: 2.942e+05\n", 693 | "Df Residuals: 511528 BIC: 2.942e+05\n", 694 | "Df Model: 3 \n", 695 | "Covariance Type: nonrobust \n", 696 | "==============================================================================================\n", 697 | " coef std err t P>|t| [0.025 0.975]\n", 698 | "----------------------------------------------------------------------------------------------\n", 699 | "Intercept 0.5129 0.000 1038.282 0.000 0.512 0.514\n", 700 | "eval_small 0.1281 0.000 336.586 0.000 0.127 0.129\n", 701 | "I(eval_small * eval_small) -0.0007 0.000 -5.364 0.000 -0.001 -0.000\n", 702 | "diff_small 0.0875 0.000 325.726 0.000 0.087 0.088\n", 703 | "==============================================================================\n", 704 | "Omnibus: 7840.481 Durbin-Watson: 0.076\n", 705 | "Prob(Omnibus): 0.000 Jarque-Bera (JB): 5098.351\n", 706 | "Skew: -0.110 Prob(JB): 0.00\n", 707 | "Kurtosis: 2.564 Cond. No. 4.33\n", 708 | "==============================================================================\n", 709 | "\n", 710 | "Notes:\n", 711 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", 712 | "\"\"\"" 713 | ] 714 | }, 715 | "execution_count": 50, 716 | "metadata": {}, 717 | "output_type": "execute_result" 718 | } 719 | ], 720 | "source": [ 721 | "reg = smf.ols('result ~ eval_small + I(eval_small*eval_small) + diff_small', data=df_king.query('-5 <= eval_small <= 5')).fit()\n", 722 | "params = reg.params\n", 723 | "reg.summary()" 724 | ] 725 | }, 726 | { 727 | "cell_type": "code", 728 | "execution_count": 51, 729 | "metadata": {}, 730 | "outputs": [ 731 | { 732 | "name": "stdout", 733 | "output_type": "stream", 734 | "text": [ 735 | "Value of 100 rating points: 0.68\n" 736 | ] 737 | } 738 | ], 739 | "source": [ 740 | "value_of_100_rating = params['diff_small'] / params['eval_small']\n", 741 | "print(\"Value of 100 rating points: %0.2f\" % value_of_100_rating)" 742 | ] 743 | }, 744 | { 745 | "cell_type": "code", 746 | "execution_count": 52, 747 | "metadata": {}, 748 | "outputs": [], 749 | "source": [ 750 | "df_value = pd.DataFrame()\n", 751 | "df_value['rating_difference'] = np.arange(0, 400, 100)\n", 752 | "df_value['evaluation'] = -(df_value.rating_difference * value_of_100_rating)/100" 753 | ] 754 | }, 755 | { 756 | "cell_type": "markdown", 757 | "metadata": {}, 758 | "source": [ 759 | "### Evaluation to get result of 50% against a player\n", 760 | "Note that this is a linear interpolation from the linear regression." 761 | ] 762 | }, 763 | { 764 | "cell_type": "code", 765 | "execution_count": 55, 766 | "metadata": {}, 767 | "outputs": [ 768 | { 769 | "data": { 770 | "text/html": [ 771 | "
\n", 772 | "\n", 785 | "\n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | "
evaluation
rating_difference
0-0.00
100-0.68
200-1.37
300-2.05
\n", 815 | "
" 816 | ], 817 | "text/plain": [ 818 | " evaluation\n", 819 | "rating_difference \n", 820 | "0 -0.00\n", 821 | "100 -0.68\n", 822 | "200 -1.37\n", 823 | "300 -2.05" 824 | ] 825 | }, 826 | "execution_count": 55, 827 | "metadata": {}, 828 | "output_type": "execute_result" 829 | } 830 | ], 831 | "source": [ 832 | "df_value.set_index('rating_difference')" 833 | ] 834 | }, 835 | { 836 | "cell_type": "markdown", 837 | "metadata": {}, 838 | "source": [ 839 | "# Comparison to super-tournaments" 840 | ] 841 | }, 842 | { 843 | "cell_type": "code", 844 | "execution_count": 57, 845 | "metadata": {}, 846 | "outputs": [ 847 | { 848 | "data": { 849 | "text/html": [ 850 | "\n", 851 | "\n", 852 | "\n", 853 | " \n", 854 | "\n", 855 | "\n", 856 | " \n", 857 | "\n", 858 | "\n", 859 | " \n", 860 | "\n", 861 | "\n", 862 | " \n", 863 | "\n", 864 | "\n", 865 | " \n", 866 | "\n", 867 | "\n", 868 | " \n", 869 | "\n", 870 | "\n", 871 | " \n", 872 | "\n", 873 | "\n", 874 | " \n", 875 | "\n", 876 | "\n", 877 | " \n", 878 | "\n", 879 | "
OLS Regression Results
Dep. Variable: result R-squared: 0.362
Model: OLS Adj. R-squared: 0.362
Method: Least Squares F-statistic: 9.687e+04
Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00
Time: 12:56:34 Log-Likelihood: -1.4709e+05
No. Observations: 511532 AIC: 2.942e+05
Df Residuals: 511528 BIC: 2.942e+05
Df Model: 3
Covariance Type: nonrobust
\n", 880 | "\n", 881 | "\n", 882 | " \n", 883 | "\n", 884 | "\n", 885 | " \n", 886 | "\n", 887 | "\n", 888 | " \n", 889 | "\n", 890 | "\n", 891 | " \n", 892 | "\n", 893 | "\n", 894 | " \n", 895 | "\n", 896 | "
coef std err t P>|t| [0.025 0.975]
Intercept 0.5129 0.000 1038.282 0.000 0.512 0.514
eval_small 0.1281 0.000 336.586 0.000 0.127 0.129
I(eval_small * eval_small) -0.0007 0.000 -5.364 0.000 -0.001 -0.000
diff_small 0.0875 0.000 325.726 0.000 0.087 0.088
\n", 897 | "\n", 898 | "\n", 899 | " \n", 900 | "\n", 901 | "\n", 902 | " \n", 903 | "\n", 904 | "\n", 905 | " \n", 906 | "\n", 907 | "\n", 908 | " \n", 909 | "\n", 910 | "
Omnibus: 7840.481 Durbin-Watson: 0.076
Prob(Omnibus): 0.000 Jarque-Bera (JB): 5098.351
Skew: -0.110 Prob(JB): 0.00
Kurtosis: 2.564 Cond. No. 4.33


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." 911 | ], 912 | "text/plain": [ 913 | "\n", 914 | "\"\"\"\n", 915 | " OLS Regression Results \n", 916 | "==============================================================================\n", 917 | "Dep. Variable: result R-squared: 0.362\n", 918 | "Model: OLS Adj. R-squared: 0.362\n", 919 | "Method: Least Squares F-statistic: 9.687e+04\n", 920 | "Date: Sat, 01 Jan 2022 Prob (F-statistic): 0.00\n", 921 | "Time: 12:56:34 Log-Likelihood: -1.4709e+05\n", 922 | "No. Observations: 511532 AIC: 2.942e+05\n", 923 | "Df Residuals: 511528 BIC: 2.942e+05\n", 924 | "Df Model: 3 \n", 925 | "Covariance Type: nonrobust \n", 926 | "==============================================================================================\n", 927 | " coef std err t P>|t| [0.025 0.975]\n", 928 | "----------------------------------------------------------------------------------------------\n", 929 | "Intercept 0.5129 0.000 1038.282 0.000 0.512 0.514\n", 930 | "eval_small 0.1281 0.000 336.586 0.000 0.127 0.129\n", 931 | "I(eval_small * eval_small) -0.0007 0.000 -5.364 0.000 -0.001 -0.000\n", 932 | "diff_small 0.0875 0.000 325.726 0.000 0.087 0.088\n", 933 | "==============================================================================\n", 934 | "Omnibus: 7840.481 Durbin-Watson: 0.076\n", 935 | "Prob(Omnibus): 0.000 Jarque-Bera (JB): 5098.351\n", 936 | "Skew: -0.110 Prob(JB): 0.00\n", 937 | "Kurtosis: 2.564 Cond. No. 4.33\n", 938 | "==============================================================================\n", 939 | "\n", 940 | "Notes:\n", 941 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", 942 | "\"\"\"" 943 | ] 944 | }, 945 | "execution_count": 57, 946 | "metadata": {}, 947 | "output_type": "execute_result" 948 | } 949 | ], 950 | "source": [ 951 | "df_super = df.query('db_name == \"Supertournaments 2017\"')\n", 952 | "reg_super = smf.ols('result ~ eval_small + diff_small', data=df_super.query('-5 <= eval_small <= 5')).fit()\n", 953 | "params_super = reg_super.params\n", 954 | "reg.summary()" 955 | ] 956 | }, 957 | { 958 | "cell_type": "code", 959 | "execution_count": 60, 960 | "metadata": {}, 961 | "outputs": [ 962 | { 963 | "name": "stdout", 964 | "output_type": "stream", 965 | "text": [ 966 | "Value of 100 rating points (Kingbase): 0.68\n" 967 | ] 968 | } 969 | ], 970 | "source": [ 971 | "value_of_100_rating = params['diff_small'] / params['eval_small']\n", 972 | "print(\"Value of 100 rating points (Kingbase): %0.2f\" % value_of_100_rating)" 973 | ] 974 | }, 975 | { 976 | "cell_type": "code", 977 | "execution_count": 61, 978 | "metadata": {}, 979 | "outputs": [ 980 | { 981 | "name": "stdout", 982 | "output_type": "stream", 983 | "text": [ 984 | "Value of 100 rating points (Supertournaments): 0.59\n" 985 | ] 986 | } 987 | ], 988 | "source": [ 989 | "value_of_100_rating = params_super['diff_small'] / params_super['eval_small']\n", 990 | "print(\"Value of 100 rating points (Supertournaments): %0.2f\" % value_of_100_rating)" 991 | ] 992 | }, 993 | { 994 | "cell_type": "markdown", 995 | "metadata": {}, 996 | "source": [ 997 | "For elite players, the impact of rating on the result percentage is only a little smaller (0.6 vs 0.7) compared to a sample of games from players with rating above 2000 (Kingbase)." 998 | ] 999 | } 1000 | ], 1001 | "metadata": { 1002 | "kernelspec": { 1003 | "display_name": "Python 3", 1004 | "language": "python", 1005 | "name": "python3" 1006 | }, 1007 | "language_info": { 1008 | "codemirror_mode": { 1009 | "name": "ipython", 1010 | "version": 3 1011 | }, 1012 | "file_extension": ".py", 1013 | "mimetype": "text/x-python", 1014 | "name": "python", 1015 | "nbconvert_exporter": "python", 1016 | "pygments_lexer": "ipython3", 1017 | "version": "3.8.3" 1018 | } 1019 | }, 1020 | "nbformat": 4, 1021 | "nbformat_minor": 2 1022 | } 1023 | -------------------------------------------------------------------------------- /queries.py: -------------------------------------------------------------------------------- 1 | q_rating = """ 2 | SELECT 3 | db_name 4 | , rating_own 5 | , rating_opponent 6 | , eval as ev 7 | , (result=1) :: Int as win 8 | , (result=0) :: Int as draw 9 | FROM ( 10 | SELECT 11 | game_result as result 12 | , is_white 13 | , rating1.rating as rating_own 14 | , rating2.rating as rating_opponent 15 | , eval 16 | , move_number 17 | , database.name as db_name 18 | FROM game 19 | JOIN player_rating as rating1 ON 20 | game.player_white_id=rating1.player_id 21 | AND extract(year from game.date)=rating1.year 22 | AND extract(month from game.date)=rating1.month 23 | JOIN player_rating as rating2 ON 24 | game.player_black_id=rating2.player_id 25 | AND extract(year from game.date)=rating2.year 26 | AND extract(month from game.date)=rating2.month 27 | JOIN move_eval on game.id=move_eval.game_id 28 | JOIN database on game.database_id=database.id 29 | WHERE 30 | move_number>=%(move_number_start)s and move_number<=%(move_number_end)s 31 | AND eval is not null 32 | AND database.is_public OR name='kingbase_random' 33 | ) values 34 | WHERE is_white 35 | """ 36 | 37 | q_games = """SELECT * from game""" 38 | q_db = """SELECT * from database WHERE is_public OR name='kingbase_random'""" 39 | q_players = """SELECT * from player""" 40 | q_tournaments = """SELECT * from tournament""" 41 | 42 | q_positions = """ 43 | SELECT 44 | g.id as game_id 45 | , me.move_number, me.is_white 46 | , me.fen, me.eval as eval_played, me.eval_best 47 | , g.game_result as result 48 | , pa.typ, pa.value 49 | FROM move_eval me 50 | JOIN game g on me.game_id = g.id 51 | JOIN position p on me.fen = p.fen 52 | JOIN position_attribute pa on pa.position_id = p.id 53 | WHERE eval_best is not null 54 | LIMIT {limit} 55 | """ 56 | --------------------------------------------------------------------------------