|
|
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 |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
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)}" |
|
|
|
|
|
|
|
|
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() |
|
|
|