devinlee14 commited on
Commit
cdf2e97
·
1 Parent(s): e157030

Upload 10 files

Browse files
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