churn_rate_test / prediction.py
dhikri's picture
Upload 7 files
8a6973e verified
import streamlit as st
import pandas as pd
import numpy as np
import pickle
from tensorflow.keras.models import load_model
def run() :
# Load Model
with open('preprocessor_churn.pkl', 'rb') as file_1:
preprocessor = pickle.load(file_1)
model_churn = load_model('churn_best_model.h5', compile=False)
# Membuat Title
st.markdown("<h1 style='text-align: center;'>Churn Customer Prediction</h1>", unsafe_allow_html=True)
# Menambahkan Deskripsi form
st.write('Page ini berisi pemodelan untuk memprediksi churn customer. Silakan masukkan data Anda pada form dibawah ini.')
#Membuat Form
with st.form(key= 'form_customer'):
st.markdown('### **Data Customer**')
user_id = st.text_input('User ID',value= '')
gender = st.selectbox('Gender',('M','F'),index=1)
age = st.slider('Age',10,90,30)
region_category = st.radio('Region', options=['City','Village','Town'], horizontal=True)
internet_option = st.selectbox('Internet Option',('Wi-Fi','Fiber_Optic', 'Mobile_Data'),index=1)
medium_of_operation = st.radio('Medium', options=['Desktop','Smartphone','Both'], horizontal=True)
st.markdown('---')
st.markdown('### **Login Data**')
days_since_last_login = st.slider('Days Since Last Login',0,30,3)
avg_frequency_login_days = st.slider('Avg Frequency Login Days',0,90,14)
st.markdown('---')
st.markdown('### **Membership Data**')
joined_through_referral = st.selectbox('Referral',('Yes','No'),index=1)
membership_category = st.selectbox('Membership Category',('No Membership','Basic Membership','Silver Membership', 'Premium Membership', 'Gold Membership', 'Platinum Membership'),index=1)
st.markdown('---')
st.markdown('### **Transaction Data**')
points_in_wallet = st.number_input('Points in Wallet', min_value=0, max_value=2070, value=600 ,step=1)
avg_transaction_value = st.number_input('Avg Transaction Value', min_value=800, max_value=90000, value=30000 ,step=1)
preferred_offer_types = st.radio('Offer Types', options=['Without Offers','Credit/Debit Card Offers','Gift Vouchers/Coupons'], horizontal=True)
used_special_discount = st.selectbox('Used Special Discount',('Yes','No'),index=1)
past_complaint = st.selectbox('Past Complaint',('Yes','No'),index=1)
feedback = st.selectbox('Feedback',('Poor Website','Poor Customer Service', 'Too many ads', 'Poor Product Quality', 'No reason specified', 'Products always in Stock', 'Reasonable Price', 'Quality Customer Care', 'User Friendly Website'),index=1)
submitted = st.form_submit_button('Predict')
# Create New Data
data_inf = {
'user_id' : user_id,
'age' : age,
'gender' : gender,
'region_category' : region_category,
'internet_option' : internet_option,
'medium_of_operation' : medium_of_operation,
'days_since_last_login' : days_since_last_login,
'avg_frequency_login_days' : avg_frequency_login_days,
'joined_through_referral' : joined_through_referral,
'membership_category' : membership_category,
'points_in_wallet' : points_in_wallet,
'avg_transaction_value' : avg_transaction_value,
'used_special_discount' : used_special_discount,
'past_complaint' : past_complaint,
'preferred_offer_types' : preferred_offer_types,
'feedback' : feedback
}
data_inf = pd.DataFrame([data_inf])
data_inf
if submitted :
# Feature Scaling and Feature Encoding
data_final = preprocessor.transform(data_inf)
# Predict using Linear Regression
y_inf_pred = np.where(model_churn.predict(data_final) >= 0.5, 1, 0)
if y_inf_pred == 1:
prediction = 'Churn'
else:
prediction = 'Not Churn'
st.write('##### This customer is predicted:', prediction)
if __name__ == '__main__':
run()