Update app.py
Browse filesExplicação das Modificações:
Novas Entradas: Foram adicionados sliders para definir o percentual máximo e mínimo da banca que pode ser apostado em cada aposta.
Cálculo do Percentual Recomendado:
A função calcular_percentual_recomendado usa a fórmula de Kelly adaptada, mas limita o resultado ao intervalo definido pelo usuário (mínimo e máximo).
A fração de Kelly é calculada com base na probabilidade fornecida pelo modelo e ajustada dentro dos limites definidos.
Interface Gradio: A interface agora inclui os sliders para definir os percentuais máximo e mínimo, e o resultado inclui o percentual recomendado da banca para a aposta, além das informações anteriores.
app.py
CHANGED
@@ -10,7 +10,23 @@ def converter_para_float(valor):
|
|
10 |
# Substitui vírgula por ponto e converte para float
|
11 |
return float(valor.replace(',', '.'))
|
12 |
|
13 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
# Converter entradas para float
|
15 |
ODD_H = converter_para_float(ODD_H)
|
16 |
ODD_D = converter_para_float(ODD_D)
|
@@ -18,6 +34,7 @@ def fazer_previsao(ODD_H, ODD_D, ODD_A):
|
|
18 |
|
19 |
data = pd.DataFrame(
|
20 |
{'H/A': [ODD_H / ODD_A], 'Diff': [(ODD_H / ODD_D) - (ODD_H / ODD_A)]})
|
|
|
21 |
previsao_LayAway = model_LayAway.predict(data)[0]
|
22 |
previsao_LayHome = model_LayHome.predict(data)[0]
|
23 |
|
@@ -33,43 +50,39 @@ def fazer_previsao(ODD_H, ODD_D, ODD_A):
|
|
33 |
100 * model_LayAway.predict_proba(data)[0][1], 2)
|
34 |
probabilidade_LayHome = round(
|
35 |
100 * model_LayHome.predict_proba(data)[0][1], 2)
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
if (probabilidade_LayAway < 26.1) & (probabilidade_LayHome > 88.5):
|
43 |
-
entrada_Away = 'SIM'
|
44 |
-
else:
|
45 |
-
entrada_Away = 'NAO'
|
46 |
-
|
47 |
-
if previsao_LayHome == 1:
|
48 |
-
entrada_LayHome = 'SIM'
|
49 |
-
else:
|
50 |
-
entrada_LayHome = 'NAO'
|
51 |
|
52 |
resultado = f"entrada LayAway (se Odd> 1.17): {entrada_LayAway}\n" \
|
53 |
f"---> probabilidade: {probabilidade_LayAway}%\n" \
|
|
|
54 |
f"\n" \
|
55 |
-
f"entrada Home: {
|
56 |
f"obs: Muito risco, apenas 67% de acerto (odds>1.489)\n" \
|
57 |
f"\n" \
|
58 |
-
f"entrada LayHome (se Odd> 1.28): {
|
59 |
f"---> probabilidade: {probabilidade_LayHome}%\n" \
|
60 |
-
f"
|
61 |
|
62 |
return resultado
|
63 |
|
64 |
# Criar uma interface Gradio
|
65 |
iface = gr.Interface(
|
66 |
fn=fazer_previsao,
|
67 |
-
inputs=[
|
68 |
-
|
69 |
-
|
|
|
|
|
|
|
|
|
70 |
outputs="text",
|
71 |
title="Redução de Risco em Apostas",
|
72 |
-
description="Insira as Odds e obtenha uma sugestão para entradas LayAway (CASA vence ou EMPATA) e LayHome (VISITANTE vence ou EMPATA)."
|
73 |
)
|
74 |
|
75 |
iface.launch()
|
|
|
10 |
# Substitui vírgula por ponto e converte para float
|
11 |
return float(valor.replace(',', '.'))
|
12 |
|
13 |
+
def calcular_percentual_recomendado(probabilidade, max_percent, min_percent):
|
14 |
+
# Usar a fórmula de Kelly ajustada
|
15 |
+
b = 1 # Supondo odds justas (ajuste de acordo com suas odds reais)
|
16 |
+
p = probabilidade / 100
|
17 |
+
q = 1 - p
|
18 |
+
|
19 |
+
# Calcula a fração de Kelly
|
20 |
+
f_star = (b * p - q) / b
|
21 |
+
|
22 |
+
# Ajustar para dentro dos limites fornecidos
|
23 |
+
f_star = max(min(f_star, max_percent / 100), min_percent / 100)
|
24 |
+
|
25 |
+
# Converte para percentual
|
26 |
+
percentual_recomendado = round(f_star * 100, 2)
|
27 |
+
return percentual_recomendado
|
28 |
+
|
29 |
+
def fazer_previsao(ODD_H, ODD_D, ODD_A, max_percent, min_percent):
|
30 |
# Converter entradas para float
|
31 |
ODD_H = converter_para_float(ODD_H)
|
32 |
ODD_D = converter_para_float(ODD_D)
|
|
|
34 |
|
35 |
data = pd.DataFrame(
|
36 |
{'H/A': [ODD_H / ODD_A], 'Diff': [(ODD_H / ODD_D) - (ODD_H / ODD_A)]})
|
37 |
+
|
38 |
previsao_LayAway = model_LayAway.predict(data)[0]
|
39 |
previsao_LayHome = model_LayHome.predict(data)[0]
|
40 |
|
|
|
50 |
100 * model_LayAway.predict_proba(data)[0][1], 2)
|
51 |
probabilidade_LayHome = round(
|
52 |
100 * model_LayHome.predict_proba(data)[0][1], 2)
|
53 |
+
|
54 |
+
percentual_recomendado = calcular_percentual_recomendado(
|
55 |
+
probabilidade_LayAway if entrada_LayAway == 'SIM' else probabilidade_LayHome,
|
56 |
+
max_percent,
|
57 |
+
min_percent
|
58 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
resultado = f"entrada LayAway (se Odd> 1.17): {entrada_LayAway}\n" \
|
61 |
f"---> probabilidade: {probabilidade_LayAway}%\n" \
|
62 |
+
f"---> Percentual recomendado da banca: {percentual_recomendado}%\n" \
|
63 |
f"\n" \
|
64 |
+
f"entrada Home: {'SIM' if probabilidade_LayAway > 68.2 else 'NAO'}\n" \
|
65 |
f"obs: Muito risco, apenas 67% de acerto (odds>1.489)\n" \
|
66 |
f"\n" \
|
67 |
+
f"entrada LayHome (se Odd> 1.28): {'SIM' if previsao_LayHome == 1 else 'NAO'}\n" \
|
68 |
f"---> probabilidade: {probabilidade_LayHome}%\n" \
|
69 |
+
f"---> Percentual recomendado da banca: {percentual_recomendado}%\n"
|
70 |
|
71 |
return resultado
|
72 |
|
73 |
# Criar uma interface Gradio
|
74 |
iface = gr.Interface(
|
75 |
fn=fazer_previsao,
|
76 |
+
inputs=[
|
77 |
+
gr.Textbox(label="Odds para CASA vencer"),
|
78 |
+
gr.Textbox(label="Odds para EMPATE"),
|
79 |
+
gr.Textbox(label="Odds para VISITANTE vencer"),
|
80 |
+
gr.Slider(5, 40, label="Percentual Máximo da Banca (%)"),
|
81 |
+
gr.Slider(5, 40, label="Percentual Mínimo da Banca (%)")
|
82 |
+
],
|
83 |
outputs="text",
|
84 |
title="Redução de Risco em Apostas",
|
85 |
+
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."
|
86 |
)
|
87 |
|
88 |
iface.launch()
|