Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -2,18 +2,22 @@ import gradio as gr
|
|
2 |
import joblib
|
3 |
import numpy as np
|
4 |
|
5 |
-
# Carregar o modelo
|
6 |
-
model = joblib.load("
|
7 |
|
8 |
# Função para realizar a previsão
|
9 |
-
def predict_tiebreak(
|
10 |
# Converter vírgulas para pontos caso necessário
|
11 |
-
|
12 |
-
|
13 |
|
14 |
# Converter para float
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
|
|
17 |
|
18 |
# Calculando as features
|
19 |
odds_ratio = win_odds / loser_odds
|
@@ -26,14 +30,17 @@ def predict_tiebreak(win_odds_input, loser_odds_input):
|
|
26 |
# Criando o vetor de features para o modelo
|
27 |
features = np.array([[odds_ratio, log_odds_w, log_odds_l, prob_w, prob_l, odds_spread]])
|
28 |
|
29 |
-
# Realizando a previsão
|
30 |
-
|
|
|
|
|
|
|
31 |
|
32 |
# Calculando a odds mínima
|
33 |
-
odds_minima = 1 /
|
34 |
|
35 |
# Formatando a probabilidade para percentual com duas casas decimais
|
36 |
-
prob_percent = f"{round(
|
37 |
|
38 |
# Retornando os valores
|
39 |
return prob_percent, round(odds_minima, 2)
|
@@ -44,4 +51,4 @@ outputs = [gr.Textbox(label="Probabilidade de menos de 1.5 Tiebreaks"), gr.Textb
|
|
44 |
|
45 |
# Criação da interface
|
46 |
gr.Interface(fn=predict_tiebreak, inputs=inputs, outputs=outputs, title="Previsão de Tiebreaks",
|
47 |
-
description="Insira as odds
|
|
|
2 |
import joblib
|
3 |
import numpy as np
|
4 |
|
5 |
+
# Carregar o modelo e o modelo de calibração serializados
|
6 |
+
model, calibration_model = joblib.load("tiebreak_calibrated_model.pkl")
|
7 |
|
8 |
# Função para realizar a previsão
|
9 |
+
def predict_tiebreak(odds1_input, odds2_input):
|
10 |
# Converter vírgulas para pontos caso necessário
|
11 |
+
odds1_input = str(odds1_input).replace(',', '.')
|
12 |
+
odds2_input = str(odds2_input).replace(',', '.')
|
13 |
|
14 |
# Converter para float
|
15 |
+
odds1 = float(odds1_input)
|
16 |
+
odds2 = float(odds2_input)
|
17 |
+
|
18 |
+
# Identificar a menor e maior odd (não precisamos assumir qual é qual)
|
19 |
+
win_odds = min(odds1, odds2)
|
20 |
+
loser_odds = max(odds1, odds2)
|
21 |
|
22 |
# Calculando as features
|
23 |
odds_ratio = win_odds / loser_odds
|
|
|
30 |
# Criando o vetor de features para o modelo
|
31 |
features = np.array([[odds_ratio, log_odds_w, log_odds_l, prob_w, prob_l, odds_spread]])
|
32 |
|
33 |
+
# Realizando a previsão com o modelo original
|
34 |
+
raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
|
35 |
+
|
36 |
+
# Calibrando a probabilidade com o modelo de calibração
|
37 |
+
calibrated_prob = calibration_model.predict_proba([[raw_prob]])[0, 1]
|
38 |
|
39 |
# Calculando a odds mínima
|
40 |
+
odds_minima = 1 / calibrated_prob
|
41 |
|
42 |
# Formatando a probabilidade para percentual com duas casas decimais
|
43 |
+
prob_percent = f"{round(calibrated_prob * 100, 2)}%"
|
44 |
|
45 |
# Retornando os valores
|
46 |
return prob_percent, round(odds_minima, 2)
|
|
|
51 |
|
52 |
# Criação da interface
|
53 |
gr.Interface(fn=predict_tiebreak, inputs=inputs, outputs=outputs, title="Previsão de Tiebreaks",
|
54 |
+
description="Insira as odds para prever a probabilidade de haver menos de 1.5 tiebreaks e calcular as odds mínimas.").launch()
|