joaomaia commited on
Commit
84d6071
·
verified ·
1 Parent(s): 576db26

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -19
app.py CHANGED
@@ -1,39 +1,44 @@
1
  import gradio as gr
2
  import joblib
3
  import numpy as np
 
4
 
5
- # Carregar o novo modelo serializado
6
- model = joblib.load("tiebreak_model_v1.pkl")
 
 
 
7
 
8
- # Definir o ponto de corte
9
- best_threshold = 0.9420000000000005
10
 
11
  # Função para realizar a previsão
12
  def predict_tiebreak(odds1_input, odds2_input):
13
- # Converter vírgulas para pontos caso necessário
14
- odds1_input = str(odds1_input).replace(',', '.')
15
- odds2_input = str(odds2_input).replace(',', '.')
16
-
17
- # Converter para float
18
- odds1 = float(odds1_input)
19
- odds2 = float(odds2_input)
20
 
21
- # Identificar a menor e maior odd (não precisamos assumir qual é qual)
22
  odds_min = min(odds1, odds2)
23
  odds_max = max(odds1, odds2)
24
-
25
- # Calculando as features com base nas novas métricas
26
  odds_ratio = odds_min / odds_max
27
- diff_log_odds = np.log(odds_max) - np.log(odds_min)
28
  sum_prob = (1 / odds_min) + (1 / odds_max)
 
 
 
 
 
 
 
29
 
30
- # Criando o vetor de features para o modelo
31
- features = np.array([[odds_ratio, diff_log_odds, sum_prob]])
32
 
33
- # Realizando a previsão com o novo modelo
34
  raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
35
 
36
- # Calculando a odds mínima
37
  odds_minima = 1 / raw_prob
38
 
39
  # Decisão de entrar ou não na aposta
 
1
  import gradio as gr
2
  import joblib
3
  import numpy as np
4
+ import pandas as pd
5
 
6
+ # Carregar o modelo treinado, encoder e objetos de binning da raiz do projeto
7
+ model = joblib.load("tiebreak_model_v1b.pkl")
8
+ encoder = joblib.load("ordinal_encoder_tiebreak_model_v1b.pkl")
9
+ binning_mean_log_odds = joblib.load("Mean_Log_Odds_binning_tiebreak_model_v1b.pkl")
10
+ binning_sum_prob = joblib.load("Sum_Prob_binning_tiebreak_model_v1b.pkl")
11
 
12
+ # Definir o melhor threshold encontrado
13
+ best_threshold = 0.9400000000000005
14
 
15
  # Função para realizar a previsão
16
  def predict_tiebreak(odds1_input, odds2_input):
17
+ # Converter as odds para o formato float e garantir que as virgulas sejam substituídas por pontos
18
+ odds1 = float(str(odds1_input).replace(',', '.'))
19
+ odds2 = float(str(odds2_input).replace(',', '.'))
 
 
 
 
20
 
21
+ # Calcular as métricas necessárias
22
  odds_min = min(odds1, odds2)
23
  odds_max = max(odds1, odds2)
 
 
24
  odds_ratio = odds_min / odds_max
25
+ mean_log_odds = (np.log(odds_max) + np.log(odds_min)) / 2
26
  sum_prob = (1 / odds_min) + (1 / odds_max)
27
+
28
+ # Aplicar binning nas métricas
29
+ mean_log_odds_bin = binning_mean_log_odds.transform(np.array([mean_log_odds]).reshape(-1, 1), metric="bins")[0]
30
+ sum_prob_bin = binning_sum_prob.transform(np.array([sum_prob]).reshape(-1, 1), metric="bins")[0]
31
+
32
+ # Codificar as variáveis binadas
33
+ encoded_features = encoder.transform([[mean_log_odds_bin, sum_prob_bin]])
34
 
35
+ # Criar o vetor de features para o modelo
36
+ features = np.array([[encoded_features[0][0], encoded_features[0][1], odds_ratio]])
37
 
38
+ # Realizar a previsão com o modelo
39
  raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
40
 
41
+ # Calcular a odds mínima
42
  odds_minima = 1 / raw_prob
43
 
44
  # Decisão de entrar ou não na aposta