Analysis on Hero Compositions in Professional Overwatch

Chinhnam Nguyen, Jared Fleming, Ben Fleming

Introduction

Overwatch is a multiplayer team-based first-person shooter developed and published by Blizzard Entertainment and published in 2016. It skyrocketed in popularity quickly after release and is still going strong with over 5 million average players each month in 2021, and peaking as high as 7.3 million. Described as a "hero shooter", Overwatch assigns players into two teams of six, with each player selecting from a large roster of characters, known as "heroes", with unique abilities. Teams work to complete map-specific objectives within a limited period of time such as pushing a payload across the map or holding an area longer than the other team. The game features several different game modes, principally designed around squad-based combat with two opposing teams of six players each. Players select one of 32 hero characters from one of three class types: Damage heroes that deal most of the damage to attack or defend control points, Tank heroes that can absorb a large amount of damage, and Support heroes that provide healing or other buffs for their teammates. Each hero has a unique skill kit, defining their intrinsic attributes like health points and running speed, their primary attacks, several active and passive skills, and an ultimate ability that can only be used after it has been charged through dealing damage to enemies and healing allies. Players can change their hero during the course of a match, as a goal of Overwatch's design was to encourage dynamic team compositions that adapt to the situation.

The meteoric rise in popularity also inspired both Blizzard and esports organizations to arrange their own teams and tournaments, resulting in the Overwatch League, which is produced and regulated by Blizzard themselves. Though based in the U.S., the league also features teams from Asia and Europe, resulting in 20 city-based teams, each with a max roster of 12 players. Due to its wide interchangeability between maps, gamemodes, and hero compositions (the heroes picked by each team), Overwatch is one of the most analyzed competitive games in the world. To help with this, Blizzard compiles and publicly releases the data collected throughout professional play during the year. All of the datasets can be accessed here.

Here, we will be focusing on the data collected during the 2020 Overwatch League season, and will primarily intend to figure out the most optimal hero compositions for each map and gamemode. Heroes are meant to compliment and check each other as they are split into three classes: damage, support, and tank. Obviously, we would expect a team of six attack heroes to succeed in aggressing the enemy, but would also expect them to fail miserably when defending an area. This is why finding a correct and balanced composition is integral to the game, and professional play in general.

Hero's Gallery
Gallery of Overwatch Heroes

Exploring the Dataset

Libraries

We will be utilizing Python 3 along with various data science libraries: pandas, numpy, matplotlib, seaborn, sklearn, and more

The two datasets that we looked at were the players data set and the maps data set for Overwatch League 2020 regular season. The reason we chose 2020 data set is because it has a role queue system. This means there are two support heroes, two tank heroes, and two damaging heroes. In previous seasons, any of the six players could switch between any role which would cause more difficulty in analyzing and tidying our data. In the 2020 season, role queue prevents any switching to other roles which is easier to analyze. Now we will begin processing and tidying our datasets.

Processing the Player Data

Due to its immense size (over 1.2 million rows), Blizzard released the data for 2020 in two files, one for the first half and the other for the second half. To prepare the data for processing, we will first combine the two datasets. The dataset comes in the form of two CSV files.

We can see that the raw dataset present us with a myriad of problems. Firstly, it includes data collected outside of the OWL 2020 Regular Season, which we will not be considering. Another issue is that stat_name is presented as it's own column instead of their own individual and respective columns. This will make it difficult for us to understand and view the dataset as well as accessing player statistics. We will be dropping the start_time column as it is irrelevant to what we are depicting, along with all rows that record the cumulative statistics for a player on all heroes (hero_name == All Heroes), since we are looking to compare individual hero statistics. To make things simpler, we will conglomerate a player's stats with a hero across games in a match, meaning if a player plays as a hero more than once for the same match_id, we will average their statistics across the games into one row. The dataset also includes a multitude of irrelevant statistics that we will need to remove, such as Environmental Kills i.e. number of times the player knocks an enemy off of the map. To recap, there are five things we need to do to sanitize the data:

  1. Drop all non OWL 2020 Regular Season rows
  2. Pivot the table to turn stat_name into columns with stat_amount as values
  3. Drop start_time
  4. Drop all hero_name == All Heroes rows
  5. Drop all irrelevant statistics

Tidying the Player Dataset

First, lets drop all irrelevant columns and rows and rearrange the columns into a more readable format.

The dataframe already looks much better but we're not done yet. Now we can pivot the table to turn stat_name into columns and stat_amount into rows.

Here, we can see that the finalized dataset we will be analyzing has five objective columns and twelve stat columns.

Objective Columns:

Stat Columns:

Now, we can easily transform the dataframe and access stat values as necessary!

Hero's Gallery
Overwatch League's Finest

Tidying the Map Dataset

Blizzard also released data that had every Overwatch League played matches from 2018 to 2021. We are only going to look at the professional Overwatch League 2020 regular season matches. The file includes the team names, winner/loser, gamemode and map, and many other statistics (many of which we will not be considering). The data comes in the form of a CSV file with over 100,000 rows.

The maps data includes a total of 25 columns, but we will only be considering these:

We will remove the unncessary columns and only keep the match_id, the two team names, map name, map winner, game number, and the match winner. The only issue is each Overwatch game has multiple rounds of each game, so the data has rows for each teams attack and defense or overtime. These excessive rows are not needed because all of the rows display the same team names, map winner, and match winner so we can drop duplicate rows.

We can see that there are not many visibile errors except team_one and team_two sometimes switch which name comes first in team_one and team_two. So here we fix that by putting them in alphabetical order.

Now that we have our map data tidy we can perform analysis on the two data sets we have created.

Hero's Gallery
In Game Map: Eichenwalde

Exploratory Data Analysis

Pick Rate per Hero

One way of measuring how "good" a hero is in Overwatch is looking at the pick rate of each hero on different maps in Overwatch League. We wanted to see how much these numbers vary for different heroes, and we could then measure if a professional teams' decision to pick certain heroes is a good decision.

Now we will plot the pick rate for each hero on each map on a heat map

As we look at this heat map we see some very obvious trends. The darkest square or highest pick rate is clearly Symmetra on Lijiang Tower which makes sense. In the 2020 regular season of Overwatch, the most frequent strategy for teams was to use Symmetra's teleport to get to the control site much faster. Another common hero picked was Lucio on maps like Lijiang Tower, Nepal, and Ilios because Lucio has an ability to push back enemies. This is very useful on maps with holes or openings to be pushed to their death such as Lijiang Tower, Nepal, and Ilios. We can see other strategies/patterns in this heat map as we look at the least played heroes on maps in Overwatch League. These heroes include Bastion, Junkrat, Pharah, and Torbjorn who have seen very little pick rates as they are the most situational characters in the game. In high ranked gameplay, characters that can be easily countered such as these four are rarely seen on the competitive stage.

Another useful insight is to look at the dominant heroes in their subclasses. As we can see in terms of healers, Baptiste and Lucio have the highest pick rates across maps. Lucio, since the creation of Overwatch, has been viewed as the most consistently viable hero on a large number of maps. In terms of damagers (dps), Tracer and Ashe have the highest pick rates across maps, and for tanks, Wrecking Ball, Orisa, and D.Va have the highest pick rates. Additionally, an interesting analysis can be made on Symmetra's pick rates. While she appears to have an incredibly high pick rate, she really only has a very high pick rate on 4-5 maps and an extremely low pick rate on at least 8 maps. This shows how good Symmetra is but also how situational she can be on maps such as Busan, Oasis, and Nepal.

Linear Regression for Wins

We noticed that there are a lot of statistics to consider for each hero played as well as the "class" these heroes fall into. The three classes as mentioned before are Supports (Healer), Damager (DPS), and Tank. We wanted to see which stats are statistically significant to a hero's team winning the map. We looked at the 11 basic stats for each hero's class:

First we have to add a wins column that will act as the dependent variable in our regression. I had to merge the map data with our player data to add a winner column.

The variables that I am testing, as mentioned above, were fit using smf.ols. I split the data into training and test sets for x and y and used the model selection library for the splitting. All three classes had similar variables being looked into. The exception was healers and DPS not having damage blocked because they do not have a barrier, and the other exception was support's (healer) not having barrier damage. Healer's do incredibly little damage to barrier so it is not a fair stat to look at for their class. Now we will look at the which variables impacted whether a team wins their map.

Regression Analysis

Damagers (DPS)

The first thing we look at after a linear regression is whether the independent variables are significant to the dependent variable, and in our case for DPS role all of the variables we are looking at have a p-value of less then 0.05 which means our variables are significant to the model. This ia a good first step but the next analysis is to see how they affect a team's ability to win. We notice that Deaths, Hero Damage Done, Ultimates Earned, Objective Time, and Barrier Damage Done all have a negative correlation to a team winning. While most these correlations have a low mangitude, Deaths makes the most sense as the more you die the less contributions you have to the team. The next few are tricky to understand but there is logic behind all of them. For Objective Time, you wouldn't want you're main source of damage to be sitting on the objective instead of going out to get kills so a negative correlation makes intuitive sense. For Barrier Damage Done, Overwatch League is incredibly fast paced so wasting a large portion of time breaking the enemies shield is not ideal. Usually between off angles and other teammate's contriubtion, a DPS hero will not solely focus on breaking the barrier so this makes sense to have a slight negative correlation. Now Hero Damage Done is more difficult to interpret as DPS's role is to put our damage; however, this isn't technically correct. The job of a DPS hero is to get eliminations and pick off the lower health enemies such as their support and DPS hero's. The reason there is a slight negative correlation is it is not beneficial for these heroes to focus on outputing the most amount of damage which would be continously fighting the enemy tanks. Tanks have the largest health and usually a form of a regenerative shield. You're team will lose if you focus too much of you're time and resources on fighting high health enemies such as Wrecking Ball or Winston. The enemy team will pick you apart if you do not have perfect decision making. We know more elimination participation is what our model predicts is best to win a game. We can see this with the positive correlation to Assists, Eliminations, Objective Kills, and "Final Blows. These are all Elimination stats.

Hero's Gallery
In Game Hero: Lucio

Supports (Healers)

When we look at the Support (Healer) role, we see different correlation trends to the DPS role as shown above. We have more obvious trends here because as a healer, they prioritize aiding other players. The negative correlated variables to winning include Assists, Deaths, Hero Damage Done, Objective Kills, Healing Done. Deaths makes the most sense on why it is negatively correlated as if you are dead, you cannot aid the team. Objective Kills also makes sense why it would be negatively correlated because you're goal as a healer is not to be focusing on objective fights. If any eliminations occur, they usually occur away from the objective on enemy DPS or healers who are not on the objective. Hero Damage Done and Healing Done both have very small negative correlations, and the Healing Done stat is confusing as to why it is negative. This does make intuitive sense because healers can do the most healing on tanks who have the most health and this will make their healing stat sky rocket. However, they are not helping the team if they are just focusing solely on healing the tanks. Smaller aid to DPS and you're other healer is important and could cause this correlation to be negative. When we look at the positive correlation we again see a focus on Eliminations based stats with Eliminations, Ultimates Earned, Objective Time, Final Blows. This logically makes sense due to area healing healers who's job is usually to stay on the objective and run away if the enemy focuses them. The Eliminations and Ultimates Earned is a very important statistic because if healers can focus on supporting their teammates as well as getting kills then they will give the best efficiency for their team. Ultimates Earned is the most important because support ultimates are team winning fights usually so if you can build them up faster then you are contributing more to the team.

Tanks

Tanks' variable correlation to predicting a win makes the most sense out of the three roles. There only Eliminations, Objective Kills, and Damage Blocked that have a positive correlations. This lines up with the role of tanks whose job is to fight on the objectives and defend their teammates. They should be blocking damage, killing enemies that are close to them, and fighthing near the objective. All of the other parameters have a negative correlation and this includes Assists, Deaths, Hero Damage Done, Ultimates Earned, Objective Time, Final Blows, and Barrier Damage Done. Assists, Deaths, and Hero Damage Done makes sense because these are not constructive to protecting you're teammates. Ultimates Earned is also an area that most tank players tend to over use. While they are considered "big" abilities, they are also prone to be overused and used incorrectly. Our model is showing that staying with the team and focusing on normal abilities is better than farming/building your ultimate. Barrier Damage Done is also a stat that tanks cannot affect that much because very view have shield break abilities. For all of these parameters, we must have remember that these correlations are very small in magnitude, so there interpretation must be taken with a grain of salt. For example, the hero damage stat in DPS heroes most likely should be positive; however, the magnitude is incredibly small. Also, the healer healing amount should be positive but again the magnitude is very small so with more data it could/most likely become positive.

F Test Analysis

As we can see from our f test all of our F Values are greater than our F Statistics and our P Values are all less than 0.05, our significance level. This means we have created a significant model with relating a predicted win to our paramaters for each subclass of the heroes.

Determining Best Heroes per Class

In order to determine the best heroes for each class, one could spend a lot of time manually testing and collecting DPS (damage per second), healing ability, movement capability, and a horde of other statistics, and then compare them to one another, then do another round of in-game testing to take into account player and map variability, etc. However, as poor college students trying to make it through finals, we do not have this time. We can, however, have other people test out the heroes, find their weaknesses and strengths, and determine their overall playability. Professional players are the best of the best. They practice everyday and are constantly limit-testing heroes to their fullest capability. As a result, we can look to them to tell us who the best heroes are.

Which heroes do the best players play?

In order to determine which heroes are most frequently used by professional players, we will first split the available hero gallery into their respective classes. We will then determine the Efficiency of each player compared to other players playing in the same class by applying an equation that takes into account all of the statistics available in the dataframe. Because different classes are meant to emphasize different statistics, we will be applying different efficiency equations for each class. We will then graph the efficiencies of each player for each class in order to compare them to their teammates as well as their oponents.

Efficiency Equations for each Class:

By taking into account the correlation of statistics to success found above through our linear regression, we are able to determine an equation for calculating the efficiency of each player for each class.

Damage heroes are responsible for seeking out, engaging, and defeating the enemy using their varied tools and abilities. It is up to the damage heroes to secure kills. Because of this, we will add more weight to Assists, Barrier Damage Done, Eliminations, All Damage Done, Final Blows, and Objective Kills.

Support heroes empower their allies by healing them, boosting their damage, and providing vital utility. They act as the backbone of the team's survival. For this reason we will add more weight to Assists, Healing Done, Objective Kills, Objective Time, and Ultimates Earned, and penalize stronger for Deaths.

Tanks specialize in protecting allies, disrupting enemies, and occupying the front line. They have high survivability and abilities that protect themselves and others with shields and crowd control. As a result, we will add more weight to Assists, Damaged Blocked, Eliminations, All Damage Done, Objective Kills, Objective Time, and penalize much harder for Deaths.

Now that we have determined our equations for each class, we can now calculate the effiencies of each player and then graph the results. This will show us which players are the best at each class, and from there we can find the most frequently used heroes chosen by the most efficient players.

These graphs allow us to easily see the most efficient players for each team on each class. Notably, we can see that one support player in particular stands out as the most efficienct support and damage hero for his team: Haksal. In fact, we could've seen this coming as Haksal, now retired, was regarded as one of the greatest Genji and Brigitte players of all time. His impact as a damage and support character gave New York Excelsior a huge upper hand against their opponents as the year before he had won the OWL's first Rookie of the Year award, and was named both an OWL Role Star and All-Star.

Hero Picks by the Top 3 Players of each Class

For each class, we found that the most efficient three players are:
Damage

  1. Saucy (Atlanta Reign): 45351.24
  2. zYKK (Toronto Defiant): 45013.08
  3. Agilities (Toronto Defiant): 42955.2

Support

  1. Haksal (New York Excelsior): 50429.34
  2. Boombox (Philadelphia Fusion): 50166.52
  3. ir1s (Atlanta Reign): 49762.16

Tank

  1. LhCloudy (Los Angeles Gladiators): 47879.26
  2. GiG (Los Angeles Valiant): 46805.45
  3. Trill (Dallas Fuel): 45493.45

Now, we can find the distribution of hero picks by each player i.e. what percent of in-game time they spend playing each hero.

Here, we can see the most frequent hero picks by the most consistent and effective players for each class. For the damage class, the most consistently played hero is Mei, followed by Sombra and Symmetra. Though Mei has a steep learning curve, the payoff is immense as her versatility is unmatched as well as her strong ability to be a nuisance player. As a result, we would recommend either Sombra or Symmetra as they are easier to play for beginners, but for intermediate to advanced players we would recommend Mei. For the support class it is a bit harder to see who is the strongest hero. While Haksal chooses Brigitte or Lucio, Boombox or ir1s most frequently flock towards Baptiste or Moira. In this case, we would say the strongest choices are either Brigitte or Baptiste, followed by Moira. As for the tank class, this is much easier to see. All three players heavily main Reinhardt, as Reinhardt’s abilities are some of the best in Overwatch especially in regards to the Tank role. For this reason, we would recommend Reinhardt first and Wrecking Ball second as tank picks.

Win Percentage for Heroes

In this section, the win percentage of a hero on every map will be evaluated. Win percentage for a hero on a map is a very important statistic to evaluate when trying to build the optimal team composition for a map. Personal player stats are very important to look at, but one should also consider win percentage to determine the best overall composition of heroes.

Win percentage was evaluated versus wins to ensure that this was a fair metric to use for all heroes. Heroes are disproportionality chosen in the 2020 Overwatch League Season therefore it is important to ensure that the metric used can be standardized to low inputs or low pick rates. At first glance, the dataframe above shows a 0% win percentage for Bastion on the map Blizzard World. This means that a team that chose Bastion for Blizzard World never won a game in the 2020 Season of Overwatch League. However, Bastion is a hero that has a low pick rate this season and Bastion has not been a historically good pick on Blizzard World. Therefore, the low win percentage can be partially explained by low usage. Later, the win_pct DataFrame will be used in conjunction with efficiency to formulate a final team composition for every map.

Best Heroes From Each Class Based on Efficiency

Here efficiency will be calculated for every hero on every map. This will be done to eventually pair this metric with win percentage to create a final team composition for every map that esports teams should use in the future.

The efficiency equation that was used previously in player efficiency will also be used here to calculate the efficiency of every hero on every map. The same equation is used for the same reasons stated previously. The equation was created to gain an overall efficiency for a hero to better understand the various statistics and the overall efficiency of a hero. It also is worth pointing out that as can be seen in the efficiency_df DataFrame that Bastion on Blizzard World has an efficiency of 0. This is similar to what was discussed in the previous win percentage section. Bastion was rarely used or was never used on Blizzard World. This will explain the extremely low efficiency numbers for almost all heroes on a specific map.

Ilios
In Game Map: Ilios

Determining Optimal Hero Compositions

Best Team Composition for Every Map Based on Efficiency

A dataset that was tidier will be more favorable for analysis moving forard. Therefore, we created a similar DataFrame as win_pct to aid future analysis. We also want to look to see how the most efficient players on a map compare to the final composition of heroes for a map. So, in this section, we will evaluate the best two heroes per hero class per map.

This top_two_df Dataframe is very hard to read and analyze. Therefore, we will make a tidier DataFrame now with all of the two most efficient hero picks for every map.

The team composition for every map is now displayed in the DataFrame table above based on average efficiency. We decided to take the two top most efficient heroes for every class on every map because in this season of Overwatch League teams were restricted to choose two damage characters, two tank characters, and two support characters. There is also a distinction between whether a character was the #1 or #2 most efficient. This denotes who the main damage character, main tank character, and main support character is. There is similarly a term called off-tank, off-support, and off-damage. These describe who should be the primary player for the team's main role or the secondary option. In terms of support, the main support will be much more fixated on healing tanks and heroes in the main fight whereas off-support is focused on characters in side fights or performing a different role. This makes a lot of sense for characters like Moira and Baptiste who were predominately in the main support role. Moira and Baptiste are commonly chosen as the main support because they are the heroes with some of the highest healing output. The tank choice also makes sense why Orisa was typically the main tank chosen and sigma was the off-tank. Orisa's abilities (or game functions) are centered around playing in a main collective fight and not being very mobile. Whereas Sigma, has a lot of mobility and has functions that allow him to play better in side fights. The distinction between main damage and off-damage isn't very impactful in this season of Overwatch because main damage just has a slight increase in damage output on average. This is why heroes, like Mei and Echo, are typically not limited to one damage role and appear in both damage roles. Comparing these compositions to the hero pick rates of the most efficient esports players we see some similarities and also some differences. In terms of damage heroes, the pick rates by professional players lines up with the team compositions based on efficiency. Mei was picked the most by all three most efficient esports players and showed up the most in our efficiency DataFrame table. Genji was another hero that was picked very frequently by players like Agilities and Saucy and was one of the most common damage players in terms of efficiency per map. Our data does vary quite drastically in terms of tanks. Reinhardt was easily the most chosen tank by the three most efficient tank esports players. However, he only appeared 5 times in our DataFrame table. It is worth noting that Orisa was played a good amount by the player GiG and appeared in our DataFrame table the most. Support heroes matched up fairly well against the most efficient support esports players. Baptiste was heavily played by the players Boombox and irls and he occurred in our DataFrame the most of any other support player. Brigitte was played by Haksal a very large amount of time and appeared in our top three to four for support hero that appeared in the most team compositions. Overall, our statistics regarding efficiently matched up well the professional esports players opinions and hero pick rates.

Final Team Composition Creation for Every Map

This section will be the culmination of our final project as we look to see the best composition of Overwatch heroes for every match. First, we need a variable that can be used to compare every hero on every map. We decided to make a new variable called Master Key to be used in comparisons to find the best compostion of heroes.

Master Key Variable Creation

The equation for Master Key was formulated to give efficiency 2 times the weight of win percentage. This way efficiency made up two thirds of Master Key. We felt it was important to trust the efficiency statistic much more than the average win percentage when trying to determine the best hero composition. It is possible for a hero to not be as impactful but still get a win because they team they are playing is much worse. We feel it is less likely if a hero doesn't play well (low efficiency) that their team will still win. We specifically chose two times greater to give efficiency a wide majority over win percentage because we feel it is a much more accurate measuere. Also, after comparing the hero pick rates of professional players to our best team compositions in regards to efficiency, we felt that efficiency was a very strong statistic to use to find a final team composition. It is worth noting here that Genji on Rialto was the best fitting hero for a map. This makes sense because it is a very wide spread map with varios hiding spots and corners. Genji can play very well on a map like this because his abilities are very suited for the terrain and layout of the map. We see a few heroes on certain maps have a Master Key value of 0. This is because some heroes are not played on certain maps because they aren't as favorable on that map. Bastion for example is not played on Paris or Junkertown because they are wide open maps with not a lot of coverage and Bastion relies heavily on map coverage and more dense map layouts.

This is the finalized hero composition for every map. It seems to be that Orisa and Sigma are predominately favorable on most maps. A map where neither hero is favorable is Watchpoint: Gibraltar, which makes sense because this map is very open with a lot of coverage. Tanks like Winston and D.Va which rely on their mobility to attack teams floruish on this map. In terms of support, heroes like Baptiste and Brigitte are the most common healers across maps. Mei and Echo or Genji are the most common damage heroes across the maps with some heroes like Torbjörn and Pharah being favorable on a few maps. I would like to point out that for the map Rialto all the favorable heroes make a lot of sense when thinking about the layout of the map. Rialto has a lot of close corners and hiding sports where heroes like Mei and Genji will perform very well. This is also a map where the objective (a truck or payload is moved a certain distance) is great for tanks like Orisa and Sigma. Both of these heroes have functions where their shields can be moved to protect teammates which is very strong on maps where the objective is constantly moving. Baptiste and Zenyatta on this map are also very favorable because they each have an ability that renders one of Genji's abilities useless and is a great counter attack against Genji. Pharah is also favorable on Ilios which can be explained by the fact that Pharah has an ability to knock players backward and Ilios is a map with a lot of close edges and places where an enemy can be knocked off an edge and die. We had planned to run this code with an inner for loop that iterated over the various classes to remove redundant code. However, when we added this for loop and if statements in the lines of code was actually longer than if we did it brute force.

Rialto
In Game Map: Rialto

Conclusion and Further Analysis

The objective of this project was to find an optimal team composition for every map based on the relevant statistics and overall average win percentage. We have completed this and it is now time to compare these team compositions to the pick rates of the three most efficient esports players at every hero class. We are making this comparison to see if the team compositions in the 2020 Overwatch League Season was backed up by the statistics. Looking at tanks, we see that the most common tank picked by far was Reinhardt. Our data did not suggest that Reinhardt was a major contributor on most maps and he only appeared in the top two tank efficiencies 6 times. This can somewhat be explained by the fact that the maps that he was chosen to be in the optimal team composition for are some of the most popular and common maps played in the 2020 Overwatch League Season. Maps like Lijiang Tower, Eichenwalde, amd Nepal are usually played in every game series. However, our data did not suggest that Wrecking Ball was an optimal hero to be included in hero compositions and he was the second most picked hero for the three most efficient players this season. This can somewhat be explained by the nature of the Wrecking Ball hero. Wrecking Ball's main objective is to disrupt and play in a very niche role. Therefore, his impact may not be directly correlated to his pure statistics. He also is a character that relies on Environmental Kills and other less important statistics that we felt weren't important to look at when evaluating all 32 heroes. The support hero pick rates largely coincide with our final optimal team compositions where heroes like Baptiste and Zenyatta were picked very often and they were two of the most common among all the map's team compositions. The one suprising point would be that Lucio was not in any of our optimal team compositions yet is one of the top three most picked healers for some professional players. However, like Wrecking Ball this can be explained by his unique abilities that makes his impact not directly relate to his statistics. One of his main roles is to give a speed boost to teammates (offensive assists) as well as get environment kills by using his abilities. Neither offensive assists nor environmental kills were included in our analysis because they are not very impactful for all 32 heroes, only a few of them. It is also worth mentioning that we did not take hero pairings into account when performing our data analysis. Heroes like Phara and Mercy are almost always played together. You will rarely find a time whrere Pharah is played and Mercy isn't. This is important to note but we still believe that our Master Key variable is a good metric to find the best team composition.

The data that we looked at was only a small portion of the data available on the Overwatch League website. We only looked at 2020 Regular Season data and we only evaluated a few of the statistics that we felt was important. We also only looked at Overwatch League statistics on PC and not on any other console. In the future, it may be interesting to compare some of the more niche statistics to see if we can get a better sense of the data and it's heroes. In newer seasons of Overwatch League, there were hero bans as well as different hero changes which could contribute to use finding a completely different hero composition if we ran our analysis on a different Overwatch League Season. This analysis can also be used in the future to advise professional Overwatch teams that struggled during the previous season. If the current methodology isn't working for an esports team, we recommend utilizing our team compositions and data to try and improve their team.