|
import pickle |
|
import streamlit as st |
|
import pandas as pd |
|
from huggingface_hub import hf_hub_download |
|
|
|
|
|
def load_scaler(): |
|
with open('scaler.pkl', 'rb') as file: |
|
scaler = pickle.load(file) |
|
return scaler |
|
|
|
|
|
def preprocess_input(user_input, scaler): |
|
user_input_df = pd.DataFrame([user_input], columns=feature_names) |
|
scaled_input = scaler.transform(user_input_df) |
|
return pd.DataFrame(scaled_input, columns=user_input_df.columns) |
|
|
|
|
|
def load_model(): |
|
model_path = hf_hub_download(repo_id="elladeandra/sports-prediction", filename="ensemble_model.pkl") |
|
with open(model_path, 'rb') as file: |
|
model = pickle.load(file) |
|
return model |
|
|
|
|
|
feature_names = ['value_eur', 'age', 'potential', 'movement_reactions', 'wage_eur'] |
|
|
|
|
|
st.title('Football Player Rating Predictor') |
|
st.markdown(""" |
|
This application predicts the rating of a football player based on their attributes using an ensemble model. |
|
The model combines Random Forest, Gradient Boosting, and XGBoost algorithms for robust predictions. |
|
""") |
|
|
|
|
|
st.sidebar.header('Input Player Attributes') |
|
def get_user_input(): |
|
value_eur = st.sidebar.number_input('Market Value (EUR)', min_value=0, max_value=int(1e9), value=int(1e6)) |
|
wage_eur = st.sidebar.number_input('Weekly Wage (EUR)', min_value=0, max_value=int(1e9), value=int(1e6)) |
|
age = st.sidebar.slider('Player Age', 16, 40, 25) |
|
potential = st.sidebar.slider('Potential Score', 1, 100, 50) |
|
movement_reactions = st.sidebar.slider('Reactions', 1, 100, 50) |
|
|
|
data = { |
|
'value_eur': value_eur, |
|
'wage_eur': wage_eur, |
|
'age': age, |
|
'potential': potential, |
|
'movement_reactions': movement_reactions |
|
} |
|
return data |
|
|
|
user_input = get_user_input() |
|
|
|
try: |
|
|
|
scaler = load_scaler() |
|
scaled_input = preprocess_input(user_input, scaler) |
|
|
|
|
|
model = load_model() |
|
predicted_rating = model.predict(scaled_input) |
|
|
|
|
|
st.subheader('Predicted Player Rating') |
|
st.write(f"Estimated Rating: {predicted_rating[0]:.1f}") |
|
|
|
|
|
if st.button('About the Prediction'): |
|
st.markdown(""" |
|
This application uses an ensemble model combining Random Forest, Gradient Boosting, and XGBoost algorithms to predict football player ratings. |
|
|
|
The model is trained on data from the FIFA video game series, which includes attributes such as age, potential, market value, and reaction times. |
|
|
|
**Note**: This is a demo project and should not be used for professional scouting or analysis purposes. |
|
""") |
|
|
|
except Exception as e: |
|
st.error(f"An error occurred: {e}") |
|
|
|
|
|
if st.sidebar.button('Reset Inputs'): |
|
st.experimental_rerun() |
|
|
|
st.sidebar.markdown(""" |
|
**Instructions**: |
|
- Adjust the player attributes using the input fields. |
|
- Click the 'Predict' button to see the estimated rating. |
|
- Use the 'About the Prediction' button for more information. |
|
""") |
|
|