Spaces:
Sleeping
Sleeping
| # app.py | |
| import pandas as pd | |
| import joblib | |
| import gradio as gr | |
| # Load saved objects (make sure these files are in the same directory as app.py) | |
| feature_columns = joblib.load('feature_columns.pkl') | |
| num_cols = joblib.load('num_cols.pkl') | |
| scaler = joblib.load('scaler.pkl') | |
| best_model = joblib.load('best_model.pkl') | |
| def predict_churn(SeniorCitizen, tenure, MonthlyCharges, TotalCharges, | |
| gender, Partner, Dependents, PhoneService, MultipleLines, | |
| InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, | |
| TechSupport, StreamingTV, StreamingMovies, Contract, | |
| PaperlessBilling, PaymentMethod): | |
| try: | |
| # Prepare input data as a dictionary | |
| input_data = { | |
| "SeniorCitizen": SeniorCitizen, | |
| "tenure": float(tenure), | |
| "MonthlyCharges": float(MonthlyCharges), | |
| "TotalCharges": float(TotalCharges), | |
| "gender": gender, | |
| "Partner": Partner, | |
| "Dependents": Dependents, | |
| "PhoneService": PhoneService, | |
| "MultipleLines": MultipleLines, | |
| "InternetService": InternetService, | |
| "OnlineSecurity": OnlineSecurity, | |
| "OnlineBackup": OnlineBackup, | |
| "DeviceProtection": DeviceProtection, | |
| "TechSupport": TechSupport, | |
| "StreamingTV": StreamingTV, | |
| "StreamingMovies": StreamingMovies, | |
| "Contract": Contract, | |
| "PaperlessBilling": PaperlessBilling, | |
| "PaymentMethod": PaymentMethod | |
| } | |
| # Convert to DataFrame | |
| df = pd.DataFrame([input_data]) | |
| # One-hot encode categorical variables | |
| df_encoded = pd.get_dummies(df) | |
| # Align with training features - fill missing columns with 0 | |
| df_encoded = df_encoded.reindex(columns=feature_columns, fill_value=0) | |
| # Scale numerical columns | |
| df_encoded[num_cols] = scaler.transform(df_encoded[num_cols]) | |
| # Make prediction | |
| pred = best_model.predict(df_encoded)[0] | |
| return "✅ Churn: Yes" if pred == 1 else "❎ Churn: No" | |
| except Exception as e: | |
| return f"❌ Error occurred: {str(e)}" | |
| # Define Gradio inputs | |
| inputs = [ | |
| gr.Radio([0, 1], label="SeniorCitizen"), | |
| gr.Textbox(label="tenure"), | |
| gr.Textbox(label="MonthlyCharges"), | |
| gr.Textbox(label="TotalCharges"), | |
| gr.Dropdown(["Male", "Female"], label="gender"), | |
| gr.Dropdown(["Yes", "No"], label="Partner"), | |
| gr.Dropdown(["Yes", "No"], label="Dependents"), | |
| gr.Dropdown(["Yes", "No"], label="PhoneService"), | |
| gr.Dropdown(["Yes", "No", "No phone service"], label="MultipleLines"), | |
| gr.Dropdown(["DSL", "Fiber optic", "No"], label="InternetService"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="OnlineSecurity"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="OnlineBackup"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="DeviceProtection"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="TechSupport"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="StreamingTV"), | |
| gr.Dropdown(["Yes", "No", "No internet service"], label="StreamingMovies"), | |
| gr.Dropdown(["Month-to-month", "One year", "Two year"], label="Contract"), | |
| gr.Dropdown(["Yes", "No"], label="PaperlessBilling"), | |
| gr.Dropdown(["Electronic check", "Mailed check", "Bank transfer (automatic)", "Credit card (automatic)"], label="PaymentMethod") | |
| ] | |
| # Create the Gradio interface | |
| interface = gr.Interface( | |
| fn=predict_churn, | |
| inputs=inputs, | |
| outputs="text", | |
| title="Customer Churn Predictor", | |
| description="Enter customer details to predict churn likelihood" | |
| ) | |
| if __name__ == "__main__": | |
| interface.launch(share=True) | |