We recently noticed that Anish Giri drew all of his first seven games at the Chennai Grandmasters tournament in India. He’s also well known for drawing all 14 games at the 2016 FIDE Candidates Tournament. For most chess fans, “boring” often means too many draws. But is Giri really the most boring top player? We decided to dig into the numbers to find out more fairly.
Not all draws are equal. Some players draw because they are cautious, others because they are fighting top competition. To find the most boring player, we looked at draw rates adjusted for games played. This lets us compare Magnus Carlsen, Hans Niemann, and others fairly, regardless of how many tournaments they have played.
How We Measured “Boring”
We chose all 31 super grandmasters (players rated 2700 or higher) in the FIDE August 2025 classical rating list. Then we looked at all their career classical games, counting wins, draws, and losses, to work out each player’s draw rate.
But raw draw rates can be misleading. Younger players like Hans Niemann or Gukesh Dommaraju have played far more games at their age than older top players. That’s partly because today there are more tournaments and more top-rated opponents than in the 2000s or early 2010s. You know Hans Niemann has racked up more wins than Magnus Carlsen has draws.
To account for this, we used regression analysis to adjust for the total number of games in each player’s career.
We used Pandas and StatsModels API for the coding
import pandas as pd
import statsmodels.api as sm
# Create dataframe from given data
data = [
(17, "Niemann", 689, 405, 344, 1455, 28.16),
(24, "Aravindh", 920, 495, 303, 1742, 28.81),
(6, "Gukesh", 853, 481, 324, 1664, 29.01),
(25, "Sindarov", 493, 306, 199, 1023, 30.66),
(5, "Erigaisi", 800, 501, 300, 1606, 31.29),
(4, "Pragg", 740, 507, 322, 1573, 32.31),
(8, "Firouzja", 506, 340, 191, 1045, 32.79),
(21, "Keymer", 397, 316, 209, 943, 34.27),
(20, "Fedoseev", 697, 541, 300, 1558, 35.18),
(7, "Abdu", 471, 410, 172, 1060, 38.94),
(28, "Rapport", 650, 594, 253, 1525, 39.68),
(23, "Duda", 495, 467, 185, 1170, 40.71),
(22, "Le", 465, 422, 103, 1012, 42.63),
(9, "Wei", 433, 484, 148, 1074, 45.45),
(26, "Vidit", 561, 630, 154, 1371, 46.84),
(29, "Yu", 564, 666, 148, 1407, 48.33),
(27, "Topalov", 159, 256, 97, 539, 50.00),
(3, "Caruana", 659, 887, 221, 1770, 50.20),
(2, "Nakamura", 424, 609, 142, 1177, 51.83),
(19, "Ding", 392, 602, 124, 1137, 53.85),
(14, "Nepo", 348, 603, 158, 1123, 54.37),
(1, "Carlsen", 404, 598, 92, 1095, 54.66),
(30, "Harikrishna", 460, 726, 140, 1356, 54.75),
(10, "Giri", 520, 896, 170, 1596, 56.49),
(12, "So", 485, 802, 114, 1413, 57.24),
(11, "Mamedyarov", 373, 677, 129, 1190, 57.42),
(18, "MVL", 477, 916, 133, 1544, 60.03),
(15, "Dominguez", 210, 467, 74, 766, 62.18),
(16, "Aronian", 292, 755, 135, 1198, 63.87),
(13, "Anand", 148, 462, 80, 703, 66.96),
]
df = pd.DataFrame(data, columns=["Rank", "Player", "Won", "Draw", "Lose", "Total", "DrawRate"])
# Regression: DrawRate ~ Total games
X = sm.add_constant(df["Total"])
y = df["DrawRate"]
model = sm.OLS(y, X).fit()
# Predicted draw rate from games played
df["PredictedDrawRate"] = model.predict(X)
# Adjusted draw rate = actual - predicted (residuals)
df["AdjustedDrawRate"] = df["DrawRate"] - df["PredictedDrawRate"]
# Sort by adjusted draw rate (highest means more drawish than expected)
df_sorted = df.sort_values("AdjustedDrawRate", ascending=False)
import caas_jupyter_tools
caas_jupyter_tools.display_dataframe_to_user(name="Adjusted Draw Rate for Super GMs", dataframe=df_sorted)
To spot who’s truly the most draw-prone, we treated the data like a math problem. First, we ran a regression with draw rate as the dependent variable and total games played as the independent variable. This gave us a trend line:
Predicted Draw Rate = β0 + β1 × (Games Played)
β₀ (beta-zero) is the intercept, the draw rate we’d expect if a player had played zero games (basically, the baseline starting point of the trend line).
β₁ (beta-one) is the slope, showing how much the predicted draw rate changes for each additional game played.
Think of it like this:
β₀ = where the line starts.
β₁ = how steep the line climbs or falls.
This line shows the expected draw rate for any player, given how many games they’ve played.
Then we calculated each player’s Adjusted Draw Rate by subtracting the predicted rate from their actual rate:
Adjusted Draw Rate = Actual Draw Rate − Predicted Draw Rate
If the adjusted rate is positive, it means the player draws more often than we’d expect based on the average trend. If it’s negative, they draw less often than expected.
In simple terms:
- Predicted draw rate = how many draws you would expect given your number of games. It’s what the model estimates a player’s draw percentage should be, based on how many classical games they’ve played in their career.
- Adjusted draw rate = actual draw rate minus predicted draw rate. It is the difference between a player’s actual draw rate and their predicted draw rate. It shows how much more or less often a player draws compared to what you’d expect for someone with their amount of experience.
If the adjusted number is positive, the player is more drawish than expected. If it’s negative, the player is more decisive.
Full Results
Player | Total Games | Draw Rate (%) | Predicted Draw Rate (%) | Adjusted Draw Rate (%) |
MVL | 1544 | 60.03 | 42.39 | 17.64 |
Aronian | 1198 | 63.87 | 46.76 | 17.11 |
Giri | 1596 | 56.49 | 41.74 | 14.75 |
Anand | 703 | 66.96 | 53.01 | 13.95 |
So | 1413 | 57.24 | 44.05 | 13.19 |
Dominguez | 766 | 62.18 | 49.35 | 12.83 |
Mamedyarov | 1190 | 57.42 | 46.19 | 11.23 |
Harikrishna | 1356 | 54.75 | 43.63 | 11.12 |
Caruana | 1770 | 50.2 | 40.6 | 9.6 |
Carlsen | 1095 | 54.66 | 45.46 | 9.2 |
Nepomniachtchi | 1123 | 54.37 | 45.78 | 8.59 |
Ding | 1137 | 53.85 | 45.99 | 7.86 |
Nakamura | 1177 | 51.83 | 46.53 | 5.3 |
Yu | 1407 | 48.33 | 43.48 | 4.85 |
Vidit | 1371 | 46.84 | 43.19 | 3.65 |
Wei | 1074 | 45.45 | 45.01 | 0.44 |
Topalov | 539 | 50 | 50.69 | -0.69 |
Rapport | 1525 | 39.68 | 41.07 | -1.39 |
Le | 1012 | 42.63 | 44.73 | -2.1 |
Duda | 1170 | 40.71 | 46.41 | -5.7 |
Abdusattorov | 1060 | 38.94 | 44.92 | -5.98 |
Fedoseev | 1558 | 35.18 | 41.25 | -6.07 |
Praggnanandhaa | 1573 | 32.31 | 41.53 | -9.22 |
Keymer | 943 | 34.27 | 44.03 | -9.76 |
Erigaisi | 1606 | 31.29 | 41.4 | -10.11 |
Firouzja | 1045 | 32.79 | 44.65 | -11.86 |
Aravindh | 1742 | 28.81 | 41.16 | -12.35 |
Gukesh | 1664 | 29.01 | 41.39 | -12.38 |
Niemann | 1455 | 28.16 | 41.08 | -12.92 |
Sindarov | 1023 | 30.66 | 44.86 | -14.2 |
Who’s objectively the “most drawish”
Looking at raw draw rate alone, Niemann tops the list for decisiveness, with just 28.16% of his games ending in a draw. But we focused on the Adjusted Draw Rate. The higher the Adjusted Draw Rate, the more a player draws compared to what we’d expect from someone with their number of games.
- MVL (+17.64%) surprisingly tops the list, meaning his games end in draws far more than expected.
- Levon Aronian, Anish Giri, and Anand follow closely, all over +13%.
- This means they are consistently more draw-prone than peers with similar career experience.
- Wesley So’s 5th place is also a bit of a surprise. Given his famously solid style, we might have expected him to rank even higher in “boring chess.” In reality, what stands out is his incredible resilience, as he has the lowest career losing rate of all, just 8.14%, with Carlsen close behind at 8.41%.
Who’s the most decisive
Negative values mean fewer draws than expected, so more decisive games:
- Sindarov (−14.20%), Niemann (−12.92%), Gukesh (−12.38%), and Aravindh (−12.35%) are the most “fighting” players by this measure.
- They produce decisive results much more often than expected, given their career game count.
Why this is fairer than raw draw rates
- Without adjustment, older players with fewer games might seem more drawish simply because they’ve mostly faced top opposition.
- The regression removes that bias for example, Carlsen’s raw draw rate is high (54.66%), but after adjusting for his career length, he’s only +9.20%, not the top draw master.
Generational split
- Most players with high adjusted draw rates are older or mid-career (born before ~1995).
- Most with strongly negative adjusted rates are younger (born 2000 or later), reflecting the modern trend toward more aggressive, decisive play, or maybe because they have faced relatively more lower-rated opponents than the old dogs.
So, we split this data into 2 groups:
Older generation (pre-2000, excluding Aravindh cause he’s born in 1999 but he’s kind of new to the party):
Most boring: Maxime Vachier-Lagrave: Adjusted Draw Rate: +17.64%
Most exciting: Jan-Krzysztof Duda: Adjusted Draw Rate: –5.70%
Young generation (2000 & later, plus Aravindh):
Most boring: Nodirbek Abdusattorov: Adjusted Draw Rate: -5.98%
Most exciting: Javokhir Sindarov: Adjusted Draw Rate: -14.20%
Why Fans Should Care
Being “boring” doesn’t mean bad.
MVL sees himself more as a tactician than a pure positional player. But his numbers tell another interesting story. Despite his aggressive instincts, he still has the highest adjusted draw rate of all. One reason could be his pride in being a strong defender. It’s a skill he rates as his best. The stats back him up. His losing rate is just 8.72%, the third lowest among the super-GMs, behind only Wesley So and Magnus Carlsen.
Conclusion
This article isn’t perfect. One big reason is that older players often face stronger opponents on average compared to the younger generation, which can naturally affect their draw rates. A fairer comparison would be to count only the games played between the super grandmasters themselves. That would require digging much deeper into the data and a lot more work. We’ll see if we have the time (and patience) to tackle that in the future.

I’m Xuan Binh, the founder of Attacking Chess, and the Deputy Head of Communications at the Vietnam Chess Federation (VCF). My chess.com and lichess rating is above 2300, in both blitz and bullet. Follow me on Twitter (X).