p2m1-ftds-018 / prediction.py
mukhlishr's picture
Update prediction.py
c2bce59
raw
history blame contribute delete
No virus
4.36 kB
import streamlit as st
import pandas as pd
import numpy as np
import tensorflow
from tensorflow.keras.models import load_model
import datetime
import pickle
# Load All Files
with open('final_pipeline.pkl', 'rb') as file_1:
model_pipeline = pickle.load(file_1)
model_ann = load_model('churn_model.h5')
# bikin fungsi
def run():
with st.form(key='churn_data'):
user_id = st.text_input('User ID', value='')
age = st.number_input('Age', min_value=10, max_value=70, value=25, help='Customer Age')
gender = st.selectbox('Gender', ('F','M'), index='M', help='M = Male F= Female')
region_category = st.selectbox('Region category', ('Town','Village','City'), index='City')
membership_category = st.selectbox('Membership', ('No Membership','Basic Membership','Silver Membership', 'Gold Membership','Platinum Membership','Premium Membership'), index='Basic Membership')
joining_date = st.date_input('Joining date',datetime.date(2019, 7, 6))
joined_through_referral = st.selectbox('Join using referral', ('Yes','No'), index='No')
preferred_offer_types = st.selectbox('preferred offer', ('Gift Vouchers/Coupons','Without Offers','Credit/Debit Card Offers'), index='Without Offers')
medium_of_operation = st.selectbox('device ', ('Desktop','Smartphone','Both'), index='Smartphone')
internet_option= st.selectbox('Internet', ('Mobile_data','Fiber_Optic','Wi-Fi'), index='Wi-Fi')
days_since_last_login = st.number_input('How many days since last login', min_value=0, max_value=30, value=5)
avg_time_spent = st.number_input('Avg time login', min_value=0, max_value=3000, value=5)
avg_transaction_value = st.number_input('Avg transaction value', min_value=0, max_value=100000, value=1000)
avg_frequency_login_days= st.number_input('Avg freq login', min_value=0, max_value=100, value=5)
points_in_wallet= st.number_input('Avg time login', min_value=0, max_value=3000, value=5)
used_special_discount = st.selectbox('Spesial discount', ('Yes','No'), index='No')
offer_application_preference = st.selectbox('app preference', ('Yes','No'), index='No')
past_complaint = st.selectbox('past complaint', ('Yes','No'), index='No')
complaint_status = st.selectbox('Complain status', ('No Information Available','Not Applicable','Solved','Solved in Follow-up','Unsolved'), index='Not Applicable')
feedback = st.selectbox('Complain status', ('User Friendly Website','Too many ads','Reasonable Price','Quality Customer Care','Products always in Stock','Poor Website','Poor Product Quality','Poor Customer Service'), index='No reason specified')
st.markdown('---')
submitted = st.form_submit_button('Predict')
data_inf = {
'user_id':user_id,
'age': age,
'gender':gender,
'region_category': region_category,
'membership_category': membership_category,
'joining_date': joining_date,
'joined_through_referral':joined_through_referral,
'preferred_offer_types': preferred_offer_types,
'medium_of_operation': medium_of_operation,
'internet_option': internet_option,
'days_since_last_login': days_since_last_login,
'avg_time_spent': avg_time_spent,
'avg_transaction_value': avg_transaction_value,
'avg_frequency_login_days': avg_frequency_login_days,
'points_in_wallet': points_in_wallet,
'used_special_discount': used_special_discount,
'offer_application_preference': offer_application_preference,
'past_complaint': past_complaint,
'complaint_status': complaint_status,
'feedback': feedback
}
data_inf = pd.DataFrame([data_inf])
# Create Binning frequency login
bins = [-1, 10, 20, 30, 40, 50, 100]
labels =[1,2,3,4,6,7]
data_inf['binned_frequency_login'] = pd.cut(data_inf['avg_frequency_login_days'], bins,labels=labels).astype(float)
st.dataframe(data_inf)
if submitted:
# transform data inference
data_inf_transform = model_pipeline.transform(data_inf)
# Predict using model ann
y_pred_inf = model_ann.predict(data_inf_transform)
y_pred_inf = np.where(y_pred_inf >= 0.5, 1, 0)
if y_pred_inf.any() == 1:
st.write('## The Customer probably will CHURN')
else:
st.write('## The Customer probably will NOT Churn')
if __name__ == '__main__':
run()