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()