Update app.py
Browse files
app.py
CHANGED
@@ -3,9 +3,12 @@ import joblib
|
|
3 |
import pandas as pd
|
4 |
import numpy as np
|
5 |
|
6 |
-
# Carregar o modelo treinado
|
7 |
-
model_path = '
|
|
|
|
|
8 |
model = joblib.load(model_path)
|
|
|
9 |
|
10 |
# Função para prever utilizando o modelo
|
11 |
def predict_tiebreak(df):
|
@@ -13,18 +16,32 @@ def predict_tiebreak(df):
|
|
13 |
odds_min = min(row['Odds 1'], row['Odds 2'])
|
14 |
odds_max = max(row['Odds 1'], row['Odds 2'])
|
15 |
odds_ratio = odds_min / odds_max
|
16 |
-
diff_log_odds = np.log(odds_max)
|
17 |
sum_prob = (1 / odds_min) + (1 / odds_max)
|
18 |
-
|
|
|
|
|
|
|
|
|
19 |
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
|
|
23 |
df['Probability'] = model.predict_proba(features)[:, 1]
|
24 |
|
25 |
-
|
|
|
26 |
df['entrada'] = df['Probability'] >= best_threshold
|
27 |
df = df[df['entrada'] == True]
|
|
|
28 |
return df
|
29 |
|
30 |
# Função para carregar o arquivo Excel e prever
|
@@ -49,4 +66,4 @@ gr.Interface(
|
|
49 |
outputs=outputs,
|
50 |
title="Previsão de Tiebreaks",
|
51 |
description="Faça o upload de um arquivo Excel contendo dados no formato final_df para prever a probabilidade de menos de 1.5 tiebreaks e verificar se deve entrar na aposta."
|
52 |
-
).launch()
|
|
|
3 |
import pandas as pd
|
4 |
import numpy as np
|
5 |
|
6 |
+
# Carregar o modelo treinado e o encoder
|
7 |
+
model_path = 'tiebreak_model_v1b.pkl'
|
8 |
+
encoder_path = 'ordinal_encoder_tiebreak_model_v1b.pkl'
|
9 |
+
|
10 |
model = joblib.load(model_path)
|
11 |
+
encoder = joblib.load(encoder_path)
|
12 |
|
13 |
# Função para prever utilizando o modelo
|
14 |
def predict_tiebreak(df):
|
|
|
16 |
odds_min = min(row['Odds 1'], row['Odds 2'])
|
17 |
odds_max = max(row['Odds 1'], row['Odds 2'])
|
18 |
odds_ratio = odds_min / odds_max
|
19 |
+
diff_log_odds = np.log(odds_max) / np.log(odds_min)
|
20 |
sum_prob = (1 / odds_min) + (1 / odds_max)
|
21 |
+
mean_log_odds = (np.log(odds_max) + np.log(odds_min)) / 2
|
22 |
+
|
23 |
+
return pd.Series([mean_log_odds, sum_prob, odds_ratio])
|
24 |
+
|
25 |
+
df[['Mean_Log_Odds', 'Sum_Prob', 'Ratio_Log_Odds']] = df.apply(calculate_features, axis=1)
|
26 |
|
27 |
+
# Aplicar o OptimalBinning e transformar os dados
|
28 |
+
bin_columns = ['Mean_Log_Odds', 'Sum_Prob']
|
29 |
+
for column in bin_columns:
|
30 |
+
optb = joblib.load(f'{column}_binning_tiebreak_model_v1b.pkl')
|
31 |
+
df[f"{column}_bin"] = optb.transform(df[column], metric="bins")
|
32 |
+
|
33 |
+
# Aplicar o encoder nas variáveis binadas
|
34 |
+
df[bin_columns] = encoder.transform(df[[f"{col}_bin" for col in bin_columns]])
|
35 |
|
36 |
+
# Selecionar as features para predição
|
37 |
+
features = df[['Mean_Log_Odds_bin', 'Sum_Prob_bin', 'Ratio_Log_Odds']]
|
38 |
df['Probability'] = model.predict_proba(features)[:, 1]
|
39 |
|
40 |
+
# Usar o threshold definido
|
41 |
+
best_threshold = 0.9400000000000005
|
42 |
df['entrada'] = df['Probability'] >= best_threshold
|
43 |
df = df[df['entrada'] == True]
|
44 |
+
|
45 |
return df
|
46 |
|
47 |
# Função para carregar o arquivo Excel e prever
|
|
|
66 |
outputs=outputs,
|
67 |
title="Previsão de Tiebreaks",
|
68 |
description="Faça o upload de um arquivo Excel contendo dados no formato final_df para prever a probabilidade de menos de 1.5 tiebreaks e verificar se deve entrar na aposta."
|
69 |
+
).launch()
|