verma04ashwin/hcl_hackathon
0
1import gradio as gr2import joblib3import numpy as np4import pandas as pd5from sklearn.preprocessing import StandardScaler, LabelEncoder6 7# Load the pre-trained XGBoost model8model = joblib.load('xgboost_model.joblib')9 10# Preprocessing function11def preprocess_input(inputs):12 # Convert the inputs into a DataFrame13 input_data = pd.DataFrame([inputs], columns=['Gender', 'MaritalStatus', 'Age', 'Income', 'YearsAtCompany', 'JobLevel', 'Department'])14 15 # Encoding categorical columns16 label_encoder = LabelEncoder()17 input_data['Gender'] = label_encoder.fit_transform(input_data['Gender'])18 input_data['MaritalStatus'] = label_encoder.fit_transform(input_data['MaritalStatus'])19 input_data = pd.get_dummies(input_data, drop_first=True)20 21 # Scaling numerical features22 scaler = StandardScaler()23 input_data_scaled = scaler.fit_transform(input_data)24 25 return input_data_scaled26 27# Prediction function28def predict(input_data):29 # Preprocess input data30 processed_data = preprocess_input(input_data)31 32 # Predict using the loaded XGBoost model33 prediction = model.predict(processed_data)34 probability = model.predict_proba(processed_data)[:, 1] # Get the probability for the positive class35 36 # Convert prediction to human-readable result37 result = "Churn" if prediction == 1 else "No Churn"38 39 return result, probability[0]40 41# Define Gradio UI42inputs = [43 gr.inputs.Textbox(label="Gender (Male/Female)"),44 gr.inputs.Textbox(label="Marital Status (Single/Married)"),45 gr.inputs.Slider(minimum=18, maximum=100, default=30, label="Age"),46 gr.inputs.Slider(minimum=10000, maximum=200000, default=50000, label="Income"),47 gr.inputs.Slider(minimum=0, maximum=50, default=5, label="Years at Company"),48 gr.inputs.Slider(minimum=1, maximum=5, default=3, label="Job Level"),49 gr.inputs.Textbox(label="Department (Sales, IT, HR, etc.)")50]51 52output = [53 gr.outputs.Textbox(label="Churn Prediction"),54 gr.outputs.Textbox(label="Churn Probability")55]56 57# Launch the Gradio interface58gr.Interface(fn=predict, inputs=inputs, outputs=output, live=True, title="Customer Churn Prediction App", description="Enter customer information to predict churn status and probability").launch()59 