Predictor de fútbol de fantasía

Fantasy Football es algo que comencé a jugar hace unos años, pero no me obsesioné con él hasta el otoño de 2023. Me interesé bastante unos pocos juegos después de la temporada, sin embargo, ya había seleccionado a mi equipo de jugadores. que es la parte más importante de la temporada como “gerente” de fútbol de fantasía y no había hecho un muy buen trabajo. Esto me hizo pensar en la mejor forma de reclutar jugadores y pensar en cómo predecir qué jugadores lo harán mejor. Si bien reclutar un buen equipo en una liga pequeña con amigos es divertido, reclutar un buen equipo en una liga en línea por mucho dinero podría ser extremadamente rentable. Esto me hizo querer hacer algo que pudiera predecir cuántos puntos anotará cualquier jugador de la NFL en su próxima temporada de juego.

Para recopilar estos datos, busqué en muchos sitios web diferentes una API con todos los datos fáciles de descargar. Esto no tuvo éxito. Luego comencé a buscar en diferentes sitios web para ver cuál funcionaría mejor para extraer la información. Me decidí por Pro Football Reference, que tenía datos almacenados de una manera que se podía desechar fácilmente, ya que los datos de los jugadores de años completos estaban en una sola página web, y pasar de los datos de un año era un cambio muy simple en la URL. Escribí una función donde las entradas eran el año de inicio y el año de finalización y la salida era un diccionario donde las claves eran el año y los valores eran los datos de ese año en un marco de datos de pandas. Resultó que terminé necesitando limpiar mucho los datos ya que había muchos problemas que necesitaba solucionar. Lo primero que tenía que hacer era agregar una columna de «Año» para poder distinguir a los jugadores de un año a otro. El siguiente problema con los datos que descubrí fue que en las columnas con los nombres de los jugadores, si fueron seleccionados para el Pro Bowl o si eran del primer equipo All-Pro, tendrían un * o *+ después del nombre de los jugadores, como » Josh Jacobs*+”. Dado que los jugadores no siempre reciben estos premios, necesitaba limpiar esta columna para asegurarme de que los nombres de los jugadores fueran consistentes año tras año. Cuando limpié estos datos, también agregué dos columnas diferentes que contenían un 1 o un 0 que representaban si fueron seleccionados o no para cualquiera de los premios. También hubo algunos jugadores que tenían datos vacíos para algunas columnas. Después de revisarlo, me di cuenta de que no ponían 0 cuando un jugador no registraba una estadística.

Luego agregué los 0 en cada celda vacía para asegurarme de que no hubiera celdas vacías. A partir de ahí me di cuenta de que había muchas filas de datos que estaban completamente en blanco, y la razón de ello era que el sitio web tenía una fila cada 30 jugadores que mostraba lo que representaba cada columna nuevamente (Vea la fila entre el jugador 29 y el jugador 30 en el imagen de arriba. También eliminé todas estas filas de mi marco de datos. Otro problema que tuve fue que los datos de las columnas «Ctch%» tenían un signo de %, así que también tuve que eliminarlo. Después de eso, necesitaba hacer que todos los datos sean numéricos ya que muchas de las columnas eran cadenas después de que las extraje. Escribí una función que cambió todas las columnas apropiadas a tipos numéricos. Eso envolvió todo lo que necesitaba hacer para limpiar mis datos. Ahora solo necesitaba para agregar una columna de «Puntos de los próximos años» a mi marco de datos que sería lo mismo que los puntos de los jugadores que anotaron en el próximo año.

Ahora que había limpiado todos mis datos, era hora de entrenarlos con Regresión lineal y Regresión de bosque aleatorio. Mi Y era la columna de puntos del año siguiente y mi X eran todas las demás columnas numéricas en el marco de datos.

Este código tomaría muchos años de datos en los que se ejecutarían el trazador de líneas y la regresión Random Forest. Luego usé .predict() para agregar una columna a un marco de datos separado que solo tenía los datos de 2022. Esta columna predice cómo se desempeñará cualquier jugador del conjunto de datos de 2022 en 2023.

También te puede interesar 7 técnicas de clasificación de texto para cualquier escenario

También dividí mi marco de datos que tenía todos los datos en un grupo de prueba y entrenamiento para comprender cómo obtener el error absoluto medio y el R cuadrado.

Originalmente, sin modificar ninguno de los datos además de la limpieza, tenía un error cuadrático medio: 3135,33, error absoluto medio: 40,45 y tenía un R-cuadrado: 0,5178393938971146

Imprimí los puntajes más altos pronosticados para 2023 con su rango asociado por posición (ya sea receptor abierto o corredor)

Al observar la importancia de la característica, quedó claro que la columna Puntos de fantasía fue la más impactante cuando se trataba de predecir puntos.

También te puede interesar MLOps en la práctica: cómo diseñar aplicaciones de IA

Esto me hizo pensar en cómo podría intentar equilibrar más la importancia de la función para que la importancia de la función sea más equilibrada, lo que podría ayudar a reducir el error absoluto medio.

Para hacer esto, eliminé las columnas «Puntos de fantasía», lo que dio como resultado que «YScm» (Yards from scrimmage) fuera el más impactante con diferencia, así que también eliminé esa fila. Ambas columnas se vieron afectadas directamente por las otras columnas, como Rec Yds y Rush Yards, por lo que podría estar arruinando la precisión, ya que se están «contando dos veces» hasta cierto punto.

Después de eliminar Fantasy Points y YScm, tenía un error cuadrático medio: 3117,05, error absoluto medio: 40,44 y R-cuadrado: 0,5206500004252972.

No ha cambiado demasiado aquí, sin embargo, la importancia de la característica cambió bastante.

También te puede interesarGPT-3: lecciones del ajuste fino

Rec/G fue, con diferencia, el más importante, seguido de Rec y Touches. Esto tiene sentido ya que estas estadísticas tienen que ver con la frecuencia con la que un jugador obtiene el balón en sus manos, lo que le permite sumar puntos.

Después de eliminar Rec/G, el error cuadrático medio fue 3139,95, el error absoluto medio fue 40,62 y el R-cuadrado fue 0,5171282573376773. La característica de importancia se veía así:

Dado que eliminar algunas de las columnas no cambió el MAE, tuve que probar otras formas para ver si podía mejorar.

Primero traté de eliminar a los jugadores con puntajes de fantasía bajos ya que solo los mejores jugadores juegan en fantasía, predecir esos jugadores es lo más importante. Eliminé a todos los jugadores con puntaje menor a 50 y estos fueron los resultados

También te puede interesarTraducción automática multilingüe con Spark NLP

Error cuadrático medio: 4575,83
Error absoluto medio: 53,49
R-cuadrado: 0,36133948841341845

A continuación, intenté mantener solo los receptores abiertos, y estos fueron los resultados.

Error cuadrático medio: 4062.13
Error absoluto medio: 49,83
R-cuadrado: 0,40180238383613487

Después intenté mantener solo a los corredores, y estos fueron los resultados.

Error cuadrático medio: 5205.09
Error absoluto medio: 55,22
R-cuadrado: 0,3482200609541979

Después de observar a los jugadores por sus posiciones, está claro que esto no ayudó a predecir su rendimiento de fantasía.

Este fue un proyecto muy interesante que planeo promover. En cuanto a lo que funcionó en este proyecto, diría que pude raspar los datos muy bien y limpiarlos fácilmente también. Creo que debido a que sé mucho sobre el tema, pude sacar conclusiones más fácilmente y también responder preguntas que tenía sobre los datos. Algunas cosas que no funcionaron fueron que los mariscales de campo no estaban involucrados en mi proyecto hasta este momento, ya que los datos que extraje eran las yardas de los jugadores desde la línea de golpeo y no sus estadísticas de pases. Dado que las estadísticas de pase constituyen la mayoría de los puntos totales de Qb, no se pudieron predecir con precisión. I

En cuanto a lo que planeo hacer para continuar con este proyecto, me gustaría agregar mariscales de campo con sus estadísticas apropiadas en su propio marco de datos, ya que su forma de anotar es muy diferente a la de los otros jugadores. Después de tener Quarterbacks en su propio marco de datos, me gustaría experimentar agregando varios años de datos de jugadores a una sola fila para ver si tener más de un año podría hacer que la predicción de su puntuación en el futuro sea más precisa.

En general, me divertí mucho trabajando en este proyecto y estoy emocionado de seguir aprendiendo y haciendo más con la IA y el aprendizaje automático.

Scroll al inicio