import streamlit as st import pandas as pd import pickle with open("model_svm.pkl","rb") as file_1: model_svm = pickle.load(file_1) def get_education_level_index(education_level_name): if education_level_name == 'Graduate School': return 1 elif education_level_name == 'University': return 2 elif education_level_name == 'High School': return 3 else: return 4 def get_marital_status_index(marital_status_name): if marital_status_name == 'Married': return 1 elif marital_status_name == 'Single': return 2 else: return 3 def get_payment_status_index(payment_status_name): if payment_status_name == 'Pay Duly': return -1 elif payment_status_name == 'Payment delay for one month': return 1 elif payment_status_name == 'Payment delay for two month': return 2 elif payment_status_name == 'Payment delay for three month': return 3 elif payment_status_name== 'Payment delay for four month': return 4 elif payment_status_name== 'Payment delay for five month': return 5 elif payment_status_name== 'Payment delay for six month': return 6 elif payment_status_name== 'Payment delay for seven month': return 7 elif payment_status_name== 'Payment delay for eight month': return 8 elif payment_status_name== 'Payment delay for nine month': return 8 def run(): with st.form("prediction_form"): st.write('Personal Information') limit_balance = st.number_input('Input limit balance', value=10000.0) sex = st.selectbox('Gender', {'Male','Female'},index=0) education_level = st.selectbox('Education Level ', {'Graduate School','University','High School','Others'},index=0) marital_status = st.selectbox('Marital Status ', {'Married','Single','Others'},index=0) age = st.number_input('Age', value=20) st.markdown('---') st.write('Repayment Status') pay_1 = st.selectbox('RePayment Status September 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) pay_2 = st.selectbox('RePayment Status August 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) pay_3 = st.selectbox('RePayment Status July 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) pay_4 = st.selectbox('RePayment Status June 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) pay_5 = st.selectbox('RePayment Status May 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) pay_6 = st.selectbox('RePayment Status April 2005 ', {'Pay Duly','Payment delay for one month','Payment delay for two month','Payment delay for three month','Payment delay for four month','Payment delay for five month','Payment delay for six month','Payment delay for seven month','Payment delay for eight month','Payment delay for nine month'},index=0) st.markdown('---') st.write('Bill Amount') bill_amt_1 = st.number_input('Input Billing Amount September 2005 ', value=10000.0) bill_amt_2 = st.number_input('Input Billing Amount August 2005 ', value=10000.0) bill_amt_3 = st.number_input('Input Billing Amount July 2005 ', value=10000.0) bill_amt_4 = st.number_input('Input Billing Amount June 2005 ', value=10000.0) bill_amt_5 = st.number_input('Input Billing Amount May 2005 ', value=10000.0) bill_amt_6 = st.number_input('Input Billing Amount April 2005 ', value=10000.0) st.markdown('---') st.write('Amount Previous payment') pay_amt_1 = st.number_input('Amount of previous payment in September 2005 ', value=10000.0) pay_amt_2 = st.number_input('Amount of previous payment in August 2005 ', value=10000.0) pay_amt_3 = st.number_input('Amount of previous payment in July 2005 ', value=10000.0) pay_amt_4 = st.number_input('Amount of previous payment in June 2005 ', value=10000.0) pay_amt_5 = st.number_input('Amount of previous payment in May 2005 ', value=10000.0) pay_amt_6 = st.number_input('Amount of previous payment in April 2005 ', value=10000.0) submitted = st.form_submit_button("Submit") st.write("Outside the form") data_inf = { 'limit_balance': limit_balance, 'sex' : sex, 'education_level' : get_education_level_index(education_level), 'marital_status' : get_marital_status_index(marital_status), 'age' : age, 'pay_1': get_payment_status_index(pay_1), 'pay_2': get_payment_status_index(pay_2), 'pay_3': get_payment_status_index(pay_3), 'pay_4': get_payment_status_index(pay_4), 'pay_5': get_payment_status_index(pay_5), 'pay_6': get_payment_status_index(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 } if submitted: df = pd.DataFrame([data_inf]) # drop column that don't need it after feature selection and remove label df = df.drop(columns=['sex','marital_status','age','bill_amt_1','bill_amt_2','bill_amt_3','bill_amt_4','bill_amt_5','bill_amt_6'],axis=1) # convert data type df[['education_level','pay_1','pay_2','pay_3','pay_4','pay_5','pay_6']] = df[['education_level','pay_1','pay_2','pay_3','pay_4','pay_5','pay_6']].astype(object) # Do model predict from data input predict_result = model_svm.predict(df) if predict_result[0] == 1 : predic_result_value = 'yes' else: predic_result_value = 'no' st.write(f'## Default Payment Next Month: {predic_result_value}') if __name__ == '__main__': run()