File size: 6,625 Bytes
5ad6ca9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#Importing the libraries
import gradio as gr
import pickle
import pandas as pd
import numpy as np
import joblib
from PIL import Image

#using joblib to load the model:
num_imputer = joblib.load('assets\\num_imputer.joblib') # loading the imputer 
cat_imputer = joblib.load('assets\\cat_imputer.joblib') # loading the imputer
encoder = joblib.load('assets\\encoder.joblib') # loading the encoder
scaler = joblib.load('assets\\scaler.joblib') # loading the scaler
model = joblib.load('assets\\ml.joblib') # loading the model


# Create a function that applies the ML pipeline and makes predictions
def predict(gender,SeniorCitizen,Partner,Dependents, tenure, PhoneService,MultipleLines,
                       InternetService,OnlineSecurity,OnlineBackup,DeviceProtection,TechSupport,StreamingTV,StreamingMovies,
                       Contract,PaperlessBilling,PaymentMethod,MonthlyCharges,TotalCharges):



    # Create a dataframe with the input data
     input_df = pd.DataFrame({
        'gender': [gender],
        'SeniorCitizen': [SeniorCitizen],
        'Partner': [Partner],
        'Dependents': [Dependents],
        'tenure': [tenure],
        'PhoneService': [PhoneService],
        'MultipleLines': [MultipleLines],
        'InternetService': [InternetService],
        'OnlineSecurity': [OnlineSecurity],
        'OnlineBackup': [OnlineBackup],
        'DeviceProtection': [DeviceProtection],
        'TechSupport': [TechSupport],
        'StreamingTV': [StreamingTV],
        'StreamingMovies': [StreamingMovies],
        'Contract': [Contract],
        'PaperlessBilling': [PaperlessBilling],
        'PaymentMethod': [PaymentMethod],
        'MonthlyCharges': [MonthlyCharges],
        'TotalCharges': [TotalCharges]

 })

# Create a list with the categorical and numerical columns
     cat_columns = [col for col in input_df.columns if input_df[col].dtype == 'object']
     num_columns = [col for col in input_df.columns if input_df[col].dtype != 'object']

    # Impute the missing values
     input_df_imputed_cat = cat_imputer.transform(input_df[cat_columns]) 
     input_df_imputed_num = num_imputer.transform(input_df[num_columns]) 

    # Encode the categorical columns
     input_encoded_df = pd.DataFrame(encoder.transform(input_df_imputed_cat).toarray(),
                                   columns=encoder.get_feature_names_out(cat_columns))

    # Scale the numerical columns
     input_df_scaled = scaler.transform(input_df_imputed_num)
     input_scaled_df = pd.DataFrame(input_df_scaled , columns = num_columns)


    #joining the cat encoded and num scaled
     final_df = pd.concat([input_encoded_df, input_scaled_df], axis=1)

     final_df = final_df.reindex(columns=['SeniorCitizen','tenure','MonthlyCharges','TotalCharges',
     'gender_Female','gender_Male','Partner_No','Partner_Yes','Dependents_No','Dependents_Yes','PhoneService_No',
     'PhoneService_Yes','MultipleLines_No','MultipleLines_Yes','InternetService_DSL','InternetService_Fiber optic',
     'InternetService_No','OnlineSecurity_No','OnlineSecurity_Yes','OnlineBackup_No','OnlineBackup_Yes','DeviceProtection_No',
     'DeviceProtection_Yes','TechSupport_No','TechSupport_Yes','StreamingTV_No','StreamingTV_Yes','StreamingMovies_No',
     'StreamingMovies_Yes','Contract_Month-to-month','Contract_One year','Contract_Two year','PaperlessBilling_No',
     'PaperlessBilling_Yes','PaymentMethod_Bank transfer (automatic)','PaymentMethod_Credit card (automatic)','PaymentMethod_Electronic check',
     'PaymentMethod_Mailed check'])

    # Make predictions using the model
     predict = model.predict(final_df)


     prediction_label = "THIS CUSTOMER WILL CHURN" if predict.item() == "Yes" else "THIS CUSTOMER WILL NOT CHURN"


     return prediction_label

     #return predictions

#define the input interface


input_interface = []

with gr.Blocks(css=".gradio-container {background-color:silver}") as app:
    title = gr.Label('VODAFONE CUSTOMER CHURN PREDICTION')
    img = gr.Image("assets\\VODA.png").style(height= 210 , width= 1250)

 
    with gr.Row():
        gr.Markdown("This application provides predictions on whether a customer will churn or remain with the Company. Please enter the customer's information below and click PREDICT to view the prediction outcome.")

    with gr.Row():
        with gr.Column(scale=3.5, min_width=500):
            input_interface = [
                gr.components.Radio(['male', 'female'], label='What is your Gender?'),
                gr.components.Number(label="Are you a Seniorcitizen? (No=0 and Yes=1), 55years and above"),
                gr.components.Radio(['Yes', 'No'], label='Do you have a Partner?'),
                gr.components.Dropdown(['No', 'Yes'], label='Do you have any Dependents?'),
                gr.components.Number(label='Length of Tenure (No. of months with Vodafone)'),
                gr.components.Radio(['No', 'Yes'], label='Do you use Phone Service?'),
                gr.components.Radio(['No', 'Yes'], label='Do you use Multiple Lines?'),
                gr.components.Radio(['DSL', 'Fiber optic', 'No'], label='Do you use Internet Service?'),
                gr.components.Radio(['No', 'Yes'], label='Do you use Online Security?'),
                gr.components.Radio(['No', 'Yes'], label='Do you use Online Backup?'),
                gr.components.Radio(['No', 'Yes'], label='Do you use Device Protection?'),
                gr.components.Radio(['No', 'Yes'], label='Do you use the Tech Support?'),
                gr.components.Radio(['No', 'Yes'], label='Do you Streaming TV?'),
                gr.components.Radio(['No', 'Yes'], label='Do you Streaming Movies?'),
                gr.components.Dropdown(['Month-to-month', 'One year', 'Two year'], label='Please what Contract Type do you Subscribe to?'),
                gr.components.Radio(['Yes', 'No'], label='Do you use Paperless Billing?'),
                gr.components.Dropdown(['Electronic check', 'Mailed check', 'Bank transfer (automatic)',
                                        'Credit card (automatic)'], label='What type of Payment Method do you use please?'),
                gr.components.Number(label="How much is you Monthly Charges?"),
                gr.components.Number(label="How much is your Total Charges?")
            ]

    with gr.Row():
        predict_btn = gr.Button('Predict') 
        
 

# Define the output interfaces
    output_interface = gr.Label(label="churn", type="label", style="font-weight: bold; font-size: larger; color: red")

    predict_btn.click(fn=predict, inputs=input_interface, outputs=output_interface)


app.launch(share=False)