| | import pandas as pd |
| | import numpy as np |
| | import joblib |
| | import streamlit as st |
| |
|
| | def predict(new_customer_obj, model_pipeline): |
| | new_cust_df = pd.DataFrame([new_customer_obj]) |
| | st.dataframe(new_cust_df) |
| | st.write(new_cust_df.info()) |
| | |
| | user1_prediction = model_pipeline.predict_proba(new_cust_df)[:, 1] |
| | label = model_pipeline.predict(new_cust_df)[0] |
| | return user1_prediction, label |
| |
|
| | def run(): |
| | |
| | model_pipeline = joblib.load("./src/logistic_regression_pipeline.pkl") |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | with st.form(key="prediction_form"): |
| | limit_balance = st.number_input(label='limit balance', value=0, step=1, min_value=0) |
| | |
| | |
| | sex_options = { |
| | "Male": "1", |
| | "Female": "2" |
| | } |
| | sex_label = st.selectbox( |
| | "Sex", |
| | options=list(sex_options.keys()), |
| | index=None |
| | ) |
| | |
| | |
| | education_options = { |
| | "Graduate School": "1", |
| | "University": "2", |
| | "High School": "3", |
| | "Others": "4" |
| | } |
| | education_label = st.selectbox( |
| | "Education", |
| | options=list(education_options.keys()), |
| | index=None |
| | ) |
| | |
| | |
| | marital_options = { |
| | "Married": "1", |
| | "Single": "2", |
| | "Others": "3" |
| | } |
| | maritial_label = st.selectbox( |
| | "Martial Status", |
| | options=list(marital_options.keys()), |
| | index=None |
| | ) |
| | |
| | age = st.number_input("Age", value=1, step=1, min_value=1) |
| | |
| | st.write(" === Customer Credit Payment History === ") |
| | |
| | pay_options = { |
| | "none": "0", |
| | "pay duly": "-1", |
| | "payment delay for 1 month": "1", |
| | "payment delay for 2 month": "2", |
| | "payment delay for 3 month": "3", |
| | "payment delay for 4 month": "4", |
| | "payment delay for 5 month": "5", |
| | "payment delay for 6 month": "6", |
| | "payment delay for 7 month": "7", |
| | "payment delay for 8 month": "8", |
| | "payment delay for 9 month and above": "9" |
| | } |
| | |
| | pay_4_label = st.selectbox( |
| | "June 2005", |
| | options=list(pay_options.keys()), |
| | ) |
| | pay_3_label = st.selectbox( |
| | "July 2005", |
| | options=list(pay_options.keys()), |
| | ) |
| | pay_2_label = st.selectbox( |
| | "August 2005", |
| | options=list(pay_options.keys()), |
| | ) |
| | pay_0_label = st.selectbox( |
| | "September 2005", |
| | options=list(pay_options.keys()), |
| | ) |
| | |
| | st.write(" === Amount of Bill Statement ===") |
| | |
| | bill_amt_4 = st.number_input("June 2005", value=0, step=1, help="can be minus. ex: -123456") |
| | bill_amt_3 = st.number_input("July 2005", value=0, step=1, help="can be minus. ex: -123456") |
| | bill_amt_2 = st.number_input("August 2005", value=0, step=1, help="can be minus. ex: -123456") |
| | bill_amt_1 = st.number_input("September 2005", value=0, step=1, help="can be minus. ex: -123456") |
| | |
| | st.write(" === Amount of Previous Statement ===") |
| | |
| | pay_amt_4 = st.number_input("June 2005", step=1, min_value=0, help="minimum 0") |
| | pay_amt_3 = st.number_input("July 2005", step=1, min_value=0, help="minimum 0") |
| | pay_amt_2 = st.number_input("August 2005", step=1, min_value=0, help="minimum 0") |
| | pay_amt_1 = st.number_input("September 2005", step=1, min_value=0, help="minimum 0") |
| | |
| | submitted = st.form_submit_button('Predict') |
| | |
| | if submitted: |
| | |
| | if sex_label == None: |
| | st.error('Sex cannot be empty') |
| | st.stop() |
| | |
| | if education_label == None: |
| | st.error('Education cannot be empty') |
| | st.stop() |
| | |
| | if maritial_label == None: |
| | st.error('Marital Status cannot be empty') |
| | st.stop() |
| | |
| | sex = sex_options[sex_label] |
| | education = education_options[education_label] |
| | marital_status = marital_options[maritial_label] |
| | |
| | pay_0 = pay_options[pay_0_label] |
| | pay_2 = pay_options[pay_2_label] |
| | pay_3 = pay_options[pay_3_label] |
| | pay_4 = pay_options[pay_4_label] |
| | |
| | new_customer = { |
| | "LIMIT_BAL": limit_balance, |
| | "SEX": sex, |
| | "EDUCATION": education, |
| | "MARRIAGE": marital_status, |
| | "AGE": age, |
| | "PAY_0": pay_0, |
| | "PAY_2": pay_2, |
| | "PAY_3": pay_3, |
| | "PAY_4": pay_4, |
| | "BILL_AMT1": bill_amt_1, |
| | "BILL_AMT2": bill_amt_2, |
| | "BILL_AMT3": bill_amt_3, |
| | "BILL_AMT4": bill_amt_4, |
| | "PAY_AMT1": pay_amt_1, |
| | "PAY_AMT2": pay_amt_2, |
| | "PAY_AMT3": pay_amt_3, |
| | "PAY_AMT4": pay_amt_4 |
| | } |
| | |
| | proba_default,predict_label = predict(new_customer, model_pipeline) |
| | |
| | proba_label = "Not Default" |
| | if predict_label == 1: |
| | proba_label = "Default" |
| | |
| | st.write(f""" |
| | proba_default = {proba_default} |
| | prediction of default payment next month \n |
| | prediction probability ={(proba_default * 100)[0]:.3f}% \n |
| | prediction label = {proba_label} |
| | """) |
| | |
| |
|
| | if __name__ == '__main__': |
| | run() |