elladeandra's picture
Upload 3 files
e6f9083 verified
import pickle
import streamlit as st
import pandas as pd
from huggingface_hub import hf_hub_download
# Function to load the scaler
def load_scaler():
with open('scaler.pkl', 'rb') as file:
scaler = pickle.load(file)
return scaler
# Function to preprocess user input
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)
# Function to load the model
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
# Define feature names
feature_names = ['value_eur', 'age', 'potential', 'movement_reactions', 'wage_eur']
# Streamlit app title and description
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.
""")
# Sidebar for user input
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:
# Load scaler and preprocess input
scaler = load_scaler()
scaled_input = preprocess_input(user_input, scaler)
# Load model and predict
model = load_model()
predicted_rating = model.predict(scaled_input)
# Display prediction
st.subheader('Predicted Player Rating')
st.write(f"Estimated Rating: {predicted_rating[0]:.1f}")
# Explanation section
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}")
# Additional features for better user experience
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.
""")