Spaces:
Sleeping
Sleeping
File size: 2,638 Bytes
a103715 84d6071 a103715 84d6071 a103715 84d6071 576db26 a103715 6bd018f 84d6071 6bd018f 84d6071 ed4b241 84d6071 ed4b241 84d6071 a103715 84d6071 a103715 84d6071 6bd018f a103715 84d6071 ed4b241 a103715 576db26 dcbfdda ed4b241 dcbfdda 576db26 a103715 06ad1ac 576db26 a103715 576db26 |
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 |
import gradio as gr
import joblib
import numpy as np
import pandas as pd
# Carregar o modelo treinado, encoder e objetos de binning da raiz do projeto
model = joblib.load("tiebreak_model_v1b.pkl")
encoder = joblib.load("ordinal_encoder_tiebreak_model_v1b.pkl")
binning_mean_log_odds = joblib.load("Mean_Log_Odds_binning_tiebreak_model_v1b.pkl")
binning_sum_prob = joblib.load("Sum_Prob_binning_tiebreak_model_v1b.pkl")
# Definir o melhor threshold encontrado
best_threshold = 0.9400000000000005
# Função para realizar a previsão
def predict_tiebreak(odds1_input, odds2_input):
# Converter as odds para o formato float e garantir que as virgulas sejam substituídas por pontos
odds1 = float(str(odds1_input).replace(',', '.'))
odds2 = float(str(odds2_input).replace(',', '.'))
# Calcular as métricas necessárias
odds_min = min(odds1, odds2)
odds_max = max(odds1, odds2)
odds_ratio = odds_min / odds_max
mean_log_odds = (np.log(odds_max) + np.log(odds_min)) / 2
sum_prob = (1 / odds_min) + (1 / odds_max)
# Aplicar binning nas métricas
mean_log_odds_bin = binning_mean_log_odds.transform(np.array([mean_log_odds]).reshape(-1, 1), metric="bins")[0]
sum_prob_bin = binning_sum_prob.transform(np.array([sum_prob]).reshape(-1, 1), metric="bins")[0]
# Codificar as variáveis binadas
encoded_features = encoder.transform([[mean_log_odds_bin, sum_prob_bin]])
# Criar o vetor de features para o modelo
features = np.array([[encoded_features[0][0], encoded_features[0][1], odds_ratio]])
# Realizar a previsão com o modelo
raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
# Calcular a odds mínima
odds_minima = 1 / raw_prob
# Decisão de entrar ou não na aposta
enter_bet = "Sim" if raw_prob >= best_threshold else "Não"
# Formatando a probabilidade para percentual com duas casas decimais
prob_percent = f"{round(raw_prob * 100, 2)}%"
# Retornando os valores
return prob_percent, round(odds_minima, 2), enter_bet
# Interface Gradio
inputs = [gr.Number(label="Odds 1"), gr.Number(label="Odds 2")]
outputs = [gr.Textbox(label="Probabilidade de menos de 1.5 Tiebreaks"), gr.Textbox(label="Odds Mínima"), gr.Textbox(label="Entrar na Aposta?")]
# Criação da interface
gr.Interface(fn=predict_tiebreak, inputs=inputs, outputs=outputs, title="Previsão de Tiebreaks",
description="Insira as odds para prever a probabilidade de haver menos de 1.5 tiebreaks, calcular as odds mínimas, e decidir se deve entrar na aposta.").launch()
|