Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pickle | |
| import pandas as pd | |
| import numpy as np | |
| # load the saved model and DictVectorizer | |
| with open('dict_vectorizer.bin', 'rb') as f_in: | |
| loaded_dict_vec = pickle.load(f_in) | |
| with open('model_lr.bin', 'rb') as f_in: | |
| loaded_model = pickle.load(f_in) | |
| # Function to make predictions | |
| def predict_churn(gender, seniorcitizen, partner, dependents, phoneservice, | |
| multiplelines, internetservice, onlinesecurity, onlinebackup, | |
| deviceprotection, techsupport, streamingtv, streamingmovies, | |
| contract, paperlessbilling, paymentmethod, tenure, | |
| monthlycharges, totalcharges): | |
| customer = { | |
| 'gender': gender, | |
| 'seniorcitizen': seniorcitizen, | |
| 'partner': partner, | |
| 'dependents': dependents, | |
| 'phoneservice': phoneservice, | |
| 'multiplelines': multiplelines, | |
| 'internetservice': internetservice, | |
| 'onlinesecurity': onlinesecurity, | |
| 'onlinebackup': onlinebackup, | |
| 'deviceprotection': deviceprotection, | |
| 'techsupport': techsupport, | |
| 'streamingtv': streamingtv, | |
| 'streamingmovies': streamingmovies, | |
| 'contract': contract, | |
| 'paperlessbilling': paperlessbilling, | |
| 'paymentmethod': paymentmethod, | |
| 'tenure': tenure, | |
| 'monthlycharges': monthlycharges, | |
| 'totalcharges': totalcharges | |
| } | |
| labels = ['No Churn', 'Churn'] | |
| X = loaded_dict_vec.transform([customer]) | |
| y_pred = loaded_model.predict_proba(X)[0,:] | |
| churn_probability = y_pred | |
| return {labels[i]: float(y_pred[i]) for i in range(2)} | |
| with gr.Blocks() as demo: | |
| gr.Markdown("<h1 style='text-align: center;'>Telecom Customer Churn Prediction</h1>") | |
| gr.Markdown("<h3 style='text-align: center;'>Predict the probability of a customer churning based on their demographics and service usage.</h3>") | |
| with gr.Row(): | |
| gender = gr.components.Dropdown(['male', 'female'], value='male', label="Gender") | |
| senior_citizen = gr.components.Radio([0, 1], value=0, label="Senior Citizen") | |
| partner = gr.components.Radio(['yes', 'no'], value='yes', label="Partner") | |
| dependents = gr.components.Radio(['yes', 'no'], value='yes', label="Dependents") | |
| with gr.Row(): | |
| phone_service = gr.components.Radio(['yes', 'no'], value='yes', label="Phone Service") | |
| multiple_lines = gr.components.Dropdown(['no_phone_service', 'no', 'yes'], label="Multiple Lines") | |
| internet_service = gr.components.Dropdown(['dsl', 'fiber_optic', 'no'], label="Internet Service") | |
| online_security = gr.components.Dropdown(['no', 'yes', 'no_internet_service'], label="Online Security") | |
| online_backup = gr.components.Dropdown(['yes', 'no', 'no_internet_service'], label="Online Backup") | |
| device_protection = gr.components.Dropdown(['no', 'yes', 'no_internet_service'], label="Device Protection") | |
| tech_support = gr.components.Dropdown(['no', 'yes', 'no_internet_service'], label="Tech Support") | |
| with gr.Row(): | |
| streaming_tv = gr.Dropdown(label="Streaming TV", choices=['no', 'yes', 'no_internet_service'], value="no") | |
| streaming_movies = gr.Dropdown(label="Streaming Movies", choices=['no', 'yes', 'no_internet_service'], value="no") | |
| with gr.Row(): | |
| contract = gr.components.Dropdown(['month-to-month', 'one_year', 'two_year'], value='month-to-month', label="Contract") | |
| paperless_billing = gr.components.Radio(['yes', 'no'], value='no', label="Paperless Billing") | |
| payment_method = gr.components.Dropdown(['electronic_check', 'mailed_check', 'bank_transfer_(automatic)', 'credit_card_(automatic)'], value='electronic_check', label="Payment Method") | |
| tenure = gr.components.Number(label="Tenure (Months)", minimum=0, maximum=1000) | |
| monthly_charges = gr.components.Number(label="Monthly Charges (₹)", minimum=0, maximum=10000) | |
| total_charges = gr.components.Number(label="Total Charges (₹)", minimum=0, maximum=1000000) | |
| submit_btn = gr.Button("Submit") | |
| output_label = gr.Label(label="Churn Probability") | |
| submit_btn.click(predict_churn, inputs=[gender, senior_citizen, partner, dependents, | |
| phone_service, multiple_lines, | |
| internet_service, online_security, online_backup, device_protection, tech_support, | |
| streaming_tv, streaming_movies, contract, paperless_billing, payment_method, tenure, | |
| monthly_charges, total_charges | |
| ], outputs=output_label) | |
| demo.launch() | |