Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,39 +1,44 @@
|
|
1 |
import gradio as gr
|
2 |
import joblib
|
3 |
import numpy as np
|
|
|
4 |
|
5 |
-
# Carregar o
|
6 |
-
model = joblib.load("
|
|
|
|
|
|
|
7 |
|
8 |
-
# Definir o
|
9 |
-
best_threshold = 0.
|
10 |
|
11 |
# Função para realizar a previsão
|
12 |
def predict_tiebreak(odds1_input, odds2_input):
|
13 |
-
# Converter
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
# Converter para float
|
18 |
-
odds1 = float(odds1_input)
|
19 |
-
odds2 = float(odds2_input)
|
20 |
|
21 |
-
#
|
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 |
-
|
28 |
sum_prob = (1 / odds_min) + (1 / odds_max)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
-
#
|
31 |
-
features = np.array([[
|
32 |
|
33 |
-
#
|
34 |
raw_prob = model.predict_proba(features)[0, 1] # Probabilidade da classe 1 (menos de 1.5 tiebreaks)
|
35 |
|
36 |
-
#
|
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
|