Lolstats

De WikiGarcia

Lolstats es un proyecto personal el que intento aplicar conocimientos de procesamientos de datos e Inteligencia Artificial a las estadísticas extraídas de la API de Riot Games del popular juego League of Legends.

El propósito principal es crear un modelo que inicialmente pueda predecir si una partida resultará en victoria o derrota considerando el historial de partidas de cada jugador y su rendimiento histórico.

Conceptos básicos

A continuación se mencionan los conceptos básicos para tener en cuenta durante el desarrollo de éste proyecto.

League of Legends

League of Legends (LoL) Es un videojuego MOBA (Multiplayer Online Battle Arena) que se encuentra entre los más populares para PC. El juego cuenta con varios modos de juego siendo el principal un mapa 5 contra 5 donde el objetivo es destruir la base enemiga que se encuentra al otro lado de un mapa con tres carriles y una jungla.

Más información:

Grieta del invocador (5v5)

Modo de juego 5 contra 5, donde cada jugador selecciona a un campeón con habilidades únicas. Los 10 jugadores entran a un mapa con 3 carriles y una jungla con las bases en extremos opuestos. Cada jugador debe recolectar oro asesinando súbditos o campeones enemigos o destruyendo estructuras enemigas para poder comprar objetos que mejoren sus habilidades y subir de nivel.

Dentro del juego es común utilizar los siguiente términos:

  • Invocador: Es el nombre que se le da a un jugador. Cada jugador tiene su Nombre de invocador único.
  • Nivel de Invocador: Jugar partidas otorga experiencia la cual se acumula para subir de nivel.
  • Clasificación: El juego permite jugar en modo Clasificación donde el resultado de la partida otorga puntos para colocar al jugador en una tabla de clasificación general de toda la región.
  • Región: Por cuestiones de logística los jugadores de distintas regiones geográficas juegan en distintas regiones (servidores). Entre estas regiones se encuentran: Lationamérica Norte, Latinoamércia Sur, Norte América, Europa del Este, Corea, China, etc.
  • Rango: Dependiendo de qué tan bueno sea un jugador se le asigna un rango en la clasificación general, yendo de menor a mayor: Hierro, Bronce, Plata, Oro, Platino, Diamante, Maestro y Retador.
  • División: Dentro de cada Rango hay subdivisiones, yendo del IV al I. Ej: El siguiente nivel de Oro I es Platino IV.

Dentro de la partida es común utilizar los siguientes términos:

  • 5v5: Abreviación de 5 contra 5.
  • Campeón: Personaje del juego que tiene estadísticas y habilidades únicas.
  • Estadísticas: Características del personaje, principalmente se refiere a su jugabilidad. Ej: Puntos de ataque, puntos de defensa, velocidad de ataque, puntos de vida, etc.
  • Habilidades: Movimiento especial de un campeón que tiene efectos especiales. Ej: Hacer daño extra, curar vida, desplazamientos, control de masas, etc.
  • Mapa: Terreno de juego.
  • Carril: Camino amplio por donde se puede transitar y se mueven los súbditos y campeones.
  • Súbdito: Personaje no jugable (NPCs) que ayuda a los jugadores a combatir.
  • Jungla: Parte del mapa que no forma parte de los carriles, tiene caminos estrechos y monstruos neutrales.
  • Monstruo neutral: Personaje no jugable (NPCs) que no ayuda a ningún equipo pero otorga recompensas al matarlo.
  • Oro: Moneda de cambio dentro de la partida, se usa para comprar objetos.
  • Objeto: Elemento que se puede equipar a un campeón para mejorar sus estadísticas.
  • Build o Itemización: Se le llama así al conjunto de objetos que utiliza un campeón.
  • Estructura: Se refiere a las construcciones con las que los jugadores pueden interactuar, generalmente tienen una función y pueden ser destruidas.
  • Nivel: Dentro de la partida los campeones mejoran sus estadísticas cuando suben de nivel. Es incremental hasta llegar al nivel 18.
  • Experiencia: Matar enemigos o realizar ciertas acciones en la partida otorga experiencia la cual se usa para subir de nivel.

Riot API

Riot Games (compañía creadora de LoL) proporciona para los desarrolladores una Interfaz de Programación de Aplicaciones (API) para obtener los datos de los jugadores y las partidas que hay jugado, ésto con el fin de crear herramientas para ayudar a los jugadores a entender mejor el juego, mostrar estadísticas y comparaciones de objetos, campeones y jugadores, etc.

Una de las herramientas de este tipo más comunes es la página OP GG (https://lan.op.gg) que muestra información de los invocadores, recomendaciones de objetos y cuenta con herramientas de apoyo durante la partida.

De aquí se extraen todos los datos utilizados en este proyecto.

La documentación de la API se encuentra en: https://developer.riotgames.com/apis

Riot Games también proporciona un repositorio de recursos relacionados con el juego para utilizar en conjunto con la API. A este repositorio le llama Data Dragon y contiene información de los campeones, objetos, mapas, rangos, además de recursos como imágenes.

La documentación del repositorio se encuentra en: https://developer.riotgames.com/docs/lol

Inteligencia Artificial

La inteligencia artificial es una rama del Aprendizaje Máquina que se centra en encontrar modelos que sirvan para llevar a cabo una tarea (Ej: clasificación, predicción, optimización, etc) utilizando métodos que normalmente incluyen un entrenamiento previo del modelo.

El proceso (muy general) de un algoritmo de inteligencia artificial comúnmente es el siguiente:

  1. Determinar el alcance esperado del modelo.
  2. Obtener las muestras de entrenamiento y definir sus características útiles.
  3. Definir el modelo.
  4. Entrenar el modelo.
  5. Mejorar el modelo hasta alcanzar un óptimo. Puede requerir redefinir las características de las muestras y el modelo mismo.
  6. Probar el modelo con nuevas muestras.
  7. Liberar el modelo.

Proyecto

Alcance del proyecto

Crear un modelo que sea capaz de predecir, al inicio de una partida, cuál de los dos equipos va a ganar utilizando los datos históricos de los jugadores y las estadísticas generales del juego.

Idealmente el proceso de recopilación de datos se debe realizar durante un único parche para evitar que las modificaciones que éste contenga afecten los resultados.

Actualmente se trabaja con el parche de versión:

Definición y obtención de la información

Como se mencionó anteriormente, se usará la API de Riot en conjunto con el repositorio Data Dragon para extraer la mayor cantidad de datos significativos del juego.

Para entender mejor los datos, lo dividiremos en dos categorías: Datos semi-estáticos y dinámicos.

A partir de este punto, nos referiremos a los datos por sus términos en inglés ya que así son como se obtienen de la API y el repositorio.

Datos semi-estáticos

Llamaremos datos semi-estáticos a aquellos que casi no cambian a lo largo del tiempo, como son: Campeones, objetos, mapas, definiciones de rangos, etc.

Para una definición más precisa, los datos semi-estáticos son aquellos que no cambian en un parche. Todos los datos estáticos se obtienen de Data Dragon.

Para este proyecto los datos que se contemplarán son:

  • Champions: Lista de campeones, ej. Aatrox, Ahri, Zed, etc.
  • Maps: Lista de mapas, ej. Grieta del invocador, Abismo de los lamentos, etc.
  • Ranks: Lista de rangos disponibles, ej. Retador (IV-I), Maestro (IV-I), etc.
  • Regions: Lista de regiones, ej. LAN, LAS, NA, EUW, etc.
  • Queues: Lista de colas para buscar partida, ej. Solo/Duo 5v5, Normal 5v5, etc.

Los datos anteriores se encuentran disponibles en archivos JSON dentro del repositorio.

Datos dinámicos

Son todos aquellos que cambian con el tiempo, como son: historiales de partidas, rango del jugador, estadísticas de cada partida, porcentajes de victoria, etc. Algunos de estos datos se obtienen tras procesar los datos en crudo que proporciona la API.

Los datos crudos que se pueden obtener (y que son útiles para este proyecto) son:

  • Datos del invocador:
    • SummonerName: Nombre de invocador.
    • SummonerID: ID del invocador.
    • PUUID: ID único del jugador.
    • Level: Nivel actual del invocador.
    • Region: Región en la que juega el invocador.
    • Rank: Rango actual del invocador.

Nota: Nótese que invocador y jugador hacen referencia a la persona que juega, sin embargo, usaremos invocador para referirnos a los aspectos relativos a la cuenta y jugador para referirnos a los aspectos relativos a las partidas.

  • Datos de la partida

Todos los datos anteriores se obtienen haciendo peticiones a la API tipo REST de Riot.