Spaces:
Runtime error
Runtime error
File size: 6,709 Bytes
673f4ca fc524a4 ce08d4c fc524a4 ce08d4c fc524a4 8e8fa12 fc524a4 8e8fa12 ce08d4c 673f4ca 8e8fa12 ce08d4c fc524a4 |
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 139 140 141 142 143 144 |
import pandas as pd
from transformers import pipeline
import streamlit as st
import datetime
from huggingface_hub import hf_hub_download
import joblib
REPO_ID = "AlbieCofie/predict-customer-churn"
num_imputer = joblib.load(
hf_hub_download(repo_id=REPO_ID, filename="numerical_imputer.joblib")
)
cat_imputer = joblib.load(
hf_hub_download(repo_id=REPO_ID, filename="categorical_imputer.joblib")
)
encoder = joblib.load(
hf_hub_download(repo_id=REPO_ID, filename="encoder.joblib")
)
scaler = joblib.load(
hf_hub_download(repo_id=REPO_ID, filename="scaler.joblib")
)
model = joblib.load(
hf_hub_download(repo_id=REPO_ID, filename="Final_model.joblib")
)
# 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]
})
# Selecting categorical and numerical columns separately
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']
# Apply the imputers on the input data
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
predictions = model.predict(final_df)[0]
#prediction = model.predict(final_df)[0]
# Make predictions using the model
#predictions = model.predict(final_df)
# Convert the numpy array to an integer
#prediction_label = int(predictions.item())
prediction_label = "Beware!!! This customer is likely to Churn" if predictions.item() == "Yes" else "This customer is Not likely churn"
return prediction_label
#return predictions
if 'clicked' not in st.session_state:
st.session_state.clicked = False
def click_button():
st.session_state.clicked = True
st.title("CUSTOMER CHURN PREDICTION APP")
with st.form(key="customer-information"):
st.markdown("This app predicts whether a customer will leave your company or not. Enter the details of the customer below to see the result")
gender = st.radio('Select your gender', ('male', 'female'))
SeniorCitizen = st.radio("Are you a Seniorcitizen; No=0 and Yes=1", ('0', '1'))
Partner = st.radio('Do you have Partner', ('Yes', 'No'))
Dependents = st.selectbox('Do you have any Dependents?', ('No', 'Yes'))
tenure = st.number_input('Lenght of tenure (no. of months with Telco)', min_value=0, max_value=90, value=1, step=1)
PhoneService = st.radio('Do you have PhoneService? ', ('No', 'Yes'))
MultipleLines = st.radio('Do you have MultipleLines', ('No', 'Yes'))
InternetService = st.radio('Do you have InternetService', ('DSL', 'Fiber optic', 'No'))
OnlineSecurity = st.radio('Do you have OnlineSecurity?', ('No', 'Yes'))
OnlineBackup = st.radio('Do you have OnlineBackup?', ('No', 'Yes'))
DeviceProtection = st.radio('Do you have DeviceProtection?', ('No', 'Yes'))
TechSupport = st.radio('Do you have TechSupport?', ('No', 'Yes'))
StreamingTV = st.radio('Do you have StreamingTV?', ('No', 'Yes'))
StreamingMovies = st.radio('Do you have StreamingMovies?', ('No', 'Yes'))
Contract = st.selectbox('which Contract do you use?', ('Month-to-month', 'One year', 'Two year'))
PaperlessBilling = st.radio('Do you prefer PaperlessBilling?', ('Yes', 'No'))
PaymentMethod = st.selectbox('Which PaymentMethod do you prefer?', ('Electronic check', 'Mailed check', 'Bank transfer (automatic)',
'Credit card (automatic)'))
MonthlyCharges = st.number_input("Enter monthly charges (the range should between 0-120)")
TotalCharges = st.number_input("Enter total charges (the range should between 0-10.000)")
st.form_submit_button('Predict', on_click=click_button)
if st.session_state.clicked:
# The message and nested widget will remain on the page
predict(gender,SeniorCitizen,Partner,Dependents, tenure, PhoneService,MultipleLines,
InternetService,OnlineSecurity,OnlineBackup,DeviceProtection,TechSupport,StreamingTV,StreamingMovies,
Contract,PaperlessBilling,PaymentMethod,MonthlyCharges,TotalCharges) |