This analysis reuses the Project 1 chess tournament cross-table (tournamentinfo.txt) to calculate each player’s expected score for the tournament, based on the Elo rating system, and compares it to their actual score. The goal is to find the five players who most overperformed relative to what their pre-tournament rating predicted, and the five who most underperformed.
The Elo formula used to predict the outcome of a single game between two players is:
\[E_A = \frac{1}{1 + 10^{(R_B - R_A)/400}}\]
where \(E_A\) is player A’s expected score against player B (a number between 0 and 1), \(R_A\) is player A’s rating, and \(R_B\) is player B’s rating. A player’s expected score for the whole tournament is just the sum of this value across every real game they played.
This is the same parsing logic from Project 1: pull out each player’s pair number, name, state, total points, pre tournament rating, and the pair numbers of everyone they actually played (wins, losses, and draws only, byes, forfeits, and unplayed rounds are marked H, U, or X and don’t have a real opponent, so they’re excluded).
Warning in
readLines("https://raw.githubusercontent.com/nowhyporque/data607DataAcquisitionAndManagement/refs/heads/main/Project1/tournamentinfo.txt"):
incomplete final line found on
'https://raw.githubusercontent.com/nowhyporque/data607DataAcquisitionAndManagement/refs/heads/main/Project1/tournamentinfo.txt'
For every player, I look up the pre tournament rating of each real opponent they faced, run the Elo formula for each of those games, and add the results together. That sum is the player’s expected score for the tournament. Then I compare it to their actual score (the total_pts column already in the data) to get the difference.
These are the players whose actual score beat their expected score by the widest margin, they did much better than their pre, tournament rating predicted.
These are the players whose actual score fell short of their expected score by the widest margin — they did much worse than their pre-tournament rating predicted.
The Elo formula turns the gap between two players’ ratings into a probability of winning, and summing that probability across every game a player actually played gives their expected score for the tournament. Comparing that to their real score highlights who beat the odds and who didn’t.
The biggest overperformer was Aditya Bajaj, a 1384 rated player who was only expected to score about 1.95 points across the tournament but actually scored a full 6.0, four points better than predicted. On the other end, Loren Schwiebert, rated 1745, was expected to score around 6.28 points but only managed 3.5, nearly a three point shortfall. Since expected score is built entirely from pre tournament ratings, a large gap like this usually means the player’s rating didn’t reflect their actual playing strength at the time of this tournament, whether because they’d improved (or declined) since their rating was last updated, or the specific matchups they drew happened to favor (or not favor) them.