Spaces:
Sleeping
Sleeping
import streamlit as st | |
import numpy as np | |
import tensorflow as tf | |
from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder | |
import pandas as pd | |
import pickle | |
# Load the trained model | |
model = tf.keras.models.load_model('model.h5') | |
# Load the encoders and scaler | |
with open('label_encoder_gender.pkl', 'rb') as file: | |
label_encoder_gender = pickle.load(file) | |
with open('onehot_encoder_geo.pkl', 'rb') as file: | |
onehot_encoder_geo = pickle.load(file) | |
with open('scaler.pkl', 'rb') as file: | |
scaler = pickle.load(file) | |
## Streamlit app | |
st.title('Customer Churn Prediction') | |
# User input | |
geography = st.selectbox('Geography', onehot_encoder_geo.categories_[0]) | |
gender = st.selectbox('Gender', label_encoder_gender.classes_) | |
age = st.slider('Age', 18, 92) | |
balance = st.number_input('Balance') | |
credit_score = st.number_input('Credit Score') | |
estimated_salary = st.number_input('Estimated Salary') | |
tenure = st.slider('Tenure', 0, 10) | |
num_of_products = st.slider('Number of Products', 1, 4) | |
has_cr_card = st.selectbox('Has Credit Card', [0, 1]) | |
is_active_member = st.selectbox('Is Active Member', [0, 1]) | |
# Prepare the input data | |
input_data = pd.DataFrame({ | |
'CreditScore': [credit_score], | |
'Gender': [label_encoder_gender.transform([gender])[0]], | |
'Age': [age], | |
'Tenure': [tenure], | |
'Balance': [balance], | |
'NumOfProducts': [num_of_products], | |
'HasCrCard': [has_cr_card], | |
'IsActiveMember': [is_active_member], | |
'EstimatedSalary': [estimated_salary] | |
}) | |
# One-hot encode 'Geography' | |
geo_encoded = onehot_encoder_geo.transform([[geography]]).toarray() | |
# Manually create column names for the one-hot encoded geography | |
geo_columns = [f'Geography_{category}' for category in onehot_encoder_geo.categories_[0]] | |
geo_encoded_df = pd.DataFrame(geo_encoded, columns=geo_columns) | |
# Combine one-hot encoded columns with input data | |
input_data = pd.concat([input_data.reset_index(drop=True), geo_encoded_df], axis=1) | |
# Scale the input data | |
input_data_scaled = scaler.transform(input_data) | |
# Predict churn | |
prediction = model.predict(input_data_scaled) | |
prediction_proba = prediction[0][0] | |
# Display the prediction result | |
st.write(f'Churn Probability: {prediction_proba:.2f}') | |
if prediction_proba > 0.5: | |
st.write('The customer is likely to churn.') | |
else: | |
st.write('The customer is not likely to churn.') | |