Inspiration
I used to play fortnite competitively, being the holder of some fast editing world records. I was always interested in ways I could understand and overcome my strengths and weaknesses to become a more efficient player. I am currently a student at NYU, and am friends with many international students who play a lot of League of Legends. I play with them sometimes, but I'm very bad, and can barely keep up. I therefore was hoping to use this project to better understand the strategies implemented by the best players.
What it does
Data is collected on almost all aspects of the game. Players are then given 5 elos. Their basic elo - based upon who they kill and who they're killed by, their "sportsmanship" elo - how good they are at being a team player, their objective elo - how well they work with their teammates, their aggression elo - how good they are at combat with other players and NPCs, and finally their consistency elo - how consistent the player is in their overall stats. These rankings take into account minute-by-minute stats from the players' games.
How we built it
Python was used to analyze the data, which was taken from s3. The API was built in express.js with typescript, and follows the specifications shown in the documentation. There is also an interactive frontend built in next.js. I wrote all the data analysis code myself. Each player is given 5 ELOs which make up their total skill level. The first ELO is the Kill ELO, which goes up when the player kills other players and goes down when the player is killed by other players. The calculation of the Kill ELO takes into account whether the player was killed by multiple players working together and whether the player assists in kills. Next is the Sportsmanship ELO, which measures how well the player works together with the other players on their team. This is calculated using the real time data reported by the game server during the match. This Sportsmanship ELO would go up when the player does things like heal other players. Next is the Objective ELO, which measures how well the player completes the objectives of the match. For example, this would go up when the player damages enemy towers. Next is the Aggression ELO, measuring how aggressive the player is, it goes up when the player damages enemy champions and kills enemy monsters. Finally is the Consistency ELO, which measures how constant the player's skill level is throughout the match. It does this by taking into account the variances and derivatives of the other ELOs. Each team has its own Team ELO, which goes up when the team wins and down when the team loses. Each team's combined skill level is calculated as a weighted average of the ELOs of the players on the team and of the Team ELO. Multiple other factors are also calculated, namely the variance of the ELOs and the average "distance" between player ELOs. This distance measures how similar the play styles of each player on the team are to each other. This is calculated by representing each player's ELO as a point in 5-dimensional space and then calculating the average distance between the points of all players. In the end, the teams are all ranked by the weighted average ELO mentioned earlier.
Challenges we ran into
I started this project 2 days before the deadline, so I had to think about how I would process the data as fast as possible. I designed a system where the data can be updated while the API is online, allowing for hot reloads. To design my indicators, I drew on my experience designing crypto trading and arbitrage algorithms and on my experience in my statistics and theoretical math classes at NYU
Accomplishments that we're proud of
All data processing was completed. Frontend was completed, allowing users to search for players and teams and get granular data on each.
What we learned
I gained more experience with processing big data. This will help me continue to improve my trading algorithms
What's next for LOL Esports Ranking
I want to hook up the API to the live data feed, allowing for real time updates
Built With
- next.js
- node.js
- python
- typescript
Log in or sign up for Devpost to join the conversation.