|
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) |
|
|
|
|
|
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: |
|
|
|
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] |
|
|
|
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) |
|
|
|
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() |