League Statistical Analysis

 TLDR: I have been working on a deep statistical analysis tool for League of Legends in order to build an automated player coaching system which will provide helpful information and insights into improving how they play League.

 

What is league of Legends?

League of legends (LoL) is an online MOBA currently seeing over 100,000,000 active players per month and is highly competitive. In LoL, players are ranked in an ELO system and every game a player, plays, effects their ranked standing. So the drive for any given player to improve is high and subsequently, methods beyond the slow and arduous self-reflection are extremely limited (i.e. hiring a retired pro for coaching, which can be enormously expensive)… Players frequently get stuck at a specific ELO and stall out (for more about the problems behind this read my thoughts here), often leading to toxic behavior, inactivity, or even boredom.

 

Enter the need for tools like the one I am working on here. Which can help automate a substantial amount of the coaching process by providing an alternative, wallet-friendly source of helpful insights beyond the frustrating process of self-reflection. By offering insightful suggestions and guidance to help players overcome the tar that’s bound them to a specific ELO, to move on to higher levels of play.

How:

Through lots of crafty statistical analysis tools and ultimately machine learning, prospective analysis: linear discriminant analysis, principle component analysis, matchup analysis, etc.; retrospective player behavior analysis: pursuit-evasion, behavior theory, control theory; blah blah (you get the picture), and some new stuff that probably doesn’t have a name yet.

An important part of the process is attempting to derive player intent through the analysis of player decisions with respect to extracted context, and with this, generate vast amounts of insightful information.

Consider ‘context’ to be the literal and temporal circumstance of a given situation relative to factors such as: lane and team compositions, player performance, player experience and expertise, match events (kills, deaths, ganks, etc.).

 

Project History

The project started as a personal program a while back, in 2014. As I was learning League and having a hard time keeping track of counter-picking, I was using a site called LolCounter (champion matchup, suggested champion counter picks, and counter plays) to help me out. However, I saw that LoLCounter’s data got more and more stale and out-of-date with each successive patch (as all of its data is player voted). So out of curiosity, for the challenge, and seeing the League API released, I knew I could create an automated LolCounter.

I had a working model within a few weeks. However, at the time I was still in school so the project got set on a backburner and a front-end GUI, let alone the project, never came to full fruition. As school went on, I had more and more opportunities to build upon my League App for some school projects. Soon after I expanded my program to account for Itemization and builds.

However, over time, I’ve quickly seen that simply statistics of what champ wins the most games when laning against another champ, is not even close to being insightful enough to even be helpful. So I tasked myself with my first attempts to define and extract ‘context’ in my application.

 

What is done:

I’ve got the backbone of LSA done. When I say backbone I mean, I have the architecture done and ready to scale (and scalability is not an easy thing to implement), the pipeline designed and mostly implemented, API integration done, the dev environment setup, tools for analysis integrated (e.g. Neo4J, MySQL, InfluxDB, RabbitMQ, etc.), most dependencies are injected, lots of custom debug tools too.

Many of the analysis tools I’ve created have been abstracted (e.g. the algorithm that analysis itemization efficiency, can also be applied to runes, masteries) with very little hard-coded.

Website shell is done along with a large amount of its backbone.

Most of the boilerplate is completed for analytics tools, context detection, lane performance analysis.

What needs to be done:

  • Analytics layer.
  • Some ETL for data sources (match timelines, some item description parsing,
  • Website integration.
    • Graphs and all that
  • Visualization and interface for the data

Below are some of the debug tools I’ve written for this project which help to visualize certain aspects of the project’s development.