DefaultPrediction / prediction.py
Muhammad Fariz Firdaus
Upload 9 files
39a6292
# Import libraries
import streamlit as st
import pandas as pd
import numpy as np
import pickle
import json
# Load
with open('model_best.pkl', 'rb') as file_1:
model = pickle.load(file_1)
with open('model_encoder_ord.pkl', 'rb') as file_2:
encoder_o = pickle.load(file_2)
with open('model_scaler_skew.pkl', 'rb') as file_3:
scaler_s = pickle.load(file_3)
with open('list_num_cols_s.txt', 'r') as file_4:
num_col = json.load(file_4)
with open('list_cat_cols_o.txt', 'r') as file_5:
cat_col = json.load(file_5)
def run():
# Define the features for the options
features = ["limit_balance", "sex", "education_level", "marital_status", "age",
"pay_1", "pay_2", "pay_3", "pay_4", "pay_5", "pay_6",
"bill_amt_1", "bill_amt_2", "bill_amt_3", "bill_amt_4", "bill_amt_5", "bill_amt_6",
"pay_amt_1", "pay_amt_2", "pay_amt_3", "pay_amt_4", "pay_amt_5", "pay_amt_6"]
# Define the categorical features for the options
categorical_features = ["sex", "education_level", "marital_status", "pay_1", "pay_2", "pay_3", "pay_4", "pay_5", "pay_6"]
# Define the options for the categorical features
options = {
"sex": [1, 2],
"education_level": [1, 2, 3],
"marital_status": [1, 2],
"pay_1": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"pay_2": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"pay_3": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"pay_4": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"pay_5": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"pay_6": [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
# Displaying the options description
st.header('Options description')
st.write('1. sex: Gender (1 = male; 2 = female)')
st.write('2. education_level: Education Level (1=graduate school, 2=university, 3=high school)')
st.write('3. marital_status: Marital status (1 = married; 2 = single)')
st.write('4. age: Age (year)')
st.write('5. limit_balance: The amount of the given credit (NT dollar)')
st.write('6. pay_6 to pay_1: The repayment status in April to September 2005')
st.write('7. pay_amt_6 to pay_amt_1: The amount of previous payment in April to September 2005 (NT dollar)')
st.write('8. bill_amt_6 to bill_amt_1: The amount of bill statement in April to September 2005 (NT dollar)')
# Create a sidebar
st.sidebar.title("Prediction Options")
st.sidebar.subheader("Enter the values for the features")
# Create inputs for the features
inputs = {}
for feature in features:
if feature in categorical_features:
inputs[feature] = st.sidebar.selectbox(feature, options[feature])
else:
inputs[feature] = st.sidebar.number_input(feature, min_value=0)
# Create a button for prediction
predict = st.sidebar.button("Predict")
# Create a main title
st.title("Click the `Predict` button to start")
# Display the prediction
if predict:
# Convert the inputs into a dataframe
input_df = pd.DataFrame([inputs])
data_inf_input_num = input_df[num_col]
data_inf_input_cat = input_df[cat_col]
data_inf_input_num = scaler_s.transform(data_inf_input_num)
data_inf_input_cat = encoder_o.transform(data_inf_input_cat)
data_inf_input_final = np.concatenate([data_inf_input_num, data_inf_input_cat], axis=1)
# Make the prediction
prediction = model.predict(data_inf_input_final)[0]
# Display the result
if prediction == 0:
st.success("# The client is not likely to default on their payment next month.")
else:
st.error("# The client is likely to default on their payment next month.")
if __name__ == '__main__':
run()