File size: 1,853 Bytes
1f67974
85a44a5
1f67974
 
 
 
85a44a5
1f67974
94dc782
85a44a5
1f67974
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()