# Importations import pandas as pd import gradio as gr import os import pickle # Creating key List expected_inputs = ['SeniorCitizen', 'tenure', 'MonthlyCharges', 'TotalCharges', 'gender', 'Partner', 'Dependents', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling', 'PaymentMethod'] # Function to load machine learning components def load_components_func(fp): # To load the machine learning components saved to re-use in the app with open(fp, "rb") as f: object = pickle.load(f) return object # Loading the machine learning components DIRPATH = os.path.dirname(os.path.realpath(__file__)) ml_core_fp = os.path.join(DIRPATH,"ML_Model.pkl") ml_components_dict = load_components_func(fp=ml_core_fp) # Defining the variables for each component label_encoder = ml_components_dict['label_encoder'] encoder = ml_components_dict['encoder'] imputer = ml_components_dict['imputer'] scaler = ml_components_dict['scaler'] balance = ml_components_dict['imbalance'] model = ml_components_dict['model'] def predict_churn(*args, scaler=scaler, model=model, imputer=imputer, encoder=encoder): input_data = pd.DataFrame([args], columns=expected_inputs) # Encode the data num_col = input_data[['SeniorCitizen', 'tenure', 'MonthlyCharges', 'TotalCharges']] cat_col = input_data[['gender', 'Partner', 'Dependents', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling', 'PaymentMethod']] cat_col = cat_col.astype(str) encoded_data = encoder.transform(cat_col) encoded_df = pd.concat([num_col, encoded_data], axis=1) # Imputing missing values imputed_df = imputer.transform(encoded_df) # Scaling scaled_df = scaler.transform(encoded_df) # Prediction model_output = model.predict_proba(scaled_df) #Probability of Churn(Positive class) prob_Churn = float(model_output[0][1]) #Probability of staying(Negative Class) prob_Stay = 1 - prob_Churn return {"Prediction Churn": prob_Churn, "Prediction Not Churn": prob_Stay} # We define our inputs Gender = gr.Radio(choices=['Male', 'Female'], label="Gender : Gender of the customer") Partner = gr.Radio(choices=['Yes', 'No'], label="Partner : Whether the customer has a partner.") Dependents = gr.Radio(choices=['Yes', 'No'], label="Dependents : Whether the customer has dependents.") Tenure = gr.Number(label="Tenure : The Number of months the customer has been with the company.") InternetService = gr.Radio(choices=['DSL', 'Fiber optic', 'No'], label="Internet Service : Type of internet service.") PhoneService = gr.Radio(choices=['Yes', 'No'], label="Phone Service : Whether the customer has phone service.") MultipleLines = gr.Radio(choices=['Yes', 'No'], label="Multiple Lines : Whether the customer has multiple phone lines.") Contract = gr.Radio(choices=['Month-to-month', 'One year', 'Two year'], label="Contract : Type of contract the customer has.") MonthlyCharges = gr.Number(label="Monthly Charges : Amount of monthly charges.") TotalCharges = gr.Number(label="Total Charges : Total amount charged to the customer.") PaperlessBilling = gr.Radio(choices=['Yes', 'No'], label='Paperless Billing : Whether the customer uses paperless billing.') PaymentMethod = gr.Radio(choices=['Electronic check', 'Mailed check', 'Bank transfer (automatic)', 'Credit card (automatic)'], label="Payment Method : Payment method used by the customer.") OnlineSecurity = gr.Radio(choices=['Yes', 'No'], label="Online Security : Whether the customer has online security service.") OnlineBackup = gr.Radio(choices=['Yes', 'No', 'None'], label="Online Backup : Whether the customer has online backup service.") DeviceProtection = gr.Radio(choices=['Yes', 'No'], label="Device Protection : Whether the customer has device protection service.") TechSupport = gr.Radio(choices=['Yes', 'No'], label="Tech Support : Whether the customer has tech support service.") StreamingTV = gr.Radio(choices=['Yes', 'No'], label="Streaming TV : Whether the customer uses streaming TV service.") SeniorCitizen = gr.Radio(choices=[0, 1], label='Senior Citizen : Whether the customer is a senior citizen(0 for No and 1 For Yes).') StreamingMovies = gr.Radio(choices=['Yes', 'No'], label="Streaming Movies : Whether the customer uses streaming movies service.") # gr.Interface(inputs=[SeniorCitizen, Tenure, MonthlyCharges, TotalCharges, Gender, Partner, Dependents, PhoneService, MultipleLines, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, StreamingMovies, Contract, PaperlessBilling, PaymentMethod], outputs=gr.Label("Awaiting Submission...."), fn=predict_churn, title=" Teleco Services Customer Churn Prediction", description="This model predicts whether a customer will churn or stay with the telecom service based on various input features", ).launch(inbrowser=True, show_error=True)