mohamedmostafa259's picture
added the used pipeline in the repo dir to for global correct deployment
94dc782
from modules import DataCleaner, NaNImputerWrapper, FeatureEng, AdjustedProbClassifier
import gradio as gr
import joblib
import numpy as np
import pandas as pd
from xgboost import XGBClassifier
# load the ML pipeline
pipeline = joblib.load(r'full_xgb_pipeline_adjusted_prob.joblib')
feedback_options = [
'Products always in Stock', 'Quality Customer Care', 'Reasonable Price',
'User Friendly Website', 'No Reason Specified', 'Poor Website',
'Poor Customer Service', 'Poor Product Quality', 'Too many ads'
]
membership_options = [
'No Membership', 'Basic Membership', 'Silver Membership',
'Gold Membership', 'Platinum Membership', 'Premium Membership'
]
def predict(points_in_wallet, feedback, membership_category):
try:
# convert points_in_wallet to float and validate
points_in_wallet = float(points_in_wallet)
if points_in_wallet < 0:
return "Error: points_in_wallet cannot be negative."
X_df = pd.DataFrame({
'points_in_wallet': [points_in_wallet],
'feedback': [feedback],
'membership_category': [membership_category]
})
prediction = pipeline.predict(X_df)
return f"Churn Risk Score: {prediction[0]}"
except Exception as e:
return f"Prediction error: {str(e)}"
# Gradio Interface
demo = gr.Interface(
fn=predict,
inputs=[
gr.Number(label="Points in Wallet", value=0, precision=2),
gr.Dropdown(choices=feedback_options, label="Feedback Category"),
gr.Dropdown(choices=membership_options, label="Membership Category")
],
outputs=gr.Textbox(label="Prediction"),
title="Customer Churn Risk Score Predictor",
description="Enter wallet points, select feedback and membership to get a prediction."
)
if __name__ == "__main__":
demo.launch()