Spaces:
Sleeping
Sleeping
Commit
·
cdf2e97
1
Parent(s):
e157030
Upload 10 files
Browse files- P1G5_Set_1_devin_lee.csv +0 -0
- app.py +46 -0
- creditbehaviour.png +0 -0
- eda.py +48 -0
- education_level.jpg +0 -0
- genderdefault.png +0 -0
- heatmap.jpg +0 -0
- model.py +64 -0
- model_svm.pkl +3 -0
- requirement.txt +5 -0
P1G5_Set_1_devin_lee.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
app.py
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Graded Challenge 5
|
3 |
+
Nama: Devin Yaung Lee
|
4 |
+
Batch: HCK-009
|
5 |
+
program ini untuk mendeploy model
|
6 |
+
"""
|
7 |
+
|
8 |
+
import streamlit as st
|
9 |
+
import eda
|
10 |
+
import model
|
11 |
+
|
12 |
+
page = st.sidebar.selectbox(label="Select Page:", options=["Home Page", "Exploratory Data Analysis", "Predict Payment"])
|
13 |
+
|
14 |
+
if page == "Home Page":
|
15 |
+
st.title("Home Page")
|
16 |
+
st.write('')
|
17 |
+
st.write("Graded Challenge 5")
|
18 |
+
st.write("Name : Devin Yaung Lee")
|
19 |
+
st.write("Batch : HCK-009")
|
20 |
+
st.write("Aplikasi ini memiliki tujuan utama dari aplikasi ini adalah untuk menampilkan hasil analisis data eksploratori dan untuk memprediksi apakah klien akan gagal membayar tagihan kartu kredit mereka pada bulan berikutnya berdasarkan data yang diberikan oleh pengguna.")
|
21 |
+
st.write('')
|
22 |
+
st.write('')
|
23 |
+
st.write('')
|
24 |
+
|
25 |
+
with st.expander("Background Information"):
|
26 |
+
st.caption("Data ini membahas tentang pembayaran kartu kredit pelanggan, dimana tujuan utama dari dashboard ini adalah untuk mengetahui apakah pelanggan melunasi atau terlambat untuk melunasi, dimana ketentuan ini akan dilakukan berdasarkan dari pengisian parameter-parameter yang sudah dilakukan.")
|
27 |
+
with st.expander("Conclusion"):
|
28 |
+
st.caption("""
|
29 |
+
- Data ini memiliki sifat data yang imbalanced, hal ini dapat dilihat
|
30 |
+
dari proses hasil train dan test, sebelum dan sesudah di hyperparameter
|
31 |
+
tuning. Model SVM memiliki peningkatan namun tidak signifikan.
|
32 |
+
- Berdasarkan visualisasi, pelanggan yang sudah bayar mendominasi.
|
33 |
+
Edukasi terbanyak adalah Universitas. Gender didominasi oleh wanita,
|
34 |
+
dan untuk status pernikahan lebih banyak yang single.
|
35 |
+
- Pemilihan model adalah SVM berdasarkan pengujian dari model
|
36 |
+
Logistic regression, KNN, dan SVM.
|
37 |
+
- Analisa credit behaviour menunjukkan 'Use Revolving Credit' paling umum.
|
38 |
+
Kebanyakan pelanggan memilih untuk membayar sebagian tagihan mereka
|
39 |
+
setiap bulan.
|
40 |
+
""")
|
41 |
+
|
42 |
+
elif page == "Exploratory Data Analysis":
|
43 |
+
eda.run() # Calls the run function from eda
|
44 |
+
|
45 |
+
else:
|
46 |
+
model.run() # Calls the run function from model
|
creditbehaviour.png
ADDED
![]() |
eda.py
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Graded Challenge 5
|
3 |
+
Nama: Fernaldy Aristo Wirjowerdojo
|
4 |
+
Batch: HCK-009
|
5 |
+
// eda.py //
|
6 |
+
This programme was created for the model deployment as the EDA interface.
|
7 |
+
"""
|
8 |
+
|
9 |
+
import streamlit as st
|
10 |
+
import pandas as pd
|
11 |
+
|
12 |
+
# Function to run in app.py
|
13 |
+
def run():
|
14 |
+
st.title("Explatoratory Data Analysis")
|
15 |
+
|
16 |
+
df = pd.read_csv("../P1G5_Set_1_devin_lee.csv")
|
17 |
+
|
18 |
+
# The first 5 data
|
19 |
+
st.header("The first 5 data entry")
|
20 |
+
st.table(df.head(5))
|
21 |
+
|
22 |
+
# The last 5 data
|
23 |
+
st.header("The last 5 data entry")
|
24 |
+
st.table(df.tail(5))
|
25 |
+
|
26 |
+
# Heatmap correlation
|
27 |
+
st.header("Correlation heatmap")
|
28 |
+
st.image("heatmap.jpg", caption="Figure 1")
|
29 |
+
with st.expander("Explanation"):
|
30 |
+
st.caption("Berdasarkan dari visualisasi heatmap ini, didapatkan bahwa nilai default memiliki sedikit korelasi terhadap pay_1 sampai pay_6. Namun jika dilihat secara keseluruhan bahwa data ini tidak saling memiliki korelasi atau sedikit sekali yang memiliki korelasi.")
|
31 |
+
|
32 |
+
# Education Level based on Default
|
33 |
+
st.header("Education Level Based on Default")
|
34 |
+
st.image("education_level.jpg", caption="Figure 2")
|
35 |
+
with st.expander("Explanation"):
|
36 |
+
st.caption("Pada proses ini dilakukan korelasi antara level edukasi dengan default. Kegunaannya adalah untuk melihat seberapa banyak yang belum bayar atau tidak menepati waktu pembayaran berdasarkan dari level edukasinya. Berdasarkan dari hasil ini didapatkan bahwa yang paling banyak adalah pada tingkat universitas.")
|
37 |
+
|
38 |
+
# Gender based on Default
|
39 |
+
st.header("Gender Based on Default")
|
40 |
+
st.image("genderdefault.png", caption="Figure 3")
|
41 |
+
with st.expander("Explanation"):
|
42 |
+
st.caption("Pada proses ini dilakukan korelasi antara gender dengan default. Kegunaannya adalah untuk melihat seberapa banyak yang belum bayar atau tidak menepati waktu pembayaran berdasarkan dari gender. Berdasarkan dari hasil ini didapatkan bahwa yang paling banyak adalah pada perempuan")
|
43 |
+
|
44 |
+
# Credit Behaviour
|
45 |
+
st.header("Credit Behaviour")
|
46 |
+
st.image("creditbehaviour.png", caption="Figure 4")
|
47 |
+
with st.expander("Explanation"):
|
48 |
+
st.caption("Berdasakarkan dari analisa credit behaviour, 'Use Revolving Credit' adalah yang paling umum. Ini menunjukkan bahwa sebagian besar pelanggan memilih untuk membayar sebagian dari total tagihan mereka setiap bulan, daripada melunasi secara penuh.")
|
education_level.jpg
ADDED
![]() |
genderdefault.png
ADDED
![]() |
heatmap.jpg
ADDED
![]() |
model.py
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pandas as pd
|
3 |
+
import pickle
|
4 |
+
|
5 |
+
|
6 |
+
def get_input_data():
|
7 |
+
gender_map = {"Male": 1, "Female": 2}
|
8 |
+
edu_map = {"Graduate School": 1, "University": 2, "High School": 3, "Others": 4}
|
9 |
+
marital_map = {"Married": 1, "Single": 2, "Others": 3}
|
10 |
+
pay_option_map = {
|
11 |
+
"-2: Unused": -2,
|
12 |
+
"-1: Pay duly": -1,
|
13 |
+
"0: Revolving credit": 0,
|
14 |
+
"1: One month late payment": 1,
|
15 |
+
"2: Two months late payment": 2,
|
16 |
+
"3: Three months late payment": 3,
|
17 |
+
"4: Four months late payment": 4,
|
18 |
+
"5: Five months late payment": 5,
|
19 |
+
"6: Six months late payment": 6,
|
20 |
+
"7: Seven months late payment": 7,
|
21 |
+
"8: Eight months late payment": 8,
|
22 |
+
"9: Nine months or above late payment": 9
|
23 |
+
}
|
24 |
+
|
25 |
+
limit_balance = st.number_input(label="Input the account's limit balance", min_value=0.0)
|
26 |
+
gender = gender_map[st.selectbox(label="Gender", options=list(gender_map.keys()))]
|
27 |
+
education = edu_map[st.selectbox(label="Education level", options=list(edu_map.keys()))]
|
28 |
+
marital = marital_map[st.selectbox(label="Marital status", options=list(marital_map.keys()))]
|
29 |
+
age = st.number_input(label="Age", min_value=18, format='%d')
|
30 |
+
|
31 |
+
pay_status, bill_amt, paid_amt = {}, {}, {}
|
32 |
+
months = ["September", "August", "July", "June", "May", "April"]
|
33 |
+
for month in months:
|
34 |
+
pay_status[month] = pay_option_map[st.selectbox(label=f"Repayment status in {month}", options=list(pay_option_map.keys()))]
|
35 |
+
bill_amt[month] = st.number_input(label=f"Bill amount in {month}")
|
36 |
+
paid_amt[month] = st.number_input(label=f"Paid amount in {month}", min_value=0.0)
|
37 |
+
|
38 |
+
return pd.DataFrame({
|
39 |
+
"limit_balance": [limit_balance],
|
40 |
+
"gender": [gender],
|
41 |
+
"education_level": [education],
|
42 |
+
"marital_status": [marital],
|
43 |
+
"age": [age],
|
44 |
+
**{f"pay_{i}": [pay_status[month]] for i, month in enumerate(months, start=1)},
|
45 |
+
**{f"bill_amt_{i}": [bill_amt[month]] for i, month in enumerate(months, start=1)},
|
46 |
+
**{f"pay_amt_{i}": [paid_amt[month]] for i, month in enumerate(months, start=1)}
|
47 |
+
})
|
48 |
+
|
49 |
+
def display_prediction(data_inf):
|
50 |
+
with open("model_svm.pkl", 'rb') as file:
|
51 |
+
model = pickle.load(file)
|
52 |
+
y_pred_inf = model.predict(data_inf)
|
53 |
+
if y_pred_inf == 0:
|
54 |
+
st.write("Not Default Payment")
|
55 |
+
else:
|
56 |
+
st.write("Default Payment")
|
57 |
+
|
58 |
+
def run():
|
59 |
+
st.title("Predict the payment type")
|
60 |
+
data_inf = get_input_data()
|
61 |
+
st.header("Table Input")
|
62 |
+
st.table(data_inf)
|
63 |
+
if st.button(label="Predict"):
|
64 |
+
display_prediction(data_inf)
|
model_svm.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9e26bbda4856906f90f0e8fcdb614a3d26f8d6d6f32f2b1320aaed1abd72bdf3
|
3 |
+
size 389728
|
requirement.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
pandas
|
2 |
+
numpy
|
3 |
+
scikit-learn
|
4 |
+
matplotlib
|
5 |
+
seaborn
|