CreditCardClustering / src /streamlit_app.py
handex's picture
Update src/streamlit_app.py
2d8e410 verified
Raw
History Blame Contribute Delete
2.34 kB
import streamlit as st
import pandas as pd
import joblib
MODEL_PATH = 'src/credit_card_model.joblib'
SCALER_PATH = 'src/card_scaler.joblib'
FEATURES = ['BALANCE', 'PURCHASES', 'CREDIT_LIMIT']
@st.cache_resource
def load_assets():
try:
model = joblib.load(MODEL_PATH)
scaler = joblib.load(SCALER_PATH)
return model, scaler
except Exception as e:
st.error(f"Error loading assets. Check if '{MODEL_PATH}' and '{SCALER_PATH}' are uploaded correctly. Error: {e}")
return None, None
def predict_cluster(model, scaler, input_data):
input_df = pd.DataFrame([input_data])
scaled_data = scaler.transform(input_df[FEATURES])
prediction = model.predict(scaled_data)
return prediction[0]
# --- Streamlit Interface ---
st.set_page_config(page_title="Credit Card Cluster Predictor", layout="wide")
st.title("πŸ’³ Credit Card Customer Segmentation")
st.markdown("Enter the customer's credit card usage details to predict their segment.")
model, scaler = load_assets()
if model is not None and scaler is not None:
st.sidebar.header("Input Customer Data")
balance = st.sidebar.slider("Current Balance ($):", min_value=0, max_value=20000, value=3000)
purchases = st.sidebar.slider("Total Purchases ($):", min_value=0, max_value=15000, value=1000)
credit_limit = st.sidebar.slider("Credit Limit ($):", min_value=1000, max_value=30000, value=5000)
input_data = {
'BALANCE': balance,
'PURCHASES': purchases,
'CREDIT_LIMIT': credit_limit
}
st.subheader("Customer Input Summary:")
st.dataframe(pd.DataFrame([input_data]))
if st.button("Predict Customer Segment"):
with st.spinner('Predicting...'):
cluster_id = predict_cluster(model, scaler, input_data)
# Use simple descriptions (customize based on your 4 cluster names)
cluster_descriptions = {
0: "Cluster 0",
1: "Cluster 1",
2: "Cluster 2",
3: "Cluster 3",
}
description = cluster_descriptions.get(cluster_id, f"πŸ” Cluster ID **{cluster_id}** (Undefined Segment)")
st.success("Prediction Successful!")
st.markdown(f"## Predicted Segment: {description}")