|
import gradio as gr |
|
import numpy as np |
|
import pickle |
|
import pandas as pd |
|
|
|
|
|
def load_pickle(filename): |
|
with open(filename, 'rb') as file: |
|
data = pickle.load(file) |
|
return data |
|
|
|
pkl_file=load_pickle('modelcomponent1.pkl') |
|
numeric_imputer=pkl_file['numerical_imputer'] |
|
categoric_imputer=pkl_file['categorical_imputer'] |
|
scaler_=pkl_file['scaler'] |
|
encoder_=pkl_file['encoder'] |
|
best_model = pkl_file['model'] |
|
top_pack=pkl_file['top_pack_values'] |
|
|
|
def preprocess_data(Data_Volume, On_Net,Orange, Tigo, Regularity, Freq_Top_Pack, |
|
Region, Tenure, Top_Pack): |
|
|
|
df=pd.DataFrame({ |
|
'Data_Volume':[Data_Volume], |
|
'On_Net':[On_Net], |
|
'Orange':[Orange], |
|
'Tigo' :[Tigo], |
|
'Regularity':[Regularity], |
|
'Freq_Top_Pack':[Freq_Top_Pack], |
|
'Region':[Region], |
|
'Tenure' :[Tenure], |
|
'Top_Pack':[Top_Pack] |
|
}) |
|
|
|
|
|
|
|
cat_columns = df.select_dtypes(include=['object', 'category']).columns.tolist() |
|
num_columns = df.select_dtypes(exclude=['object', 'category']).columns.tolist() |
|
|
|
|
|
|
|
|
|
|
|
cat_imputer=categoric_imputer.transform(df[cat_columns]) |
|
num_imputer=numeric_imputer.transform(df[num_columns]) |
|
|
|
|
|
|
|
cat_encode = encoder_.transform(cat_imputer) |
|
cat_encoded_df = pd.DataFrame(cat_encode.toarray(), columns=encoder_.get_feature_names_out(cat_columns)) |
|
print(num_imputer) |
|
|
|
|
|
num_scaler=scaler_.transform( num_imputer) |
|
num_scaler_df=pd.DataFrame(num_scaler, columns=num_columns) |
|
|
|
|
|
df_final = pd.concat([num_scaler_df, cat_encoded_df], axis=1) |
|
|
|
return df_final |
|
|
|
def predict_churn(Data_Volume, On_Net, Orange,Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack): |
|
|
|
preprocessed_data = preprocess_data(Data_Volume, On_Net,Orange, Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack) |
|
|
|
|
|
predictions = best_model.predict_proba(preprocessed_data) |
|
|
|
return round(predictions[0][0],2), round(predictions[0][1],2) |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown(''' |
|
# 📞Telecom Customer Churn Prediction App ☎️ ''') |
|
img=gr.Image('churncss.png') |
|
gr.Markdown(''' |
|
|
|
## Welcome Cherished User👋 |
|
|
|
### Please Predict Customer Churn 🙂''') |
|
with gr.Row(): |
|
Region = gr.Dropdown(label='Region', choices=['DAKAR', 'DIOURBEL', 'FATICK', |
|
'KAFFRINE', 'KAOLACK', 'KEDOUGOU', |
|
'KOLDA', 'LOUGA', 'MATAM', |
|
'SAINT-LOUIS', 'SEDHIOU', 'TAMBACOUNDA', 'THIES', 'ZIGUINCHOR']) |
|
Tenure = gr.Dropdown(label='Tenure', choices=['K > 24 month', 'I 18-21 month', 'H 15-18 month' , 'G 12-15 month', |
|
'J 21-24 month','F 9-12 month','E 6-9 month','D 3-6 month']) |
|
Top_Pack =gr.Dropdown(label='Top_Pack', choices=top_pack) |
|
with gr.Row(): |
|
Data_Volume= gr.Number(label='Data_Volume') |
|
On_Net=gr.Number(label='On_Net') |
|
|
|
Orange=gr.Number(label='Orange') |
|
Tigo=gr.Number(label='Tigo') |
|
Regularity=gr.Slider(label='Regularity', minimum=int(1), maximum=int(62), value=1, step=1) |
|
Freq_Top_Pack=gr.Number(label='Freq_Top_Pack') |
|
|
|
submit_button=gr.Button('Predict') |
|
|
|
with gr.Row(): |
|
with gr.Accordion('Churn Prediction'): |
|
output1=gr.Slider(maximum=1, |
|
minimum=0, |
|
value=1, |
|
label='Yes') |
|
output2=gr.Slider(maximum=1, |
|
minimum=0, |
|
value=1, |
|
label='No') |
|
|
|
|
|
|
|
submit_button.click(fn=predict_churn, inputs=[ Data_Volume, On_Net, Orange, Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack ], outputs=[output1, output2]) |
|
|
|
demo.launch() |