import streamlit as st import joblib import pandas as pd import os # Debug: List files in current directory to see what's available st.write("Current directory files:", os.listdir(".")) # Load model and columns from the same src folder model = joblib.load("churn_predictor_xgb.pkl") columns = joblib.load("churn_model_columns.pkl") st.set_page_config(page_title="RUCTURO", page_icon="🟣", layout="centered") # Premium futuristic CSS st.markdown(""" """, unsafe_allow_html=True) st.title("🟣 RUCTURO") st.markdown("### Premium AI-Powered Customer Churn Predictor for SaaS Tools") st.markdown("Predict churn risk instantly and get actionable retention insights.") # Input form with st.form("churn_form"): col1, col2 = st.columns(2) with col1: tenure = st.slider("Tenure (months)", 0, 72, 12) monthly = st.slider("Monthly Charges ($)", 18, 120, 70) senior = st.radio("Senior Citizen", [0, 1], format_func=lambda x: "Yes" if x else "No") contract = st.selectbox("Contract Type", ["Month-to-month", "One year", "Two year"]) internet = st.selectbox("Internet Service", ["DSL", "Fiber optic", "No"]) tech_support = st.selectbox("Tech Support", ["Yes", "No"]) with col2: online_security = st.selectbox("Online Security", ["Yes", "No"]) payment = st.selectbox("Payment Method", ["Electronic check", "Mailed check", "Bank transfer (automatic)", "Credit card (automatic)"]) paperless = st.selectbox("Paperless Billing", ["Yes", "No"]) num_services = st.slider("Number of Services (approx)", 0, 10, 5) has_internet = st.radio("Has Internet", [0, 1], format_func=lambda x: "Yes" if x else "No") submitted = st.form_submit_button("Predict Churn Risk") if submitted: data = { 'tenure': tenure, 'MonthlyCharges': monthly, 'TotalCharges': monthly * (tenure + 1), 'SeniorCitizen': senior, 'Num_Services': num_services, 'Has_Internet': has_internet, 'TotalCharges_per_Tenure': monthly, 'Charges_Increase': 0, 'Is_Month_to_Month': 1 if contract == "Month-to-month" else 0, 'Is_Fiber_Optic': 1 if internet == "Fiber optic" else 0, 'Has_No_TechSupport': 1 if tech_support == "No" else 0, 'PaperlessBilling_Yes': 1 if paperless == "Yes" else 0, } df = pd.DataFrame([data]) df = pd.get_dummies(df, columns=['Contract', 'InternetService', 'TechSupport', 'OnlineSecurity', 'PaymentMethod']) df = df.reindex(columns=columns, fill_value=0) prob = model.predict_proba(df)[0, 1] st.markdown("---") st.markdown(f"### Churn Probability: **{prob:.1%}**") if prob >= 0.4: st.markdown('

🟄 HIGH RISK – Immediate Action Needed

', unsafe_allow_html=True) st.warning("• Short tenure + month-to-month contract\n• Fiber optic service\n• No tech support\n• Electronic check payment\n**Recommendation**: Offer discount, upgrade, or dedicated support") elif prob >= 0.2: st.markdown('

🟧 Medium Risk

', unsafe_allow_html=True) st.info("Monitor closely – consider proactive engagement") else: st.markdown('

🟩 Low Risk – Strong Retention

', unsafe_allow_html=True) st.success("Excellent loyalty signals – keep up the great service!") st.markdown("---") st.markdown("Powered by XGBoost • Built for SaaS teams • Premium futuristic design • Ā© 2025")