Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import numpy as np | |
| import pickle | |
| import os | |
| from huggingface_hub import hf_hub_download | |
| from sklearn.preprocessing import StandardScaler, LabelEncoder | |
| # Hugging Face repo details | |
| HF_REPO_ID = "wvsu-dti-aidev-team/customer_churn_logres_model" | |
| MODEL_FILENAME = "customer_churn_logres_model.pkl" | |
| # Download and load the trained model | |
| st.write("## Telco Customer Churn Prediction") | |
| hf_token = os.getenv("HF_TOKEN") | |
| if not hf_token: | |
| st.error("HF_TOKEN environment variable not set. Please configure it before proceeding.") | |
| else: | |
| with st.spinner("Downloading the model from Hugging Face..."): | |
| model_path = hf_hub_download(repo_id=HF_REPO_ID, filename=MODEL_FILENAME, token=hf_token) | |
| # Load the model | |
| with open(model_path, "rb") as f: | |
| model = pickle.load(f) | |
| st.success("Model loaded successfully!") | |
| # Define feature names (from dataset) | |
| feature_names = [ | |
| "gender", "SeniorCitizen", "Partner", "Dependents", "tenure", | |
| "PhoneService", "MultipleLines", "InternetService", "OnlineSecurity", | |
| "OnlineBackup", "DeviceProtection", "TechSupport", "StreamingTV", | |
| "StreamingMovies", "Contract", "PaperlessBilling", "PaymentMethod", | |
| "MonthlyCharges", "TotalCharges" | |
| ] | |
| # Define categorical features for encoding | |
| categorical_features = ["gender", "InternetService", "Contract", "PaymentMethod"] | |
| # Create input fields for each feature | |
| st.write("### Enter Customer Details") | |
| user_input = {} | |
| for feature in feature_names: | |
| if feature in categorical_features: | |
| user_input[feature] = st.selectbox(f"{feature}:", ["DSL", "Fiber optic", "No"]) | |
| elif feature in ["SeniorCitizen", "Partner", "Dependents", "PhoneService", "MultipleLines", | |
| "OnlineSecurity", "OnlineBackup", "DeviceProtection", "TechSupport", | |
| "StreamingTV", "StreamingMovies", "PaperlessBilling"]: | |
| user_input[feature] = st.radio(f"{feature}:", [0, 1]) | |
| else: | |
| user_input[feature] = st.number_input(f"{feature}:", min_value=0.0, step=0.1) | |
| # Convert input to DataFrame | |
| input_df = pd.DataFrame([user_input]) | |
| # Encode categorical features using LabelEncoder | |
| label_encoders = {} | |
| for feature in categorical_features: | |
| le = LabelEncoder() | |
| input_df[feature] = le.fit_transform(input_df[feature]) | |
| label_encoders[feature] = le | |
| # Preprocess input: Apply scaling | |
| scaler = StandardScaler() | |
| input_scaled = scaler.fit_transform(input_df) | |
| # Predict churn | |
| if st.button("Predict Customer Churn"): | |
| prediction = model.predict(input_scaled)[0] | |
| st.write("## Prediction:") | |
| if prediction == 1: | |
| st.error("⚠️ This customer is likely to churn!") | |
| else: | |
| st.success("✅ This customer is likely to stay.") | |