File size: 3,789 Bytes
39a6292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 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()