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