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("

Telecom Customer Churn Prediction

") gr.Markdown("

Predict the probability of a customer churning based on their demographics and service usage.

") 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()