samithcs's picture
Update src/streamlit_app.py
3f01b92 verified
import streamlit as st
import joblib
import pandas as pd
import os
def load_model():
model_path = os.path.join(os.path.dirname(__file__), 'model', 'model.joblib')
model_dict = joblib.load(model_path)
return model_dict['model']
def main():
st.set_page_config(page_title="Customer Churn Prediction App",layout="wide")
st.title(" Customer Churn Prediction")
st.write("Predict whether a customer is likely to **churn or stay**, "
"based on behavioral and transaction-level features."
)
st.header("Input Customer Features")
Frequency = st.number_input("Frequency", min_value=0.0, value=10.0)
Monetary = st.number_input("Monetary", min_value=0.0, value=10000.0)
Total_Products_Purchased = st.number_input("Total Products Purchased", min_value=0, value=20)
Unique_Products_Purchased = st.number_input("Unique Products Purchased", min_value=0, value=10)
Avg_Transaction_Value = st.number_input("Average Transaction Value", min_value=0.0, value=50.0)
Customer_Tenure_Days = st.number_input("Customer Tenure (Days)", min_value=0, value=365)
Revenue_Per_Product = st.number_input("Revenue Per Product", min_value=0.0, value=25.0)
Avg_Days_Between_Purchases = st.number_input("Avg Days Between Purchases", min_value=0.0, value=15.0)
Purchase_Regularity = st.number_input("Purchase Regularity", min_value=0.0, value=0.5)
Top_Product_Concentration = st.number_input("Top Product Concentration", min_value=0.0, max_value=1.0, value=0.4)
Category_Diversity = st.number_input("Category Diversity", min_value=0.0, value=3.0)
Quarterly_Spending_Trend = st.number_input("Quarterly Spending Trend", value=0.1)
Price_Sensitivity = st.number_input("Price Sensitivity", min_value=0.0, value=0.3)
Spending_Trend = st.number_input("Spending Trend", value=0.05)
Cancellation_Rate = st.number_input("Cancellation Rate", min_value=0.0, max_value=1.0, value=0.1)
Is_UK = st.selectbox("Is UK Customer?", [0, 1])
input_data = pd.DataFrame(
[{
"Frequency": Frequency,
"Monetary": Monetary,
"Total_Products_Purchased": Total_Products_Purchased,
"Unique_Products_Purchased": Unique_Products_Purchased,
"Avg_Transaction_Value": Avg_Transaction_Value,
"Customer_Tenure_Days": Customer_Tenure_Days,
"Revenue_Per_Product": Revenue_Per_Product,
"Avg_Days_Between_Purchases": Avg_Days_Between_Purchases,
"Purchase_Regularity": Purchase_Regularity,
"Top_Product_Concentration": Top_Product_Concentration,
"Category_Diversity": Category_Diversity,
"Quarterly_Spending_Trend": Quarterly_Spending_Trend,
"Price_Sensitivity": Price_Sensitivity,
"Spending_Trend": Spending_Trend,
"Cancellation_Rate": Cancellation_Rate,
"Is_UK": Is_UK
}]
)
if st.button("Predict Churn"):
model = load_model()
prediction = model.predict(input_data)[0]
churn_label = "Churn" if prediction == 1 else "Not Churn"
st.subheader("Prediction Result")
st.success(f"**Customer Status:** {churn_label}")
if hasattr(model, "predict_proba"):
prob = model.predict_proba(input_data)[0][1]
st.info(f"Churn Probability: **{prob:.2%}**")
else:
st.info("Enter feature values and click **Predict Churn**")
if __name__ == "__main__":
main()