|
import gradio as gr |
|
import pickle |
|
from gradio.themes.base import Base |
|
|
|
import pandas as pd |
|
import numpy as np |
|
from utils import create_new_columns, create_processed_dataframe |
|
def tenure_values(): |
|
cols = ['0-2', '3-5', '6-8', '9-11', '12-14', '15-17', '18-20', '21-23', '24-26', '27-29', '30-32', '33-35', '36-38', '39-41', '42-44', '45-47', '48-50', '51-53', '54-56', '57-59', '60-62', '63-65', '66-68', '69-71', '72-74'] |
|
return cols |
|
|
|
|
|
def predict_churn(gender, SeniorCitizen, Partner, Dependents, Tenure, PhoneService, MultipleLines, InternetService, |
|
OnlineSecurity, OnlineBackup, DeviceProtection,TechSupport,StreamingTV, StreamingMovies, |
|
Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges): |
|
|
|
data = [gender, SeniorCitizen, Partner, Dependents, Tenure, PhoneService, MultipleLines, InternetService, |
|
OnlineSecurity, OnlineBackup, DeviceProtection,TechSupport,StreamingTV, StreamingMovies, |
|
Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges] |
|
|
|
x = np.array([data]) |
|
dataframe = pd.DataFrame(x, columns=train_features) |
|
dataframe = dataframe.astype({'MonthlyCharges': 'float', 'TotalCharges': 'float', 'tenure': 'float'}) |
|
create_new_columns(dataframe) |
|
processed_data = pipeline.transform(dataframe) |
|
processed_dataframe = create_processed_dataframe(processed_data, dataframe) |
|
predictions = model.predict_proba(processed_dataframe) |
|
return round(predictions[0][0], 3), round(predictions[0][1], 3) |
|
|
|
|
|
theme = gr.themes.Soft( |
|
primary_hue="orange") |
|
|
|
|
|
def load_pickle(filename): |
|
with open(filename, 'rb') as file: |
|
data = pickle.load(file) |
|
return data |
|
|
|
pipeline = load_pickle('full_pipeline.pkl') |
|
model = load_pickle('logistic_reg_class_model.pkl') |
|
|
|
train_features = ['gender', 'SeniorCitizen', 'Partner', 'Dependents','tenure', 'PhoneService', 'MultipleLines', 'InternetService', |
|
'OnlineSecurity', 'OnlineBackup', 'DeviceProtection','TechSupport','StreamingTV', 'StreamingMovies', |
|
'Contract', 'PaperlessBilling', 'PaymentMethod', 'MonthlyCharges', 'TotalCharges'] |
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown( |
|
""" |
|
# Welcome Cherished User π ! |
|
## Customer Churn Classification App |
|
Start predicting customer churn. |
|
""") |
|
with gr.Row(): |
|
gender = gr.Dropdown(label='Gender', choices=['Female', 'Male']) |
|
Contract = gr.Dropdown(label='Contract', choices=['Month-to-month', 'One year', 'Two year']) |
|
InternetService = gr.Dropdown(label='Internet Service', choices=['DSL', 'Fiber optic', 'No']) |
|
|
|
with gr.Accordion('Yes or no'): |
|
|
|
with gr.Row(): |
|
OnlineSecurity = gr.Radio(label="Online Security", choices=["Yes", "No", "No internet service"]) |
|
OnlineBackup = gr.Radio(label="Online Backup", choices=["Yes", "No", "No internet service"]) |
|
DeviceProtection = gr.Radio(label="Device Protection", choices=["Yes", "No", "No internet service"]) |
|
TechSupport = gr.Radio(label="Tech Support", choices=["Yes", "No", "No internet service"]) |
|
StreamingTV = gr.Radio(label="TV Streaming", choices=["Yes", "No", "No internet service"]) |
|
StreamingMovies = gr.Radio(label="Movie Streaming", choices=["Yes", "No", "No internet service"]) |
|
with gr.Row(): |
|
SeniorCitizen = gr.Radio(label="Senior Citizen", choices=["Yes", "No"]) |
|
Partner = gr.Radio(label="Partner", choices=["Yes", "No"]) |
|
Dependents = gr.Radio(label="Dependents", choices=["Yes", "No"]) |
|
PaperlessBilling = gr.Radio(label="Paperless Billing", choices=["Yes", "No"]) |
|
PhoneService = gr.Radio(label="Phone Service", choices=["Yes", "No"]) |
|
MultipleLines = gr.Radio(label="Multiple Lines", choices=["No phone service", "Yes", "No"]) |
|
|
|
with gr.Row(): |
|
MonthlyCharges = gr.Number(label="Monthly Charges") |
|
TotalCharges = gr.Number(label="Total Charges") |
|
Tenure = gr.Number(label='Months of Tenure') |
|
PaymentMethod = gr.Dropdown(label="Payment Method", choices=["Electronic check", "Mailed check", "Bank transfer (automatic)", "Credit card (automatic)"]) |
|
|
|
submit_button = gr.Button('Prediction') |
|
print(type([[122, 456]])) |
|
|
|
with gr.Row(): |
|
with gr.Accordion('Churn Prediction'): |
|
output1 = gr.Slider(maximum=1, |
|
minimum=0, |
|
value=0.0, |
|
label='Yes') |
|
output2 = gr.Slider(maximum=1, |
|
minimum=0, |
|
value=0.0, |
|
label='No') |
|
|
|
submit_button.click(fn=predict_churn, inputs=[gender, SeniorCitizen, Partner, Dependents, Tenure, PhoneService, MultipleLines, |
|
InternetService, OnlineSecurity, OnlineBackup, DeviceProtection,TechSupport,StreamingTV, StreamingMovies, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges], outputs=[output1, output2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
demo.launch() |
|
|