Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import joblib | |
| # Define los MAE por liga (ajusta si tus resultados cambian) | |
| MAE_LIGAS = { | |
| "FIBA": 7.23, | |
| "NBA": 9.19, | |
| "Femenino": 7.45 | |
| } | |
| # Carga los modelos entrenados | |
| modelos = { | |
| "FIBA": joblib.load("mejor_modelo_fiba.pkl"), | |
| "NBA": joblib.load("mejor_modelo_nba.pkl"), | |
| "Femenino": joblib.load("mejor_modelo_femenino.pkl") | |
| } | |
| def calcular_features(home1, home2, away1, away2): | |
| q1 = home1 + away1 | |
| q2 = home2 + away2 | |
| pace = (q1 + q2) * 2 | |
| return [q1, q2, pace] | |
| def predecir(liga, home1, home2, away1, away2, linea_apuesta): | |
| modelo = modelos[liga] | |
| mae = MAE_LIGAS[liga] | |
| X = [calcular_features(home1, home2, away1, away2)] | |
| pred = modelo.predict(X)[0] | |
| total_predicho = int(pred[2]) | |
| explicacion = ( | |
| f"El MAE (error promedio) para {liga} es de {mae} puntos.\n" | |
| f"Esto significa que, en promedio, la predicci贸n puede variar 卤{mae} puntos.\n" | |
| f"\n" | |
| f"Si la diferencia entre tu predicci贸n ({total_predicho}) y la l铆nea de apuesta ({linea_apuesta}) " | |
| f"es menor que el MAE, la apuesta es riesgosa.\n" | |
| f"Si la diferencia es mayor que el MAE, puede haber una oportunidad de valor.\n" | |
| f"\n" | |
| f"Ejemplo: Si tu predicci贸n es {total_predicho} y la l铆nea es {linea_apuesta}, " | |
| f"la diferencia es {abs(total_predicho - linea_apuesta)} puntos.\n" | |
| f"{'隆Hay valor para apostar!' if abs(total_predicho - linea_apuesta) > mae else 'La diferencia es menor que el MAE, apuesta con precauci贸n.'}" | |
| ) | |
| return { | |
| "Q3 (total)": int(pred[0]), | |
| "Q4 (total)": int(pred[1]), | |
| "Total partido": total_predicho, | |
| "MAE (Error Promedio)": mae, | |
| "Ayuda para apostar": explicacion | |
| } | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 馃弨 Predicci贸n puntos Q3, Q4 y Total") | |
| gr.Markdown( | |
| "Selecciona la liga, ingresa los puntos de cada equipo en los dos primeros cuartos, " | |
| "y la l铆nea de apuesta (over/under) para el total de puntos del partido." | |
| ) | |
| liga = gr.Dropdown(["FIBA", "NBA", "Femenino"], label="Liga", value="FIBA") | |
| with gr.Row(): | |
| home1 = gr.Number(label="Puntos Home Q1", value=20) | |
| home2 = gr.Number(label="Puntos Home Q2", value=18) | |
| away1 = gr.Number(label="Puntos Away Q1", value=17) | |
| away2 = gr.Number(label="Puntos Away Q2", value=21) | |
| linea_apuesta = gr.Number(label="L铆nea de apuesta (total puntos)", value=160, info="Over/Under de la casa de apuestas") | |
| btn = gr.Button("Predecir y analizar apuesta") | |
| output = gr.JSON(label="Predicci贸n y an谩lisis") | |
| btn.click( | |
| predecir, | |
| inputs=[liga, home1, home2, away1, away2, linea_apuesta], | |
| outputs=output | |
| ) | |
| demo.launch() | |