Cómo gané en el Fantasy Football italiano (Fantacalcio) usando Machine Learning

Imagen de Dall-E.

Descifrando el código de Fantacalcio a través del poder de la IA

Giuseppe Musicco

Como ingeniero mecánico con un gran interés en la programación y la informática, me fascinó el mundo de la aprendizaje automático e inteligencia artificial hace unos años. Reconociendo su potencial en varias disciplinas de ingeniería, me embarqué en un viaje para estudiar el aprendizaje automático. Sin embargo, a pesar de adquirir conocimientos teóricos, luché por encontrar formas prácticas de aplicar y practicar mis nuevas habilidades. Si bien los conjuntos de datos listos para usar estaban disponibles, no proporcionaron la experiencia completa de recopilación y procesamiento de datos. Entonces, se me ocurrió una idea: ¿por qué no aplicar el aprendizaje automático para ayudarme a ganar en fútbol de fantasía?

Introducción a Fantacalcio

Fuente: Fantasy Football.

Fútbol de fantasía es un juego muy popular entre los fanáticos del fútbol italiano. Los participantes forman grupos y compiten durante todo el año en función de las actuaciones de jugadores reales en Una liga, la liga de fútbol italiana más importante. Antes del comienzo de la temporada, los participantes realizan una subasta para seleccionar sus listas de más de 20 jugadores. Después de cada jornada de la Serie A, los jugadores reciben votos en función de su rendimiento, con bonificaciones adicionales por goles y asistencias. Estos votos y bonos acumulados determinan las puntuaciones de los participantes. Uno de los aspectos cruciales del juego es seleccionar una alineación semanal de jugadores y tomar decisiones sobre a quién jugar regularmente ya quién enviar a la banca.

Objetivo de mi trabajo

El objetivo principal de mi algoritmo de aprendizaje automático sería predecir el voto y el fanta-voto (voto más bonificación) de los jugadores de la Serie A en función del partido de su equipo. El fútbol es un juego intrínsecamente incierto, ya que es imposible garantizar si un jugador marcará o no. Sin embargo, ciertos jugadores tienen una mayor probabilidad de anotar en comparación con otros, y su rendimiento puede variar según el equipo al que se enfrenten. Mi objetivo era encontrar un método objetivo para determinar qué jugador tenía una mayor probabilidad de ofrecer un mejor rendimiento en cualquier jornada de la Serie A.

Descargo de responsabilidad: secciones como esta se utilizarán en el artículo para proporcionar ejemplos de casos reales de Fantacalcio, para ilustrar los conceptos discutidos. Si no está familiarizado con el juego o los jugadores de la Serie A, no dude en omitir estas secciones.

Vista previa de los resultados del algoritmo para predecir el rendimiento de los jugadores en una alineación de Fantacalcio. Imagen del autor.

Recopilación y procesamiento de los datos.

Una vez que descargué el archivo de votos de Fantacalcio, el siguiente paso fue recopilar un conjunto completo de funciones para entrenar el algoritmo de aprendizaje automático. Para construir este conjunto de datos, encontré fbref.com ser un recurso invaluable, proporcionando un medio conveniente para obtener estadísticas tanto para los jugadores como para los equipos de la Serie A. El sitio ofrecía una amplia gama de estadísticas compiladas meticulosamente, que abarcaban varias métricas, como goles esperados, entradas, pases y número promedio de oportunidades creadas. La abundancia de datos detallados disponibles en FBRef facilitó en gran medida el proceso de ensamblar un conjunto de funciones sólidas para entrenar el algoritmo de aprendizaje automático.

Tabla que muestra algunas de las estadísticas de los jugadores disponibles. Fuente: FB ref.
Tabla que muestra algunas de las estadísticas de los equipos disponibles. Fuente: FB ref.

El enfoque que tomé involucró la construcción de un conjunto de datos que comprende más de 50 características para cada jugador. Este conjunto de datos combinó las estadísticas promedio procesadas del jugador, fusionadas con las estadísticas de su equipo y las estadísticas del equipo contrario para una jornada determinada. Los resultados de destino para cada fila del conjunto de datos fueron el voto del jugador y el fanta-voto. Para construir el conjunto de datos, consideré las últimas tres temporadas de la Serie A.

Para abordar el desafío de las estadísticas poco confiables para los jugadores con tiempo de juego limitado en la temporada, empleé tres estrategias:

  1. Promedio ponderado con las estadísticas de la temporada anterior.
  2. En ausencia de datos históricos confiables, las estadísticas del jugador se promediaron con las del jugador promedio en un rol similar.
  3. Usé una lista predefinida para promediar parcialmente las estadísticas de un jugador con las de un jugador anterior del mismo equipo que desempeñó un papel similar.

Por ejemplo, el desempeño del novato del Napoli, Kim, podría compararse con el desempeño anterior de Koulibaly, o el desempeño de Thauvin podría evaluarse en relación con su predecesor, Deulofeu (pero esto resultó ser incorrecto).

Esquema que representa cada fila del conjunto de datos. El voto del jugador y el fanta-voto son los resultados objetivo, mientras que todas las demás estadísticas y factores locales se fusionan en el conjunto de características. Imagen del autor.

Definición y entrenamiento del algoritmo.

Para hacer las cosas más interesantes y los resultados más agradables de visualizar, el algoritmo de aprendizaje automático se diseñó para ir más allá de las simples predicciones de votos y fanta-votos. En cambio, un enfoque probabilístico fue adoptado, aprovechando TensorFlow y TensorFlow Probability para construir una red neuronal capaz de generar una distribución de probabilidad. Específicamente, la red predijo los parámetros de una distribución de probabilidad sin-arcosinh. Esta elección se hizo para tener en cuenta la asimetría inherente en la distribución de los votos por desempeño de los jugadores. Por ejemplo, en el caso de un jugador ofensivo, aunque su fanta-voto promedio puede ser de alrededor de 6.5, el algoritmo reconoció que un voto de 10 (que indica un desempeño excepcional, como marcar un gol) sería mucho más probable que ocurra que un voto de 4 (lo que representa un desempeño mediocre poco común).

Figura Distribuciones de probabilidad de Sinh-Arcsinh con diferentes parámetros. Fuente en: ResearchGate.

El red neuronal profunda La arquitectura empleada para esta tarea constaba de múltiples capas densas, cada una de las cuales utilizaba la función de activación sigmoidea. Para evitar el sobreajuste y mejorar la generalización, se utilizaron técnicas de regularización como Dropout y Early Stopping. El abandono desactiva aleatoriamente una fracción de las unidades de la red neuronal durante el entrenamiento, mientras que la detención anticipada detiene el proceso de entrenamiento si la pérdida de validación deja de mejorar. La función de pérdida elegida para entrenar el modelo fue Negative Log Likelihood, que mide la discrepancia entre la distribución de probabilidad pronosticada y los resultados reales.

Aquí se muestra un fragmento del código escrito para construir la red neuronal:

callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience = 10)
neg_log_likelihood = lambda x, rv_x: -rv_x.log_prob(x)

inputs = tfk.layers.Input(shape=(X_len,), name="input")
x = tfk.layers.Dropout(0.2)(inputs)
x = tfk.layers.Dense(16, activation="relu") (x)
x = tfk.layers.Dropout(0.2)(x)
x = tfk.layers.Dense(16, activation="relu") (x)

prob_dist_params = 4

def prob_dist

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio