Destri2000's picture
Update
e21dc89 verified
raw
history blame contribute delete
No virus
6.17 kB
import streamlit as st
import pandas as pd
import numpy as np
import pickle
with open('svm_tun.pkl', 'rb') as model_knn:
knn_tun = pickle.load(model_knn)
with open('model_scaler.pkl', 'rb') as model_scaler:
model_scaler = pickle.load(model_scaler)
with open('model_encoder_ordinal.pkl', 'rb') as model_encoder_ordinal:
model_encoder_ordinal = pickle.load(model_encoder_ordinal)
def run():
st.title('Prediction Credit Card Customer Default Payment')
with st.form('form_ credit_card_loan'):
st.write('### Personal Customer Information')
sex = st.selectbox('Sex',('Male', 'Female'))
age = st.number_input('Age', min_value = 16, max_value = 70, value = 20)
education_level = st.selectbox('Education',('Graduate School', 'University', 'High School', 'Others', 'Unknown'))
marital_status = st.selectbox('Marital Status',('Married', 'Single', 'Unknown'))
limit_balance = st.number_input('Limit Balance', min_value = 0, max_value = 1000000, value = 50)
st.markdown('---')
st.write('### Historical Payment Status Over 6 Months')
payment_options = {
"Pay two months in advance": -2,
"Pay one month in advance": -1,
"Pay on time": 0,
"Payment overdue by 1 month": 1,
"Payment overdue by 2 months": 2,
"Payment overdue by 3 months": 3,
"Payment overdue by 4 months": 4,
"Payment overdue by 5 months": 5,
"Payment overdue by 6 months": 6,
"Payment overdue by 7 months": 7
}
selected_pay_1 = st.selectbox('##### Payment Status in 1st Month', list(payment_options.keys()), index = 2)
selected_pay_2 = st.selectbox('##### Payment Status in 2nd Month', list(payment_options.keys()), index = 2)
selected_pay_3 = st.selectbox('##### Payment Status in 3rd Month', list(payment_options.keys()), index = 2)
selected_pay_4 = st.selectbox('##### Payment Status in 4th Month', list(payment_options.keys()), index = 2)
selected_pay_5 = st.selectbox('##### Payment Status in 5th Month', list(payment_options.keys()), index = 2)
selected_pay_6 = st.selectbox('##### Payment Status in 6th Month', list(payment_options.keys()), index = 2)
pay_1 = payment_options[selected_pay_1]
pay_2 = payment_options[selected_pay_2]
pay_3 = payment_options[selected_pay_3]
pay_4 = payment_options[selected_pay_4]
pay_5 = payment_options[selected_pay_5]
pay_6 = payment_options[selected_pay_6]
st.write('### Historical Bill Records Over 6 Months')
bill_amt_1 = st.number_input('##### Amount of the Bill in 1st Month', min_value = 0, max_value = 1000000, value = 0)
bill_amt_2 = st.number_input('##### Amount of the Bill in 2nd Month', min_value = 0, max_value = 1000000, value = 0)
bill_amt_3 = st.number_input('##### Amount of the Bill in 3rd Month', min_value = 0, max_value = 1000000, value = 0)
bill_amt_4 = st.number_input('##### Amount of the Bill in 4th Month', min_value = 0, max_value = 1000000, value = 0)
bill_amt_5 = st.number_input('##### Amount of the Bill in 5th Month', min_value = 0, max_value = 1000000, value = 0)
bill_amt_6 = st.number_input('##### Amount of the Bill in 6th Month', min_value = 0, max_value = 1000000, value = 0)
st.write('### Historical Payment Records Over 6 Months')
pay_amt_1 = st.number_input('##### Amount of the Payment in 1st Month', min_value = 0, max_value = 1000000, value = 0)
pay_amt_2 = st.number_input('##### Amount of the Payment in 2nd Month', min_value = 0, max_value = 1000000, value = 0)
pay_amt_3 = st.number_input('##### Amount of the Payment in 3rd Month', min_value = 0, max_value = 1000000, value = 0)
pay_amt_4 = st.number_input('##### Amount of the Payment in 4th Month', min_value = 0, max_value = 1000000, value = 0)
pay_amt_5 = st.number_input('##### Amount of the Payment in 5th Month', min_value = 0, max_value = 1000000, value = 0)
pay_amt_6 = st.number_input('##### Amount of the Payment in 6th Month', min_value = 0, max_value = 1000000, value = 0)
#submit button
submitted = st.form_submit_button("Predict")
data_inf = {
'sex' : sex,
'age' : age,
'education_level' : education_level,
'marital_status' : marital_status,
'limit_balance' : limit_balance,
'pay_0' : pay_1,
'pay_2' : pay_2,
'pay_3' : pay_3,
'pay_4' : pay_4,
'pay_5' : pay_5,
'pay_6' : pay_6,
'bill_amt_1' : bill_amt_1,
'bill_amt_2' : bill_amt_2,
'bill_amt_3' : bill_amt_3,
'bill_amt_4' : bill_amt_4,
'bill_amt_5' : bill_amt_5,
'bill_amt_6' : bill_amt_6,
'pay_amt_1' : pay_amt_1,
'pay_amt_2' : pay_amt_2,
'pay_amt_3' : pay_amt_3,
'pay_amt_4' : pay_amt_4,
'pay_amt_5' : pay_amt_5,
'pay_amt_6' : pay_amt_6
}
data_inf = pd.DataFrame([data_inf])
if submitted:
#split between numerical and categorical columns
list_num_column = ['limit_balance', 'pay_0', 'pay_2', 'pay_3', 'pay_4',
'pay_5', 'pay_6', 'pay_amt_1', 'pay_amt_2', 'pay_amt_3', 'pay_amt_4',
'pay_amt_5', 'pay_amt_6']
list_cat_col_ordinal = ['education_level']
data_inf_num = data_inf[list_num_column]
data_inf_cat = data_inf[list_cat_col_ordinal]
#feature scaling and encoding
data_inf_num_scaled = model_scaler.transform(data_inf_num)
data_inf_cat_encoded = model_encoder_ordinal.transform(data_inf_cat)
data_inf_final = np.concatenate([data_inf_num_scaled, data_inf_cat_encoded], axis = 1)
# predict using linear reg model
y_pred_inf = knn_tun.predict(data_inf_final)
if y_pred_inf == 0:
st.write('## Prediction: The customers are predicted to encounter delayed payments next month')
else :
st.write('## Prediction: Customers are predicted to pay on time next month')
if __name__ == '__main__':
run()