Queensly's picture
Update app.py
b5a13b5
import gradio as gr
import pickle
from gradio.themes.base import Base
# import time
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']
# theme = gr.themes.Base()
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])
# if submit_button:
# print(predict_churn(gender, SeniorCitizen, Partner, Dependents, Tenure, PhoneService, MultipleLines, InternetService,
# OnlineSecurity, OnlineBackup, DeviceProtection,TechSupport,StreamingTV, StreamingMovies,
# Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges))
#demo = gr.Interface(fn=predict_churn, inputs=[gender, SeniorCitizen, Partner, Dependents, Tenure, PhoneService, MultipleLines,
# InternetService, OnlineSecurity, OnlineBackup, DeviceProtection,TechSupport,StreamingTV, StreamingMovies, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges], outputs=['slider', 'slider'], theme=theme)
demo.launch()