Analizamos League of Legends usando Machine Learning

Thursday, 25 May 2017

Analizamos League of Legends usando Machine Learning

Escrito por David Heras y Paula Montero, becarios en LUCA, y Javier Carro Data Scientist en LUCA.

En 2009, cuando se produjo el lanzamiento al mercado del League of Legends (LoL), probablemente pocos imaginaban lo que estaba por llegar. El crecimiento de los eSports es un hecho innegable, y uno de los juegos más populares enmarcados en este mundo es el desarrollado por Riot Games.


La última referencia hecha pública por los creadores hablaba de más de 100 millones de jugadores mensuales activos, lo que le convierte en el líder indiscutible dentro del género MOBA (Multiplayer Online Battle Arena).

Ya hablamos con anterioridad del juego y una de sus competiciones. Para los aún bisoños, League of Legends es un videojuego en el que, en su modo Clásico, dos equipos de cinco campeones compiten en un mapa con el objetivo de destruir el nexo del enemigo mientras se defiende el propio.

Esta vez vamos a profundizar un poco más. Nos hemos propuesto caracterizar el juego de los equipos y predecir los resultados de encuentros profesionales que se disputen en un futuro próximo.

Nos hemos basado en los datos publicados por Tim Sevenhuysen en Oracle's Elixir. Este conjunto de datos incluye registros de estadísticas de cada partida (desempeño de los jugadores a nivel individual desempeño del equipo en general). Los datos cubren todas las facetas del juego: oro conseguido, daño causado, “farmeo”, etc. Así pues, después de haber explorado estos datos nos lanzamos a por nuestro análisis.

Planteamiento y datos

En nuestro caso, tenemos los datos de todas las partidas disputadas en hasta siete ligas de todo el mundo y conocemos los resultados. Así que lo que tratamos de predecir es si será victoria o no, por tanto con un clasificador simple nos vale.

Hemos hecho uso de las estadísticas del split de primavera del 2017, por lo que partimos con un conjunto de datos muy extenso. Tenemos todas las variables (jugador, campeón, equipo, oro, daño, etc.) y registros con la información, por partida, de cada equipo en su conjunto y por cada uno de los 10 jugadores de ambos equipos.

Tras muchas pruebas en cuanto a las posibles formas de abordar el análisis nuestro planteamiento es el siguiente:
  1. Hacer una clasificación no supervisada de cada equipo tras agrupar las variables por temas: Oro, CS (“farmeo”), Wards, Objetivos y KDA ratios.
  2. Añadir la información de la tendencia de victorias del equipo según sus últimas 5 partidas, teniendo en cuenta si juegan en el lado azul o en el rojo.
Haremos uso de técnicas de aprendizaje no supervisado para la caracterización del juego de los equipos y usaremos aprendizaje supervisado para abordar la predicción.

El aprendizaje supervisado se caracteriza porque, al ser entrenado, el modelo conoce las clasificaciones. A la hora de predecir nuevos resultados, el clasificador conoce lo sucedido anteriormente en ocasiones similares y predecirá en función de esa información y de la estructura interna del algoritmo.
  • Datos de los equipos:
Teníamos la opción de trabajar con la información individual de los jugadores en las partidas, pero decidimos trabajar con los datos de los equipos para obviar el problema que supone que éstos tienen suplentes y sufren cambios de plantilla frecuentemente. De esta forma nos centramos en los resultados del conjunto y, aunque sabemos que perdemos información, simplificamos el problema.
  • Nulos:
En ocasiones hay registros que no contienen la misma información que los demás. Tener datos vacíos o nulos no aporta información. Haciendo varias pruebas hemos comprobado que la solución que nos da mejores resultados es sustituir esos casos con la media de la variable correspondiente. Así además no perdemos el resto de información de cada registro afectado..
  • Redundancia:
Realizando simples análisis de correlación se comprueba como hay bastantes variables redundantes, que nos aportan la misma información. Por ejemplo: cuanto más CS, más Oro ganado o más experiencia obtenida y, generalmente, si es una diferencia positiva respecto al adversario, eso se traduce en victoria. En este caso esas 3 variables nos aportan el mismo valor, así que con quedarnos sólo con una nos bastaría. Pero, ¿cuál?. Más adelante lo veremos.
  • Normalización temporal:
Éste es un punto importante ya que la duración de una partida influye fuertemente en la obtención de oro, CS, experiencia, KDA… y si se ignorara la variable del tiempo estaríamos engañando a los modelos. Por ejemplo: el mejor equipo de Corea puede haber ganado una partida en 20 minutos obteniendo 15.000 de oro por jugador, mientras que el peor equipo de Turquía puede haber perdido una partida al minuto 60 obteniendo 25.000 de oro por jugador. En un principio el equipo turco habría actuado mejor en lo que se refiere a la faceta del oro que el equipo Coreano, pero no es un dato valioso ya que el oro por minuto de los coreanos es de 750 mientras que el de los turcos es de 416. Una cifra significativamente inferior.

Caracterización de los equipos


Con los datos ya limpios y preparados podemos proceder a realizar la clasificación de los equipos.
Hemos utilizado el método de clasificación no supervisada Kmeans que incluye la librería Sklearn de Python. Este algoritmo analizará el comportamiento de los equipos en las distintas facetas del juego que elegimos anteriormente en la fase de agrupación de variables y clasificará a los equipos según su comportamiento. Que no sea supervisado significa que no hay asignación previa para la clasificación. El resultado que esperaríamos, por ejemplo, es que el algoritmo reúna a los mejores equipos de cada liga en los mismos grupos, y lo mismo con los peores.

Los grupos de variables que mencionamos más arriba suelen tener más de tres variables, así que reducimos el tamaño de esos conjuntos para que sólo cuenten con dos dimensiones y así podamos representar en una gráfica de dispersión los resultados, siendo cada variable un eje de ésta. Para eso aplicamos el Análisis de Componentes Principales de la librería Sklearn de Python.

Una vez realizado el PCA procedemos a clasificar los equipos de manera no supervisada. Los resultados los hemos visualizado con Spotfire.

Éstas son algunas de las apreciaciones más notables que vemos en esta clasificación:
  • Los equipos de mejores resultados suelen estar juntos en los clusters. Y lo mismo sucede con los de peores resultados. Esto quiere decir que efectivamente el algoritmo ha clasificado a los equipos tal y como sugeríamos antes a pesar de la pérdida de información que supone la reducción de dimensiones del PCA.
Figura 1: Resaltados los equipos con clasificaciones más bajas en las competiciones para ver cómo coincide con los clusters obtenidos.

Figura 2: Resaltados los equipos con clasificaciones más altas en las competiciones para ver cómo coincide con los clusters obtenidos.

  • Hay casos extraordinarios como el de EnVyUs (equipo que acabó en la última posición de la liga norteamericana) que en las facetas de CS se posiciona en el grupo de los mejores y en Oro se junta con los mejores de su liga como Team SoloMid. Sin embargo, se observa que en los demás aspectos analizados (KDA ratios y Objetivos) se mantiene cerca de los peores equipos de las demás ligas.

Figura 3: Caso especial del equipo EnVyUs quedando junto al cluster de los "mejores" en cuanto a CS.


Figura 4: Caso especial del equipo EnVyUs quedando junto al cluster de los "peores" en cuanto a Gold.

  • Cabe destacar que en el caso de algunas ligas, sus participantes también se mantienen cercanos. En la liga norteamericana, en todos los ámbitos analizados, los equipos se quedan cerca los unos de los otros. Eso no pasa en otras ligas como la europea o la turca, por ejemplo.

Figura 5: Cercanía de los equipos que juegan en las mismas ligas.

La información de estos clusters asignados a los equipos pasa a formar parte del dataset de entrenamiento de nuestro modelo de predicción. De hecho, según las pruebas que hicimos, los resultados que arrojaban las predicciones utilizando simplemente esta información no estaban del todo mal: obtuvimos una precisión de acierto entre el 58% y 60% con distintos modelos. Pero todavía podemos enriquecer la información para mejorar este resultado.

Tendencias


Después de haber leído varios artículos y estudios de predicciones realizadas en otros deportes tradicionales, vemos que es muy relevante el estado de forma con el que llega un equipo al partido que se quiere predecir. De nuevo, hay muchas maneras de incluir esa información. Nosotros hicimos lo siguiente:

Hemos diferenciado si el equipo juega en el lado azul o en el rojo, ya que sabemos que es un factor que influye mucho en los resultados de las partidas, aunque de forma diferente en función del parche vigente en ese momento.

También consideramos que el estado de forma de los equipos puede ser determinante, por lo que calculamos la tendencia de victorias que consiguió cada equipo en sus últimas 5 partidas en el lado en el que le toque jugar.

Para calcular la tendencia de un equipo, nos quedamos con su registro de partidas ordenadas cronológicamente y, en un marco de 5 encuentros, nos vamos desplazando de una en una para conocer el estado de forma con el que llega a la próxima partida.

Dataset final


Así, finalmente la información que proporcionamos al modelo será:
  • Los equipos que se enfrentan
  • Los clusters referidos a los grupos de variables a los que pertenece cada equipo según sus partidas jugadas 
  • La tendencia de victorias en las últimas 5 partidas que jugó el equipo azul como equipo azul
  • La tendencia de victorias en las últimas 5 partidas que jugó el equipo rojo como equipo rojo
La siguiente tabla es una pequeña muestra del formato final de los datos.

Figura 6: Muestra del formato final de los datos.

Por ejemplo, en la primera partida mostrada en la tabla, el equipo “Unicorns of Love” tiene una tendencia igual a 0.6, lo que significa que en el momento de enfrentarse a “G2 Esports”, había ganado tres de sus últimas cinco partidas jugadas en el lado rojo. Además se incluye el clúster al que pertenece cada equipo para cada grupo de variables. La columna “Victoria Azul” la utilizamos para entrenar el modelo, y la eliminaremos para testear.

Resultados


Llegados a este punto, ya tenemos los datos preparados para el siguiente paso. Entrenar y evaluar nuestros modelos de predicción.

Como paso previo, podemos discretizar (utilizando la librería LabelEncoder de Sklearn) los nombres de los equipos o utilizar variables dummies.

Además, a la hora de evaluar la eficiencia hemos utilizado cross-validation para garantizar que los resultados de precisión de cada modelo son independientes de la partición tomada entre los datos de entrenamiento y de prueba.

Los resultados de acierto obtenidos son los siguientes:

Para darle más realismo, aprovechando que mientras realizábamos este estudio había un torneo en curso (MSI), hemos querido realizar unas pruebas reales para ver si los resultados obtenidos en la simulación coinciden con los reales.

Hemos realizado la predicción para las partidas jugadas en las tres primeras jornadas de la fase de grupos, y el modelo más preciso en la evaluación real ha sido el SVM, que obtiene un 68.75%. Un resultado por encima de lo esperado.

Miércoles 10 de mayo de 2017
vs
vs
vs
vs
Acierto
Acierto
Acierto
Fallo


Jueves 11 de mayo de 2017
vs
vs
vs
vs
vs
vs
Acierto
Fallo
Acierto
Fallo
Acierto
Acierto

Viernes 12 de mayo de 2017
vs
vs
vs
vs
vs
vs
Fallo
Acierto
Acierto
Acierto
Acierto
Fallo


Un caso especial


Hemos observado el hecho curioso de que, en la mayoría de las partidas con predicción fallida, o bien participa G2 Esports, o Flash Wolves, o bien se enfrentan ambos.

En cuanto a G2 Esports, cualquiera que siga la escena europea sabe que G2 Esports siempre acude a los campeonatos internacionales con muchas expectativas, al menos acariciar el título en caso de que en el mismo campeonato participe SKT T1 Telecom. Son los claros reyes de europa y su estilo de juego es tan limpio e impoluto que parece mentira que lo haga tan mal cuando sale de Europa. No ha sido hasta este mismo MSI que G2 se ha redimido y, contra bastantes pronósticos, ha conseguido llegar a la final y plantar cara a los dioses Coreanos. El equipo de Ocelote mostró todo su potencial y por fin, aún quedando en segundo lugar, hizo sentir orgullo a sus fans y seguidores de la LCS de europa, la región a la que representan.

El caso de Flash Wolves es similar. Ganador de la LMS, consiguió derrotar a G2 en la final del IEM Katowice y, por tanto, proclamarse también campeón de esa competición. Así pues, llegaba a este MSI con grandes expectativas y, pese a haber superado a G2 recientemente en una final, no pudo con él en la fase de grupos. Sin embargo, sí consiguió ganar a SKT en una ocasión. Esto produjo una montaña rusa de sensaciones en los aficionados que, seguramente, llegaron a las semifinales contra SKT con alguna esperanza. No duró mucho esa sensación ya que cayeron derrotados por un contundente 3-0 en una serie al mejor de 5.

Cualquiera que intentara predecir los resultados de las partidas de estos dos equipos tenía la misma probabilidad de acertar que de fallar ya que, como hemos visto, se produjeron resultados de todo tipo.

Figura 7: equipos G2 (punto redondo) y Flash Wolves (triángulo) representados en sus respectivos clusters.

En Figura 7 aparecen resaltados los dos equipos. Como vemos, ambos están más o menos cerca, eso quiere decir que tienen un comportamiento similar. Podríamos decir que ambos son buenos equipos en todas las facetas analizadas. Fijándonos un poco más, observamos que en la gráfica de CS (arriba a la izquierda), G2 se separa mucho, ya no solo de Flash Wolves, sino también de los demás equipos. Sucede lo mismo con la gráfica de oro y la de objetivos (arriba a la derecha y abajo a la derecha, respectivamente) pero en este caso es Flash Wolves el que se desmarca. Vemos entonces que estos dos equipos no son tan similares a los otros, y se ha demostrado en las predicciones.

Hasta aquí nuestra experiencia analítica y de ML con LoL. Como suele suceder en estos casos, cuando te planteas cerrar el análisis te siguen surgiendo muchas ideas que seguramente mejorarían los resultados. Esto es precisamente gracias a todo el conocimiento del dominio que has adquirido y a todas las formas en que has analizado los datos. Es obvio que, dentro del auge de la ciencia de datos, el “Sports Science” es una rama también en auge y que tiene mucho camino por delante ([1] [2] [3] [4] [5]).

5 comments:

  1. increíble trabajo de análisis de datos! construyendo modelos tan precisos como el vuestro se podría sin ningún problema ir a casas de apuestas de eSports(que las hay) y con los porcentajes de acierto que dais y sabiendo que los casos fallidos se concentran en ciertos equipos, ya sabrías dónde apostar y dónde no; supongo que esto también se podría empezar a extrapolar a otros deportes!

    ReplyDelete
    Replies
    1. Lo de las apuestas suena goloso ;-) pero nuestro objetivo era aprender y poder mejorar nuestro conocimiento en el área de Sports Science en general, ya que ahí tenemos más líneas de trabajo y queremos avanzar en ello.

      Delete
  2. Obvio que se puede extrapolar a cualquier deporte. Los eSports son más recientes que la mayoría de los deportes que hay en las casas de apuestas. El aprendizaje de máquina es una herramienta que va a seguir creciendo en los próximos años.

    Coincido con que el trabajo realizado en este documento es muy bueno! Enhorabuena!

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Aun no va a funcionar, usan las variables más obias pero no las cruciales, por tanto su margen de error es muy grande, no apostaría aun con esto.

    ReplyDelete