File size: 3,569 Bytes
75ae5c9 37de043 e22cd7c 75ae5c9 ced7bae cf5d08e ced7bae cf5d08e ced7bae 6bce8c9 e22cd7c 75ae5c9 ced7bae 37de043 75ae5c9 e22cd7c 37de043 75ae5c9 ced7bae 75ae5c9 9552939 f21f231 ced7bae 9552939 ced7bae c7e7928 ad94f87 ced7bae f21f231 ced7bae 37de043 176d1f0 37de043 ced7bae cdaecbd ced7bae da45690 9552939 176d1f0 37de043 cdaecbd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
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() |