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()