PACE / app.py
Andrew12121212's picture
Update app.py
936444c verified
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()