Queensly commited on
Commit
7d8510a
·
1 Parent(s): ddeb0dc

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +109 -0
app.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+ import pickle
4
+ import pandas as pd
5
+
6
+
7
+ def load_pickle(filename):
8
+ with open(filename, 'rb') as file:
9
+ data = pickle.load(file)
10
+ return data
11
+
12
+ pkl_file=load_pickle('modelcomponent1.pkl')
13
+ numeric_imputer=pkl_file['numerical_imputer']
14
+ categoric_imputer=pkl_file['categorical_imputer']
15
+ scaler_=pkl_file['scaler']
16
+ encoder_=pkl_file['encoder']
17
+ best_model = pkl_file['model']
18
+ top_pack=pkl_file['top_pack_values']
19
+
20
+ def preprocess_data(Data_Volume, On_Net,Orange, Tigo, Regularity, Freq_Top_Pack,
21
+ Region, Tenure, Top_Pack):
22
+
23
+ df=pd.DataFrame({
24
+ 'Data_Volume':[Data_Volume],
25
+ 'On_Net':[On_Net],
26
+ 'Orange':[Orange],
27
+ 'Tigo' :[Tigo],
28
+ 'Regularity':[Regularity],
29
+ 'Freq_Top_Pack':[Freq_Top_Pack],
30
+ 'Region':[Region],
31
+ 'Tenure' :[Tenure],
32
+ 'Top_Pack':[Top_Pack]
33
+ })
34
+
35
+ # Preprocess the data
36
+ # Selecting categorical and numerical columns separately
37
+ cat_columns = df.select_dtypes(include=['object', 'category']).columns.tolist()
38
+ num_columns = df.select_dtypes(exclude=['object', 'category']).columns.tolist()
39
+
40
+
41
+
42
+ # Apply the imputers on the input data
43
+
44
+ cat_imputer=categoric_imputer.transform(df[cat_columns])
45
+ num_imputer=numeric_imputer.transform(df[num_columns])
46
+
47
+
48
+ #Encode
49
+ cat_encode = encoder_.transform(cat_imputer)
50
+ cat_encoded_df = pd.DataFrame(cat_encode.toarray(), columns=encoder_.get_feature_names_out(cat_columns))
51
+ print(num_imputer)
52
+ # Scale the numerical columns
53
+
54
+ num_scaler=scaler_.transform( num_imputer)
55
+ num_scaler_df=pd.DataFrame(num_scaler, columns=num_columns)
56
+
57
+ #combined
58
+ df_final = pd.concat([num_scaler_df, cat_encoded_df], axis=1)
59
+ #print(df_final)
60
+ return df_final
61
+
62
+ def predict_churn(Data_Volume, On_Net, Orange,Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack):
63
+
64
+ preprocessed_data = preprocess_data(Data_Volume, On_Net,Orange, Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack)
65
+
66
+ # Make predictions
67
+ predictions = best_model.predict_proba(preprocessed_data)
68
+ #print(predictions)
69
+ return round(predictions[0][0],3), round(predictions[0][1],3)
70
+
71
+ with gr.Blocks() as demo:
72
+ gr.Markdown(''' # Welcome cherished user, let's predict customer churn!''')
73
+ with gr.Row():
74
+ Region = gr.Dropdown(label='Region', choices=['DAKAR', 'DIOURBEL', 'FATICK',
75
+ 'KAFFRINE', 'KAOLACK', 'KEDOUGOU',
76
+ 'KOLDA', 'LOUGA', 'MATAM',
77
+ 'SAINT-LOUIS', 'SEDHIOU', 'TAMBACOUNDA', 'THIES', 'ZIGUINCHOR'])
78
+ Tenure = gr.Dropdown(label='Tenure', choices=['K > 24 month', 'I 18-21 month', 'H 15-18 month' , 'G 12-15 month',
79
+ 'J 21-24 month','F 9-12 month','E 6-9 month','D 3-6 month'])
80
+ Top_Pack =gr.Dropdown(label='Top_Pack', choices=top_pack)
81
+ with gr.Row():
82
+ Data_Volume= gr.Number(label='Data_Volume')
83
+ On_Net=gr.Number(label='On_Net')
84
+
85
+ Orange=gr.Number(label='Orange')
86
+ Tigo=gr.Number(label='Tigo')
87
+ Regularity=gr.Slider(label='Regularity', minimum=int(1), maximum=int(62), value=1, step=1)
88
+ Freq_Top_Pack=gr.Number(label='Freq_Top_Pack')
89
+
90
+ submit_button=gr.Button('Predict')
91
+
92
+ with gr.Row():
93
+ with gr.Accordion('Churn Prediction'):
94
+ output1=gr.Slider(maximum=1,
95
+ minimum=0,
96
+ value=1,
97
+ label='Yes')
98
+ output2=gr.Slider(maximum=1,
99
+ minimum=0,
100
+ value=1,
101
+ label='No')
102
+
103
+
104
+
105
+ submit_button.click(fn=predict_churn, inputs=[ Data_Volume, On_Net, Orange, Tigo, Regularity, Freq_Top_Pack, Region, Tenure, Top_Pack ], outputs=[output1, output2])
106
+
107
+ demo.launch()
108
+
109
+