| import streamlit as st |
| import pandas as pd |
| import joblib |
|
|
| model = joblib.load("src/churn_model.pkl") |
| feature_columns = joblib.load("src/feature_columns.pkl") |
|
|
| st.title("Customer Churn Prediction") |
|
|
| st.write( |
| "This application predicts whether a customer will churn or not." |
| ) |
|
|
| gender = st.selectbox( |
| "Gender", |
| ["Male", "Female"] |
| ) |
|
|
| senior = st.selectbox( |
| "Senior Citizen", |
| [0, 1] |
| ) |
|
|
| partner = st.selectbox( |
| "Partner", |
| ["Yes", "No"] |
| ) |
|
|
| dependents = st.selectbox( |
| "Dependents", |
| ["Yes", "No"] |
| ) |
|
|
| tenure = st.slider( |
| "Tenure", |
| 0, |
| 72, |
| 12 |
| ) |
|
|
| phoneservice = st.selectbox( |
| "Phone Service", |
| ["Yes", "No"] |
| ) |
|
|
| multiplelines = st.selectbox( |
| "Multiple Lines", |
| ["Yes", "No", "No phone service"] |
| ) |
|
|
| internetservice = st.selectbox( |
| "Internet Service", |
| ["DSL", "Fiber optic", "No"] |
| ) |
|
|
| onlinesecurity = st.selectbox( |
| "Online Security", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| onlinebackup = st.selectbox( |
| "Online Backup", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| deviceprotection = st.selectbox( |
| "Device Protection", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| techsupport = st.selectbox( |
| "Tech Support", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| streamingtv = st.selectbox( |
| "Streaming TV", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| streamingmovies = st.selectbox( |
| "Streaming Movies", |
| ["Yes", "No", "No internet service"] |
| ) |
|
|
| contract = st.selectbox( |
| "Contract", |
| ["Month-to-month", "One year", "Two year"] |
| ) |
|
|
| paperlessbilling = st.selectbox( |
| "Paperless Billing", |
| ["Yes", "No"] |
| ) |
|
|
| paymentmethod = st.selectbox( |
| "Payment Method", |
| [ |
| "Electronic check", |
| "Mailed check", |
| "Bank transfer (automatic)", |
| "Credit card (automatic)" |
| ] |
| ) |
|
|
| monthlycharges = st.number_input( |
| "Monthly Charges", |
| value=70.0 |
| ) |
|
|
| totalcharges = st.number_input( |
| "Total Charges", |
| value=1000.0 |
| ) |
|
|
| if st.button("Predict"): |
|
|
| input_data = pd.DataFrame({ |
| "gender": [gender], |
| "SeniorCitizen": [senior], |
| "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] |
| }) |
|
|
| input_data = pd.get_dummies(input_data) |
|
|
| input_data = input_data.reindex( |
| columns=feature_columns, |
| fill_value=0 |
| ) |
|
|
| prediction = model.predict(input_data)[0] |
|
|
| if prediction == 1: |
| st.error("Customer is likely to churn.") |
| else: |
| st.success("Customer is likely to stay.") |
|
|
|
|