Classifying and Analyzing Playstyle in League of Legends

Back to Research & Publication

Classifying and Analyzing Playstyle in League of Legends



Introduction

League of Legends is a popular competitive online video game where players team up and battle against a team of other players. Each player satisfies a unique role for their team and there are a variety of apps, videos, and websites dedicated to help one improve at his/her specific role. However, aside from paying for a coach, there is a significant lack of resources that provide personalized advice on how to improve. In this research paper, I will be looking at three values, namely creep score (abbreviated as CS), gold gain and damage taken, over the course of a match and use these values to classify and analyze an individual’s playstyle. In turn, this will give a means for personalized improvement through reflective insight.

Background

In League of Legends, victory is achieved by destroying the enemy nexus. The means to achieve this objective revolves around amassing gold and experience to power up one's champion. Gold, and subsequently experience, is gained primarily through three means: killing enemy minions (recorded as one’s CS), killing enemy champions, and killing neutral monsters. There are also gold gains associated with taking down towers that guard the enemy nexus, although for my calculations described later, gold gained from this source should average out. Since opponents are also attempting to gain gold and experience, another key value to observe is an individual’s damage taken, which is as its name would suggest.

Methodology

My analysis is based on the most recent 100 solo ranked matches played by an individual. In order to obtain this data, I made a series of calls to the official Riot Games API using a public Python wrapper called Riot Watcher. Due to the nature of the API returning large amounts of data that is not relevant to this paper along with hiding personally identifiable information behind various IDs, I had to make a series of calls that would match these IDs and filter data for desired variables. The following is skeleton code that explains how I did this:

  1. For a given player in game name, return the associated internal summoner ID
  2. For a given summoner ID, return the list of match IDs that correspond to solo ranked games along with the champion ID for each match
  3. For each match ID, return the match data (note: match data is huge and information such as CS<, gold gain and damage taken is stored behind participant ID and champion ID)
  4. For each match data set, find the given player by matching participant ID with champion ID from 2.
  5. For each match data set, return the relevant timeline data for the given player
  6. Combine and clean all of the relevant timeline data (I can attach the csv if needed)

Regarding 6, timeline data refers to the per minute deltas, taken in ten minute intervals, for each of the three variables. For instance, “creepsPerMinDeltas_0-10” refers to the average creep score per minute for the first ten minutes of the game. Similarly, “goldPerMinDeltas_20-30” refers to the average total gold earned per minute during the twentieth minute to thirtieth minute of a match. From now on, CS<, gold gain and damage taken will refer to their corresponding per minute deltas. In addition, for ease of reference, the term early game will refer to the zero to ten minute interval, mid game to the ten to twenty minute interval, and late game to the twenty to thirty minute interval.

Results

Using my most recent 100 ranked matches, my code outputs the following raw plots for each combination of CS<, gold gain and damage taken, organized by time interval:



Discussion

The first row of plots show gold gain plotted against CS. An initial look shows that across each time interval, gold gain seems to be increasing with CS, which makes sense since CS directly translates to increased gold gain. However, interesting results are found when considering the difference between total gold gain and gold gained from CS only. This difference, which is attributed to gold gained from kills and assists, encapsulates an aggressive playstyle since a higher difference indicates more gold gained from killing enemy champions. The following plots show this average difference (calculated by taking subtracting idle gold and gold earned from CS from gold gain) for each match, organized by time interval.



Immediately we can see that across each time interval, I usually have a hefty average difference. For the first ten minutes, an average difference between 90 to 120 translates to an additional 900 to 1200 gold gain on top of gold gained from CS. Since the average kill is worth 300 gold, this is equivalent to around 3 to 4 kills during the first ten minutes of a match. In the following ten minutes, the graphs show an average difference of around 200, approximately 7 kills worth of gold, for a total of around 10 kills worth in the first twenty minutes of a match. When comparing this to the average amount expected for my primary role, namely around 10 kills worth of gold by the end of a match (which usually lasts around thirty minutes), we can see that this is a significant indicator of an early to mid game aggressive playstyle. The final row of graphs show a similar histogram to the mid game interval, despite having lower CS values in the scatter plot. This is difficult to analyze on its own since, regardless of an individual's playstyle, the end game is typically where the majority of kills occur. Nevertheless, the average difference within the first twenty minutes of a match can show indicators of aggressive or passive playstyles.

The second row of raw plots show damage taken plotted against CS. Appending a least squares polynomial fit of degree one to each plot shows the following.



Here we can see that for me, as the match continues, CS becomes more dangerous to obtain as higher CS usually results in higher damage taken. This should be true for most players since the late stage of a match is characterized by skirmishes and team fights rather than farming (increasing CS). In addition, the final row of graphs plotting damage taken against gold gain has significant variance with no obvious clustering. These two results seem to suggest that damage taken should be considered in isolation. One class of values that the Riot Games API returned involves the “difference versus the calculated lane opponent for a specified period”. So for damage taken, we can plot the difference in damage taken between me and my lane opponent in a histogram (a positive difference indicates higher damage taken, while a negative difference indicates lower damage taken).



Now we can see that in the first ten minutes of a match, there is usually little difference with a somewhat equal distribution between higher and lower damage taken. This agrees with the previous indicator of an aggressive playstyle since a more passive player would be expected to have a negative average difference. The next two graphs show that I usually take more damage than my calculated lane opponent in the later stages of a match. This can be attributed to either participating in more kills or being punished for pushing ahead. Since the gold gain differences earlier suggest high kill counts, the former seems more likely.

Conclusion

The relationships between CS, gold gain and damage taken across many matches that an individual plays seem to be reflective of an individual’s playstyle. The difference between total gold gain and gold gained from CS can show how aggressive an individual is at each stage of the game. In addition, considering damage taken alongside gold gain or in isolation can give indicators at how much of an impact an individual makes in a match or how much they are punished for pushing ahead an advantage. Using this information, an individual is then able to better understand their playstyle and determine where to improve.

Semester

Fall 2018

Researcher

Stanley Hsu