Spaces:
Sleeping
Sleeping
| 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] | |
| }) | |
| # Preprocess the data | |
| # Selecting categorical and numerical columns separately | |
| cat_columns = df.select_dtypes(include=['object', 'category']).columns.tolist() | |
| num_columns = df.select_dtypes(exclude=['object', 'category']).columns.tolist() | |
| # Apply the imputers on the input data | |
| cat_imputer=categoric_imputer.transform(df[cat_columns]) | |
| num_imputer=numeric_imputer.transform(df[num_columns]) | |
| #Encode | |
| 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) | |
| # Scale the numerical columns | |
| num_scaler=scaler_.transform( num_imputer) | |
| num_scaler_df=pd.DataFrame(num_scaler, columns=num_columns) | |
| #combined | |
| df_final = pd.concat([num_scaler_df, cat_encoded_df], axis=1) | |
| #print(df_final) | |
| 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) | |
| # Make predictions | |
| predictions = best_model.predict_proba(preprocessed_data) | |
| #print(predictions) | |
| 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() | |