Introduction

Counter Strike: Global Offensive is one of the largest esports in the world, with millions of fans across every continent. Similar to traditional sports, the widespread interest in the professional scene leads to an interest in the statistical performance of teams and players.

This project explores players’ performance as a function of more advanced statistics, including utility and aim stats. It further explores public perception of professional players via Twitter data, exploring whether there are correlations between a player’s ongoing performance and the public perception of that player.

Introduction to Dataset

All data for this project was accessed via leetify.com, so all credit should go to them for their awesome website and meticulous stat tracking.

The dataset is structured such that each row represents a single professional player. Colummns include a wide variety of statistical information, including the player’s full name, team, kills, deaths, damage, rounds played, and much, much more.

The dataset is broken into two separate tables, each representing a different period of time: 1 month and 1 year. All data was accessed on April 10, 2021, so time frames represent a period of time of the noted length and ending on that date.

A small sample of the data is presented below, to allow for perusal of the structure and naming of the data.

Additionally, the below data table provides information on all stats used in this analysis, in order to acquaint those unfamiliar with Counter Strike. Note that this table does not include all stats in the dataset, but rather those used in this analysis.

Variable Description
adr Average Damage per Round; total damange output by a player divided by number of rounds played
hltvRating Rating 1.0, as calculated by HLTV; a measure of player performance taking into account kills per round, round survival rating, and multikills
accuracyEnemySpotted Accuracy of bullets while shooting at a visible enemy
accuracy Overall accuracy of all bullets fired; number of hits divided by number of shots
accuracyHead Overall headshot accuracy of all bullets fired; number of headshot hits divided by number of shots
reactionTime Amount of time to do damage on an enemy, from first visibility to first damage
preaim Degrees by which a player’s crosshair is off of an enemy target prior to the start of a gunfight
sprayAccuracy Accuracy of bullets while gun is being sprayed
flashAssist Number of flash assists per game played
tradeKillsSuccessPercentage Percentage of kill trade opportunities converted by the player; kill trades involve killing an enemy shortly after that enemy kills one of your teammates

Analysis

The purpose of this particular analysis is to look at how certain statistics contribute to player performance in CS:GO. Obviously, more kills and fewer deaths are desirable. But what about a player’s aiming abilities? What about support statistics like throwing flashbangs? How do the players who are best in these less-known statistics compare to the superstar fraggers who typically get all of the attention?

Aim Stats

We will begin with aim stats. It is already fairly well-known that esports pros have reaction times significantly better than those of the average population. Let’s first take a look at the best professional players in terms of accuracy by looking at overall bullet accuracy as well as headshot accuracy.

name team.name accuracy hltvRating
syrsoN BIG 29.74 1.12
xsepower forZe 27.91 1.12
oSee Cloud9 25.55 1.11
ropz mousesports 25.39 1.13
Farlig GODSENT 25.29 1.08
name team.name accuracyHead hltvRating
Kristou North 30.03 0.96
acoR MAD Lions 28.95 1.09
syrsoN BIG 28.70 1.12
b0RUP Heroic 28.25 0.92
magixx Spirit 27.84 1.04

Unsurprisingly, 4 of the 5 top accuracy players are AWPers, who spend less time spraying smokes than their rifler counterparts.

More interesting is the headshot accuracy. This list still contains 2 AWPers (acoR and syrson) despite the fact that few AWPers aim for headshots. Further, these players are not particularly highly rated. 2 of the 5 fall below average, while magixx barely clears average at 1.04.

We will also examine the players with the best reaction times.

name team.name reactionTime hltvRating
Jame Virtus.pro 454 1.13
oSee Cloud9 455 1.11
FalleN MIBR 465 1.02
woxic mousesports 469 1.00
broky FaZe 470 1.05

Once again, this is no obvious group of superstars. Jame and oSee boast very strong ratings, but the other three are all right around average.

Interestingly, this group contains 5 AWPers as well. Perhaps there is some correlation between reaction time and likelihood of using a particular weapon, but this dataset will not allow the exploration of that idea.

These tables seem to imply that there is no strong correlation between being the best in certain raw skills and elevated in-game performance. To continue down this path, let’s look beyond just the top 5.

The following graph shows how reaction time impacts performance in terms of both HLTV rating and ADR.

Interestingly, there’s not a whole lot of correlation in either of these graphs. Players who react more quickly to opponents don’t necessarily perform better. There is a very, very slight upward trend in both graphs as reaction time shortens, but the relationship is neither clear nor strong.

A similar picture emerges when looking at accuracy, as shown below. Upward trends do exist, but with lots of variance and lots of outliers.

In what other way could this question of aiming skill be approached? Rather than looking at individual metrics, let’s compare players relatively across multiple statistics to see if some sort of composite aim score is a better predictor. This is done by ranking each player within the group for each statistic (higher numbers being better for accuracy, lower for preaim and reaction time), then taking a simple average of those ranks.

A much clearer image emerges in this case, with an obvious relationship between a player’s rating and his ranking among his peers in composite aim. This implies that no one aim statistic is alone to differentiate a player from his peers, but when taken together, the players who have the best overall aim tend to perform significantly better.

Support Stats

Most fans of Counter Strike believe in the “support” player who is instrumental to his/her team’s success by doing all the little things, and not necessarily putting up lots of kills. Let’s see if this class of player really does exist in the professional scene, and, if so, who the best support players really are.

name team.name flashAssist hltvRating
oSee Cloud9 3.69 1.11
FalleN MIBR 3.16 1.02
cadiaN Heroic 3.01 1.08
kennyS G2 2.68 1.01
broky FaZe 2.64 1.05
name team.name tradeKillsSuccessPercentage hltvRating
chrisJ mousesports 0.7200 0.84
b0RUP Heroic 0.6250 0.92
k0nfig Complexity 0.5866 1.10
oSee Cloud9 0.5830 1.11
k1to BIG 0.5783 0.96

These tables show the top 5 players in terms of flash assists per game, as well as trade kill percentage. These are two stats typically used to separate support players from others.

Interestingly, the common thread among the first group is not support players, but AWPers. This makes sense. AWPers tend to be in the back line of the team, taking engagements at range, and thus are more likely to be in position to throw flashbangs for their teammates.

The latter table, on the other hand, better represents the idea of a support player. chrisJ, bORUP, and k1to are all considered a support player for their respective teams, and this shows in their ability to convert trade kills. They are not the star players, first into the bomb site or holding the power positions on defense, but rather are following up the star players, converting on the opportunities that are created.

Let’s see if this trend carries over across the entire dataset by looking at various support stats compared to HLTV rating.

Once again, there isn’t a clear relationship between these support stats and rating, positive or negative, the latter of which was expected.

Interesting note: on the second graph, ChrisJ is the extreme outlier, whose top- tier kill trading skills do not do enough to boost his terrible rating.

Predicting Performance based on Aim

So, as we have seen, individual aim statistics are not very good predictors of performance, but when taken together, show a strong relationship. In order to dive deeper into that relationship, we will use linear modeling to see which of these variables are the best predictors of player performance - specifically, a player’s HLTV rating.

The first model included all aim variables: Enemy Spotted Accuracy, Head Accuracy, General Accuracy, Preaim, Reaction Time, and Spray Accuracy.

Since several of these stats are very similar, the first step in the process was to check each for multicollinearity - basically, to see if any of the two aim statistics were highly correlated with each other. The highest correlation, as shown below, was between spotted enemy accuracy and general accuracy, but at 0.674, it is not so concerning as to warrant removing either.

accuracyEnemySpotted accuracyHead accuracy preaim reactionTime sprayAccuracy
accuracyEnemySpotted 1.0000000 0.0274269 0.6749024 -0.3976392 -0.2726918 0.2516705
accuracyHead 0.0274269 1.0000000 0.2219495 -0.1568316 0.0685961 -0.3118031
accuracy 0.6749024 0.2219495 1.0000000 -0.3333073 -0.3087544 -0.0343374
preaim -0.3976392 -0.1568316 -0.3333073 1.0000000 0.5223346 0.3513581
reactionTime -0.2726918 0.0685961 -0.3087544 0.5223346 1.0000000 0.3435250
sprayAccuracy 0.2516705 -0.3118031 -0.0343374 0.3513581 0.3435250 1.0000000

After running the model once, several of the variables were found to be significant, but, interestingly, general accuracy was not. That variable was removed and the model run again.

## 
## Predicting Rating based on Aim
## ================================================
##                          Dependent variable:    
##                      ---------------------------
##                              hltvRating         
## ------------------------------------------------
## accuracyEnemySpotted      0.006*** (0.002)      
## accuracyHead              0.008*** (0.002)      
## preaim                    -0.024*** (0.005)     
## reactionTime              -0.001** (0.0002)     
## sprayAccuracy             0.004*** (0.001)      
## Constant                  0.910*** (0.137)      
## ------------------------------------------------
## Observations                     165            
## R2                              0.436           
## Adjusted R2                     0.418           
## Residual Std. Error       0.066 (df = 159)      
## F Statistic            24.543*** (df = 5; 159)  
## ================================================
## Note:                *p<0.1; **p<0.05; ***p<0.01

In the resulting model, as shown above, all variables are significant at some level, though reaction time is only so at the 5% confidence level. Further, this combination of variables only explains about 42% of a player’s HLTV rating.

Next, a similar model was built, but using the player ranks for each aim statistic instead of the raw aim numbers. Once again, general accuracy was found to be insignificant, and was removed.

## 
## Predicting Rating based on Aim Ranks
## =====================================================
##                               Dependent variable:    
##                           ---------------------------
##                                   hltvRating         
## -----------------------------------------------------
## accuracyEnemySpotted_rank     -0.001*** (0.0001)     
## accuracyHead_rank             -0.001*** (0.0001)     
## preaim_rank                   -0.0005*** (0.0001)    
## reactionTime_rank             -0.0003** (0.0001)     
## sprayAccuracy_rank            -0.0003** (0.0001)     
## Constant                       1.177*** (0.022)      
## -----------------------------------------------------
## Observations                          165            
## R2                                   0.413           
## Adjusted R2                          0.394           
## Residual Std. Error            0.068 (df = 159)      
## F Statistic                 22.358*** (df = 5; 159)  
## =====================================================
## Note:                     *p<0.1; **p<0.05; ***p<0.01

}}

This model turns out very similarly to the first, doing a slightly worse job of predicting HLTV rating with an adjusted R-squared of .394.

So, although our aim ranks did a pretty good job of creating the correlation we were looking for on the chart, the raw aim numbers themselves can create a better linear model to predict a player’s rating, with aim stats alone being able to predict about 42% of a player’s rating.

Connecting Stats with Public Perception

Knowing a player’s performance can be awesome information, but how does this performance sway public opinion? Do people tend to think more highly of players who are playing better? Or is perception more random, based more on the person than on their performance?

To examine this question, the Twitter API was used to access over 1400 tweets pertaining to a handful of somewhat randomly selected pro players. These players were chosen due to 1) relatively large volume of Tweets mentioning them and 2) names that are not common words, to prevent unrelated data from slipping in.

For each player, Tweets from the last 7 days were saved, along with information about that player’s account. Sentiment analysis and account metrics will be used to compare these players and see if there is any relationship between performance and public sentiment.

*Note: actual Twitter scraping is not done in this document. Tweets were scraped on the same day as the statistics, and saved so that different Tweets are not pulled each time.

To begin our analysis, let’s simply look at a player’s rating over the past year compared to his Twitter following.

It certainly seems like good performance alone isn’t enough to gain you more followers, as most players are clustered around the same number regardless of performance. However, this is only one month of performance, so it would be hard for trends to establish themselves.

More importantly, let’s explore the sentiment of Tweets about players. All Tweets used were collected on the same day as the rest of the data, and span backwards seven days from that point.

The first thing we will explore is a basic measure of positivity, calculated as the number of positive words in tweets about a player less the number of negative words.

The immediate outlier here is JKS, as the only player with an average negative sentiment out of this group.

It should also be noted that Plopski does have both positive and negative tweets about him. It is purely coincidence that the average of those sentiments comes out to exactly 0.00.

Next, let’s look at how these sentiments compare with each player’s performance over the past month.

The following graph shows similar information in a different way, plotting the average positivity, anger, and joy in tweets toward each player. The x axis is arranged in order to HLTV rating, with ropz as the highest and AcilioN as the lowest.

While the data is very limited in this example, the first graph shows the possibility of a trend - namely, players who are currently posting higher ratings tend to see much higher positivity, while players performing poorly get hammered by fans on Twitter.

However, the second shows some flaws with that. First, rating and positivity are clearly not linearly related. kscerato receives the most positivity by far, despite being middle-of-the-pack in performance, while jks gets hammered despite not being the worst performer of the group.

This goes to show where fan expectations can play into the mix. jks was fully expected to be a superstar, but his lackluster performances have led many fans to turn on him - thus the deeply negative sentiment.

Clearly, this analysis is far from perfect. This project could be improved by streaming tweets about players over several weeks or months and then matching them up with performance over that time frame. This analysis was also limited by the players who could be used, as players needed 1) enough tweets about them to make analysis meaningful, and 2) a name distinct enough to set tweets apart from other, completely unrelated tweets. On this criterion, players like Simple and NiKo would be difficult to use.