# 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.")