CoolFace
Modelpublic

Ediashta/HaiMeds_Churn_Prediction

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes1downloads
prediction.py184 linesDownload Raw Back to root
1import streamlit as st2import pandas as pd3import numpy as np4import pickle5from tensorflow.keras.models import load_model6 7 8# load file9 10with open("./column_transformer.pkl", "rb") as file_1:11    column_transformer = pickle.load(file_1)12 13model_functional = load_model("./functional_model.keras")14 15 16def predict():17    # form18    with st.form("key=churn_prediction"):19        st.subheader("Churn Score Prediction")20 21        st.markdown("**Customer Data**")22 23        col1, col2 = st.columns(2, gap="large")24        age = col1.number_input(label="Age", help="Customer Age", step=1, value=20)25 26        membership = col2.selectbox(27            label="Membership Category",28            options=(29                "No Membership",30                "Basic Membership",31                "Premium Membership",32                "Silver Membership",33                "Gold Membership",34                "Platinum Membership",35            ),36        )37        st.markdown("---")38 39        col1, col2, col3, col4 = st.columns(4, gap="large")40        region = col1.radio(41            label="Region",42            help="Customer Residence Region",43            options=("Town", "City", "Village"),44        )45 46        referral = col2.radio(47            label="Referral", help="Joined Through Referral?", options=("Yes", "No")48        )49 50        device = col3.radio(51            label="Device(s)",52            help="Device Used",53            options=("Smartphone", "Desktop", "Both"),54        )55 56        internet = col4.radio(57            label="Internet Connection", options=("Wi-Fi", "Fiber_Optic", "Mobile_Data")58        )59 60        st.markdown("---")61 62        st.markdown("**Customer Behavior**")63        col1, col2, col3, col4, col5 = st.columns(5, gap="large")64 65        last_login = col1.number_input(66            label="Last Login", help="Days Since Last Login", step=1, value=667        )68 69        avg_time = col2.number_input(70            label="Avg. Usage Time", help="Average Usage Time (Minutes)", value=3071        )72 73        avg_login = col3.number_input(74            label="Avg. Login Frequency",75            help="Average Login Frequency (Days)",76            value=14,77        )78 79        points = col4.number_input(label="Points in Wallet", value=300)80 81        transaction = col5.number_input(label="Avg. Transaction", value=100, help="USD")82 83        st.markdown("---")84 85        col1, col2, col3 = st.columns(3, gap="large")86 87        offer_pref = col1.selectbox(88            label="Preferred Offer Type",89            options=(90                "Gift Vouchers/Coupons",91                "Credit/Debit Card Offers",92                "Without Offers",93            ),94        )95 96        used_disc = col2.radio(label="Used Discount Before?", options=("Yes", "No"))97 98        offer_app = col3.radio(99            label="Application Preference Offer?", options=("Yes", "No")100        )101 102        st.markdown("---")103        col1, col2, col3 = st.columns(3, gap="large")104 105        complaints = col1.radio(label="Past Complaint?", options=("Yes", "No"))106 107        complaints_status = col2.selectbox(108            label="Complaint Status",109            options=(110                "Not Appllicable",111                "Unsolved",112                "Solved",113                "Solved in Follow-up",114                "No Information Available",115            ),116        )117        feedback = col3.selectbox(118            label="Feedback Type", options=("Neutral", "Positive", "Negative")119        )120        submitted = st.form_submit_button("Predict")121 122    # inferencing123    data_inf = [124        {125            "age": age,126            "region_category": region,127            "membership_category": membership,128            "joined_through_referral": referral,129            "preferred_offer_types": offer_pref,130            "medium_of_operation": device,131            "internet_option": internet,132            "days_since_last_login": last_login,133            "avg_time_spent": avg_time,134            "avg_transaction_value": transaction,135            "avg_frequency_login_days": avg_login,136            "points_in_wallet": points,137            "used_special_discount": used_disc,138            "offer_application_preference": offer_app,139            "past_complaint": complaints,140            "complaint_status": complaints_status,141            "feedback": feedback,142        }143    ]144 145    data_inf = pd.DataFrame(data_inf)146 147    st.dataframe(data_inf)148 149    data_inf_transform = column_transformer.transform(data_inf)150    y_pred_inf = model_functional.predict(data_inf_transform)151    y_pred_inf = np.where(y_pred_inf >= 0.65, 1, 0)152 153    st.write("Prediksi Churn Pelanggan Tersebut adalah :")154    if y_pred_inf[0] == 1:155        html_str = f"""156                    <style>157                    p.a {{158                    font: bold 36px Arial;159                    color: teal;160                    }}161                    </style>162                    <p class="a">Pelanggan Tidak Berpotensi Churn</p>163                    """164        st.markdown(html_str, unsafe_allow_html=True)165        st.write(166            "Dapat menekankan program loyalty agar pelanggan tetap menggunakan layanan"167        )168    else:169        html_str = f"""170                    <style>171                    p.a {{172                    font: bold 36px Arial;173                    color: red;174                    }}175                    </style>176                    <p class="a">Pelanggan Berpotensi Churn</p>177                    """178        st.markdown(html_str, unsafe_allow_html=True)179        st.write("Dapat diberikan promosi untuk menarik pelanggan kembali")180 181 182if __name__ == "__main__":183    predict()184