Ediashta/HaiMeds_Churn_Prediction
01
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 