es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python – Prediciendo partidos de fútbol

Soy bastante nuevo en python y pandas, y aún tengo muchas dificultades. El curso al que asisto me dio una tarea que parece imposible para mí, espero que alguien pueda ayudarme.

Tengo un dataframe (simplificado, contiene los resultados de toda la temporada 16):

   season   date        team1          team2                score1   score2   result
12  2016    2016-08-13  Hull City       Leicester City       2.0    1.0        team1_win
13  2016    2016-08-13  Arsenal         Swansea City         0.0    1.0        team2_win
14  2016    2016-08-13  Southampton     Manchester Utd       1.0    1.0        empate
15  2016    2016-08-13  Middlesbrough   Stoke City           1.0    1.0        empate
16  2016    2016-08-13  Crystal Palace  West Bromwich Albion 0.0    1.0        team2_win
... ... ... ... ... ... ... ...

Ahora, me gustaría predecir cuántos goles va a marcar el Arsenal y el Manchester en el último partido de la temporada Arsenal-Manchester. (Probablemente no funcione con los datos que te proporcioné aquí). Esto se debe hacer con una regresión de conteo.

Intenté usar el código que obtuve de otro ejemplo, pero fracasé miserablemente:

modelArs = smf.poisson("score1 ~ score2 + team2", data=train_data)
resultArs = modelManc.fit();

Y sé que probablemente lo que hice allí es una tontería total, pero estoy completamente perdido.

La segunda tarea es mostrar qué equipo va a ganar, basándonos en un árbol de decisión.

La tercera tarea es utilizar una regresión mnlogit para mostrar la probabilidad de empate y victoria para cada equipo.

Sé que estoy pidiendo mucho, pero cualquier ayuda me ayuda mucho. También incluir información sobre lo que hiciste realmente me ayudaría. Solo estoy tratando de aprobar el curso de alguna manera y terminar con python después.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Estimado estudiante con dificultades,

    Entiendo que aprender un nuevo lenguaje de programación y una herramienta de análisis de datos como Python y Pandas puede resultar abrumador. ¡No te preocupes, no estás solo! Todos hemos pasado por eso. La buena noticia es que, con algo de práctica y perseverancia, eventualmente lo dominarás.

    En cuanto a tu tarea, permíteme proporcionarte algunas orientaciones.

    Para la tarea de regresión de conteo, tienes razón en que la regresión de Poisson es un buen modelo para usar. En Python, puedes utilizar la biblioteca statsmodels para ajustar dicho modelo. Aquí tienes un ejemplo de código que puedes adaptar a tus datos:

    import statsmodels.api as sm
    import pandas as pd
    
    # Carga tus datos
    data = pd.read_csv('tus_datos.csv')
    
    # Filtra el último partido entre Arsenal y Manchester Utd
    sub_data = data[(data['team1'] == 'Arsenal') & (data['team2'] == 'Manchester Utd') & (data['season'] == 2016)]
    
    # Ajusta un modelo de regresión de Poisson
    modelo = sm.formula.poisson("score1 ~ score2 + team2", data=sub_data)
    resultado = modelo.fit()
    
    # Predice el número de goles que anotará cada equipo en el último partido
    goles_ars = resultado.predict({'score2': 0, 'team2': 'Manchester Utd'})
    goles_manc = resultado.predict({'score2': 0, 'team2': 'Arsenal'})
    
    print(f"Se predice que Arsenal anotará {goles_ars.values[0]:.2f} goles.")
    print(f"Se predice que Manchester Utd anotará {goles_manc.values[0]:.2f} goles.")
    

    Para la tarea del árbol de decisiones, puedes utilizar scikit-learn, que es otra biblioteca popular para el aprendizaje automático en Python. Aquí tienes un ejemplo de código:

    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    # Carga tus datos
    data = pd.read_csv('tus_datos.csv')
    
    # Crea una variable de resultado binaria: 1 si el equipo1 gana, 0 en caso contrario
    data['equipo1_gana'] = (data['result'] == 'equipo1_gana').astype(int)
    
    # Filtra el último partido entre Arsenal y Manchester Utd
    sub_data = data[(data['team1'].isin(['Arsenal', 'Manchester Utd'])) & (data['season'] == 2016)]
    
    # Divide los datos en conjuntos de entrenamiento y prueba
    X_train, X_test, y_train, y_test = train_test_split(sub_data[['score1', 'score2']], sub_data['equipo1_gana'], test_size=0.3)
    
    # Ajusta un modelo de árbol de decisiones
    clf = DecisionTreeClassifier()
    clf.fit(X_train, y_train)
    
    # Predice el ganador del último partido
    ultimo_partido = pd.DataFrame({'score1': [0], 'score2': [0]})
    ganador = 'Arsenal' if clf.predict(ultimo_partido)[0] == 1 else 'Manchester Utd'
    
    print(f"Se predice que el ganador del último partido será {ganador}.")
    

    Finalmente, para la tarea de regresión logística multinomial, nuevamente puedes utilizar statsmodels. Aquí tienes un ejemplo de código:

    import statsmodels.api as sm
    
    # Carga tus datos
    data = pd.read_csv('tus_datos.csv')
    
    # Crea una variable de resultado binaria para cada equipo: 1 si el equipo gana, 0 en caso contrario
    data['ars_gana'] = ((data['result'] == 'equipo1_gana') & (data['team1'] == 'Arsenal')).astype(int)
    data['manc_gana'] = ((data['result'] == 'equipo2_gana') & (data['team2'] == 'Manchester Utd')).astype(int)
    data['empate'] = (data['result'] == 'empate').astype(int)
    
    # Filtra los datos para la última temporada
    sub_data = data[data['season'] == 2016]
    
    # Ajusta un modelo de regresión logística multinomial
    modelo = sm.MNLogit(sub_data[['ars_gana', 'manc_gana', 'empate']], sm.add_constant(sub_data[['score1', 'score2']]))
    resultado = modelo.fit()
    
    # Predice las probabilidades de empate y de cada equipo ganando el último partido
    ultimo_partido = pd.DataFrame({'score1': [0], 'score2': [0], 'const': [1]})
    probas = resultado.predict(ultimo_partido)
    
    print(f"La probabilidad predicha de un empate es {probas.values[0][2]:.2f}.")
    print(f"La probabilidad predicha de que Arsenal gane es {probas.values[0][0]:.2f}.")
    print(f"La probabilidad predicha de que Manchester Utd gane es {probas.values[0][1]:.2f}.")
    

    Espero que estos ejemplos de código te ayuden a comenzar con tus tareas. No dudes en comunicarte si tienes alguna otra pregunta.

    ¡Buena suerte con tu curso y tu viaje en Python!

    Saludos cordiales,
    Tu amigable experto en IT especializado en Python, Pandas, Pronósticos y Poisson.

Comments are closed.