import gradio as gr import joblib import pandas as pd # Carregar o modelo model_LayAway = joblib.load('model_class_layaway_0.pkl') model_LayHome = joblib.load('model_class_layhome_1.pkl') def converter_para_float(valor): # Substitui vírgula por ponto e converte para float return float(valor.replace(',', '.')) def calcular_percentual_recomendado(probabilidade, max_percent, min_percent): # Usar a fórmula de Kelly ajustada b = 1 # Supondo odds justas p = probabilidade / 100 q = 1 - p # Calcula a fração de Kelly f_star = (b * p - q) / b # Ajustar para dentro dos limites fornecidos f_star = max(min(f_star, max_percent / 100), min_percent / 100) # Se f_star for negativo, definimos como o valor mínimo if f_star < min_percent / 100: f_star = min_percent / 100 # Converte para percentual percentual_recomendado = round(f_star * 100, 2) return percentual_recomendado def fazer_previsao(ODD_H, ODD_D, ODD_A, min_percent, max_percent): # Converter entradas para float ODD_H = converter_para_float(ODD_H) ODD_D = converter_para_float(ODD_D) ODD_A = converter_para_float(ODD_A) data = pd.DataFrame( {'H/A': [ODD_H / ODD_A], 'Diff': [(ODD_H / ODD_D) - (ODD_H / ODD_A)]}) previsao_LayAway = model_LayAway.predict(data)[0] previsao_LayHome = model_LayHome.predict(data)[0] if previsao_LayAway == previsao_LayHome: resultado = 'Não entre!' else: if previsao_LayAway == 1: entrada_LayAway = 'SIM' else: entrada_LayAway = 'NAO' probabilidade_LayAway = round( 100 * model_LayAway.predict_proba(data)[0][1], 2) probabilidade_LayHome = round( 100 * model_LayHome.predict_proba(data)[0][1], 2) percentual_recomendado = calcular_percentual_recomendado( probabilidade_LayAway if entrada_LayAway == 'SIM' else probabilidade_LayHome, max_percent, min_percent ) resultado = f"entrada LayAway (se Odd> 1.17): {entrada_LayAway}\n" \ f"---> probabilidade: {probabilidade_LayAway}%\n" \ f"---> Percentual recomendado da banca: {percentual_recomendado}%\n" \ f"\n" \ f"entrada Home: {'SIM' if probabilidade_LayAway > 68.2 else 'NAO'}\n" \ f"obs: Muito risco, apenas 67% de acerto (odds>1.489)\n" \ f"\n" \ f"entrada LayHome (se Odd> 1.28): {'SIM' if previsao_LayHome == 1 else 'NAO'}\n" \ f"---> probabilidade: {probabilidade_LayHome}%\n" \ f"---> Percentual recomendado da banca: {percentual_recomendado}%\n" return resultado # Criar uma interface Gradio com layout simples iface = gr.Interface( fn=fazer_previsao, inputs=[ gr.Textbox(label="Odds para CASA vencer"), gr.Textbox(label="Odds para EMPATE"), gr.Textbox(label="Odds para VISITANTE vencer"), gr.Slider(1, 40, label="Percentual Mínimo da Banca (%)", value=1), # Slider mínimo com valor inicial 1 gr.Slider(10, 100, label="Percentual Máximo da Banca (%)", value=100) # Slider máximo com valor inicial 100 ], outputs="text", title="Redução de Risco em Apostas", description="Insira as Odds e obtenha uma sugestão para entradas LayAway (CASA vence ou EMPATA) e LayHome (VISITANTE vence ou EMPATA), juntamente com o percentual recomendado da banca." ) iface.launch()