Spaces:
Sleeping
Sleeping
import gradio as gr | |
import joblib | |
import numpy as np | |
# Carregar o novo modelo serializado | |
model = joblib.load("tiebreak_model_v1.pkl") | |
# Função para realizar a previsão | |
def predict_tiebreak(odds1_input, odds2_input): | |
# Converter vírgulas para pontos caso necessário | |
odds1_input = str(odds1_input).replace(',', '.') | |
odds2_input = str(odds2_input).replace(',', '.') | |
# Converter para float | |
odds1 = float(odds1_input) | |
odds2 = float(odds2_input) | |
# Identificar a menor e maior odd (não precisamos assumir qual é qual) | |
odds_min = min(odds1, odds2) | |
odds_max = max(odds1, odds2) | |
# Calculando as features com base nas novas métricas | |
odds_ratio = odds_min / odds_max | |
diff_log_odds = np.log(odds_max) - np.log(odds_min) | |
sum_prob = (1 / odds_min) + (1 / odds_max) | |
# Criando o vetor de features para o modelo | |
features = np.array([[odds_ratio, diff_log_odds, sum_prob]]) | |
# Realizando a previsão com o novo modelo | |
raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks) | |
# Calculando a odds mínima | |
odds_minima = 1 / raw_prob | |
# 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) | |
# 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")] | |
# 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 e calcular as odds mínimas.").launch() | |