|
import gradio as gr |
|
import joblib |
|
import pandas as pd |
|
|
|
|
|
model_LayAway = joblib.load('model_class_layaway_0.pkl') |
|
model_LayHome = joblib.load('model_class_layhome_1.pkl') |
|
|
|
def converter_para_float(valor): |
|
|
|
return float(valor.replace(',', '.')) |
|
|
|
def calcular_percentual_recomendado(probabilidade, max_percent, min_percent): |
|
|
|
b = 1 |
|
p = probabilidade / 100 |
|
q = 1 - p |
|
|
|
|
|
f_star = (b * p - q) / b |
|
|
|
|
|
f_star = max(min(f_star, max_percent / 100), min_percent / 100) |
|
|
|
|
|
if f_star < min_percent / 100: |
|
f_star = min_percent / 100 |
|
|
|
|
|
percentual_recomendado = round(f_star * 100, 2) |
|
return percentual_recomendado |
|
|
|
def fazer_previsao(ODD_H, ODD_D, ODD_A, min_percent, max_percent): |
|
|
|
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 |
|
|
|
|
|
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), |
|
gr.Slider(10, 100, label="Percentual Máximo da Banca (%)", value=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() |