File size: 6,171 Bytes
843fde4
 
 
 
 
 
e21dc89
843fde4
 
 
 
 
 
 
 
 
 
 
 
83df634
843fde4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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()