joaomaia commited on
Commit
6bd018f
·
verified ·
1 Parent(s): 06ad1ac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -12
app.py CHANGED
@@ -2,18 +2,22 @@ import gradio as gr
2
  import joblib
3
  import numpy as np
4
 
5
- # Carregar o modelo serializado
6
- model = joblib.load("tiebreak_model.pkl")
7
 
8
  # Função para realizar a previsão
9
- def predict_tiebreak(win_odds_input, loser_odds_input):
10
  # Converter vírgulas para pontos caso necessário
11
- win_odds_input = str(win_odds_input).replace(',', '.')
12
- loser_odds_input = str(loser_odds_input).replace(',', '.')
13
 
14
  # Converter para float
15
- win_odds = float(win_odds_input)
16
- loser_odds = float(loser_odds_input)
 
 
 
 
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
- prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
 
 
 
31
 
32
  # Calculando a odds mínima
33
- odds_minima = 1 / prob
34
 
35
  # Formatando a probabilidade para percentual com duas casas decimais
36
- prob_percent = f"{round(prob * 100, 2)}%"
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 de vitória e derrota para prever a probabilidade de haver menos de 1.5 tiebreaks e calcular as odds mínimas.").launch()
 
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()