Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import joblib
|
3 |
+
import pandas as pd
|
4 |
+
import numpy as np
|
5 |
+
|
6 |
+
# Carregar o modelo treinado
|
7 |
+
model_path = 'tiebreak_model_v1.pkl'
|
8 |
+
model = joblib.load(model_path)
|
9 |
+
|
10 |
+
# Função para prever utilizando o modelo
|
11 |
+
def predict_tiebreak(df):
|
12 |
+
# Função para calcular as métricas
|
13 |
+
def calculate_features(row):
|
14 |
+
odds_min = min(row['Odds 1'], row['Odds 2'])
|
15 |
+
odds_max = max(row['Odds 1'], row['Odds 2'])
|
16 |
+
odds_ratio = odds_min / odds_max
|
17 |
+
diff_log_odds = np.log(odds_max) - np.log(odds_min)
|
18 |
+
sum_prob = (1 / odds_min) + (1 / odds_max)
|
19 |
+
return pd.Series([odds_ratio, diff_log_odds, sum_prob])
|
20 |
+
|
21 |
+
# Calcular as features
|
22 |
+
df[['Odds_Ratio', 'Diff_Log_Odds', 'Sum_Prob']] = df.apply(calculate_features, axis=1)
|
23 |
+
|
24 |
+
# Realizar a previsão com o modelo
|
25 |
+
features = df[['Odds_Ratio', 'Diff_Log_Odds', 'Sum_Prob']]
|
26 |
+
df['Probability'] = model.predict_proba(features)[:, 1]
|
27 |
+
|
28 |
+
# Verificar a decisão de entrar ou não na aposta com base no threshold
|
29 |
+
best_threshold = 0.9420000000000005
|
30 |
+
df['entrada'] = df['Probability'] >= best_threshold
|
31 |
+
df = df[df['entrada'] == True]
|
32 |
+
return df
|
33 |
+
|
34 |
+
# Função para carregar o arquivo Excel e prever
|
35 |
+
def predict_from_excel(file):
|
36 |
+
# Carregar o arquivo Excel em um DataFrame
|
37 |
+
df = pd.read_excel(file)
|
38 |
+
|
39 |
+
# Prever utilizando o modelo
|
40 |
+
df_predictions = predict_tiebreak(df)
|
41 |
+
|
42 |
+
# Retornar o DataFrame resultante como um arquivo Excel
|
43 |
+
output_file = "predictions.xlsx"
|
44 |
+
df_predictions.to_excel(output_file, index=False)
|
45 |
+
return output_file
|
46 |
+
|
47 |
+
# Interface Gradio
|
48 |
+
inputs = gr.inputs.File(label="Upload Excel File")
|
49 |
+
outputs = gr.outputs.File(label="Download Predictions Excel")
|
50 |
+
|
51 |
+
# Criando a interface
|
52 |
+
gr.Interface(fn=predict_from_excel,
|
53 |
+
inputs=inputs,
|
54 |
+
outputs=outputs,
|
55 |
+
title="Previsão de Tiebreaks",
|
56 |
+
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."
|
57 |
+
).launch()
|
58 |
+
|