57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
# predecir_jornada.py
|
|
"""
|
|
Predice los resultados de una jornada futura usando el modelo entrenado.
|
|
"""
|
|
|
|
import pandas as pd
|
|
import os
|
|
import joblib
|
|
from sklearn.ensemble import RandomForestClassifier
|
|
|
|
MODEL_PATH = os.path.join(os.path.dirname(__file__), '../models/modelo_rf.pkl')
|
|
DATA_PATH = os.path.join(os.path.dirname(__file__), '../data/espana/partidos_todos.csv')
|
|
PARTIDOS_PATH = os.path.join(os.path.dirname(__file__), '../partidos_jornada.txt')
|
|
|
|
# Cargar datos históricos
|
|
df_hist = pd.read_csv(DATA_PATH)
|
|
|
|
# Calcular medias históricas de goles local y visitante
|
|
media_goles_local = df_hist.groupby('local')['goles_local'].mean().to_dict()
|
|
media_goles_visitante = df_hist.groupby('visitante')['goles_visitante'].mean().to_dict()
|
|
|
|
# Cargar modelo entrenado o entrenar si no existe
|
|
if os.path.exists(MODEL_PATH):
|
|
clf = joblib.load(MODEL_PATH)
|
|
else:
|
|
df_hist['dif_goles'] = df_hist['goles_local'] - df_hist['goles_visitante']
|
|
X = df_hist[['dif_goles']]
|
|
y = df_hist['resultado']
|
|
clf = RandomForestClassifier(n_estimators=100, random_state=42)
|
|
clf.fit(X, y)
|
|
joblib.dump(clf, MODEL_PATH)
|
|
|
|
# Leer partidos desde archivo
|
|
partidos = []
|
|
if os.path.exists(PARTIDOS_PATH):
|
|
with open(PARTIDOS_PATH, 'r', encoding='utf-8') as f:
|
|
for linea in f:
|
|
linea = linea.strip()
|
|
if not linea or '-' not in linea:
|
|
continue
|
|
local, visitante = [x.strip() for x in linea.split('-', 1)]
|
|
goles_local = media_goles_local.get(local, df_hist['goles_local'].mean())
|
|
goles_visitante = media_goles_visitante.get(visitante, df_hist['goles_visitante'].mean())
|
|
dif_goles = goles_local - goles_visitante
|
|
partidos.append({'local': local, 'visitante': visitante, 'dif_goles': dif_goles})
|
|
else:
|
|
print(f"No se encontró el archivo {PARTIDOS_PATH}")
|
|
|
|
if partidos:
|
|
df_pred = pd.DataFrame(partidos)
|
|
predicciones = clf.predict(df_pred[['dif_goles']])
|
|
df_pred['prediccion'] = predicciones
|
|
print("\nPredicciones para la jornada:")
|
|
print(df_pred[['local', 'visitante', 'prediccion']])
|
|
else:
|
|
print("No se introdujeron partidos.")
|