Upload 10 files
Browse files- P1G5_Set_1_Syihabuddin_Ahmad.csv +0 -0
- app.py +41 -0
- defpaypers.png +0 -0
- eda.py +68 -0
- graph3.png +0 -0
- graph4.png +0 -0
- heatmap.png +0 -0
- model.pkl +3 -0
- models.py +59 -0
- requirements.txt +7 -0
P1G5_Set_1_Syihabuddin_Ahmad.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
app.py
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import eda
|
3 |
+
import models
|
4 |
+
|
5 |
+
|
6 |
+
page = st.sidebar.selectbox(label='Select Page:', options=['Home Page', 'Exploration Data Analysis', 'Model Prediksi'])
|
7 |
+
|
8 |
+
if page == 'Home Page':
|
9 |
+
st.header('Welcome Page')
|
10 |
+
st.write('')
|
11 |
+
st.write('Credit Card Default Next Month Payment Prediction')
|
12 |
+
st.write('Nama : Syihabuddin Ahmad Satisma')
|
13 |
+
st.write('Batch : HCK-017')
|
14 |
+
st.write('Tujuan : Memprediksi seorang klien apakah akan gagal bayar atau tidak')
|
15 |
+
st.write('')
|
16 |
+
st.caption('Silahkan pilih menu lain di Select Box pada sebelah kiri layar anda untuk memulai!')
|
17 |
+
st.write('')
|
18 |
+
st.write('')
|
19 |
+
with st.expander("Latar Belakang"):
|
20 |
+
st.caption('Sebuah perusahaan pemberi jasa kartu kredit\
|
21 |
+
ingin mengurangi resiko seorang klien yang\
|
22 |
+
kemungkinan gagal bayar. Karena dengan\
|
23 |
+
gagalnya seorang klien membayar angsuran kartu\
|
24 |
+
kredit tentu akan mempengaruhi kesehatan dari\
|
25 |
+
keuangan sebuah perusahaan tersebut.')
|
26 |
+
|
27 |
+
with st.expander("Problem Statement"):
|
28 |
+
st.caption('Keuangan suatu perusahaan penyedia jasa\
|
29 |
+
layanan kartu kredit terdampak signifikan\
|
30 |
+
dari gagalnya klien dalam mengangsur pembayaran.\
|
31 |
+
Maka dari itu perusahaan ingin mengetahui\
|
32 |
+
kemungkinan apakah bulan depan seorang klien akan\
|
33 |
+
gagal bayar atau tidak jika dilihat dengan pattern dan data.')
|
34 |
+
|
35 |
+
with st.expander("Kesimpulan"):
|
36 |
+
st.caption('Berdasarkan problem statement di atas saya berencana untuk membuat model\
|
37 |
+
yang dapat mengklasifikasikan seseorang akan membayar atau tidak dengan menggunakan metode SVM.')
|
38 |
+
elif page == 'Exploration Data Analysis':
|
39 |
+
eda.run()
|
40 |
+
else:
|
41 |
+
models .run()
|
defpaypers.png
ADDED
eda.py
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pandas as pd
|
3 |
+
from PIL import Image
|
4 |
+
|
5 |
+
#membuat function untuk nantinya dipanggil di app.py
|
6 |
+
def run():
|
7 |
+
st.title('Welcome to Exploration Data Analysis')
|
8 |
+
#Memanggil data csv
|
9 |
+
df= pd.read_csv('P1G5_Set_1_Syihabuddin_Ahmad.csv')
|
10 |
+
|
11 |
+
#menampilakn 5 data teratas
|
12 |
+
st.table(df.head(5))
|
13 |
+
|
14 |
+
#menampilakn heatmap
|
15 |
+
st.title('Heatmap Correlation')
|
16 |
+
image = Image.open('heatmap.png')
|
17 |
+
st.image(image, caption='Numeric column to default pay')
|
18 |
+
|
19 |
+
#menampilkan penjelasan
|
20 |
+
with st.expander('Explanation'):
|
21 |
+
st.caption('Pengecekan korelasi antara kolom numerik\
|
22 |
+
dengan angka, dapat diketahui bahwa kolom\
|
23 |
+
numerik yang berkorelasi dengan default_pay\
|
24 |
+
yaitu: limit_balance, pay_amt_1, pay_amt_2,\
|
25 |
+
pay_amt_3, pay_amt_4 dan pay_amt_6')
|
26 |
+
|
27 |
+
#menampilakn barplot
|
28 |
+
st.title('Barplot Default Pay Distribution')
|
29 |
+
image = Image.open('defpaypers.png')
|
30 |
+
st.image(image, caption='Data Distribution')
|
31 |
+
|
32 |
+
#menampilkan penjelasan
|
33 |
+
with st.expander('Explanation'):
|
34 |
+
st.caption('Pengecekan distribusi data dari kolom default_payment_next_month\
|
35 |
+
dapat diketahui bahwa datanya adalah imbalance karena perbedaannya\
|
36 |
+
sangat signifikan antara kategori No dengan kategori Yes dengan\
|
37 |
+
total 78.58% dibandingkan dengan 21.42%. Dari data tersebut dapat\
|
38 |
+
ditarik kesimpulan bahwa hanya sedikit orang yang gagal bayar yaitu\
|
39 |
+
sebanyak 21.42%')
|
40 |
+
|
41 |
+
#menampilakn barplot
|
42 |
+
st.title('Default Pay Education Level')
|
43 |
+
image = Image.open('graph3.png')
|
44 |
+
st.image(image, caption='Education Level Default Payment')
|
45 |
+
|
46 |
+
#menampilkan penjelasan
|
47 |
+
with st.expander('Explanation'):
|
48 |
+
st.caption('Grafik di atas menunjukan grafik dari default pay dengan kategori\
|
49 |
+
education level. Dapat diambil kesimpulan bahwa data yang tidak\
|
50 |
+
gagal bayar ataupun yang gagal bayar tertingginya adalah di kategori\
|
51 |
+
University. Pada kategori University ini, terjadi lebih banyak gagal\
|
52 |
+
bayar dibandingkan kategori yang lainnya.')
|
53 |
+
|
54 |
+
#menampilakn barplot
|
55 |
+
st.title('Marital Status to Default Pay')
|
56 |
+
image = Image.open('graph4.png')
|
57 |
+
st.image(image, caption='Marital status column to default pay')
|
58 |
+
|
59 |
+
#menampilkan penjelasan
|
60 |
+
with st.expander('Explanation'):
|
61 |
+
st.caption('Pada grafik di atas dapat diketahui bahwa status pernikahan yang single\
|
62 |
+
memiliki jumlah yang lebih banyak dibandingkan menikah dalam konteks\
|
63 |
+
tidak gagal bayar, namun pada konteks gagal bayar hampir tidak memiliki\
|
64 |
+
perbedaan.')
|
65 |
+
|
66 |
+
|
67 |
+
|
68 |
+
|
graph3.png
ADDED
graph4.png
ADDED
heatmap.png
ADDED
model.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5831aea1303342898dc0b18b6946aada607ca790c22002d220be24764df668d6
|
3 |
+
size 110390
|
models.py
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pandas as pd
|
3 |
+
import pickle
|
4 |
+
|
5 |
+
st.write('Model untuk prediksi gagal bayar atau tidak gagal bayar. \
|
6 |
+
\n0: Sukses bayar\
|
7 |
+
\n1: Telat sebulan\
|
8 |
+
\n2: Telat 2 bulan\
|
9 |
+
\n3: Telat 3 bulan\
|
10 |
+
\n4: Telah lebih dari 3 bulan.')
|
11 |
+
|
12 |
+
def run():
|
13 |
+
# Load All Files
|
14 |
+
with open('model.pkl', 'rb') as file:
|
15 |
+
full_process = pickle.load(file)
|
16 |
+
|
17 |
+
pay_1 = st.selectbox(label='choose delay payment in a month', options=[0.0, 1.0, 2.0, 3.0, 4.0], key='pay_1')
|
18 |
+
pay_2 = st.selectbox(label='choose delay payment in a month', options=[0.0, 1.0, 2.0, 3.0, 4.0], key='pay_2')
|
19 |
+
pay_3 = st.selectbox(label='choose delay payment in a month', options=[0.0, 2.0, 3.0, 4.0], key='pay_3')
|
20 |
+
pay_4 = st.selectbox(label='choose delay payment in a month', options=[0.0, 2.0, 3.0, 4.0], key='pay_4')
|
21 |
+
pay_5 = st.selectbox(label='choose delay payment in a month', options=[0.0, 2.0, 3.0, 4.0], key='pay_5')
|
22 |
+
pay_6 = st.selectbox(label='choose delay payment in a month', options=[0.0, 2.0, 3.0, 4.0], key='pay_6')
|
23 |
+
limit_balance = st.number_input(label='Limit Balance', key='limit_balance')
|
24 |
+
pay_amt_1 = st.number_input(label='Pay Amount 1', key='pay_amt_1')
|
25 |
+
pay_amt_2 = st.number_input(label='Pay Amount 2', key='pay_amt_2')
|
26 |
+
pay_amt_3 = st.number_input(label='Pay Amount 3', key='pay_amt_3')
|
27 |
+
pay_amt_4 = st.number_input(label='Pay Amount 4', key='pay_amt_4')
|
28 |
+
pay_amt_6 = st.number_input(label='Pay Amount 6', key='pay_amt_6')
|
29 |
+
|
30 |
+
st.write('In the following is the result of the data you have input:')
|
31 |
+
|
32 |
+
data_inf = pd.DataFrame({
|
33 |
+
'pay_1': [pay_1],
|
34 |
+
'pay_2': [pay_2],
|
35 |
+
'pay_3': [pay_3],
|
36 |
+
'pay_4': [pay_4],
|
37 |
+
'pay_5': [pay_5],
|
38 |
+
'pay_6': [pay_6],
|
39 |
+
'Limit Balance': [limit_balance],
|
40 |
+
'pay amount 1': [pay_amt_1],
|
41 |
+
'pay amount 2': [pay_amt_2],
|
42 |
+
'pay amount 3': [pay_amt_3],
|
43 |
+
'pay amount 4': [pay_amt_4],
|
44 |
+
'pay amount 6': [pay_amt_6]
|
45 |
+
})
|
46 |
+
|
47 |
+
st.table(data_inf)
|
48 |
+
|
49 |
+
if st.button(label='Predict'):
|
50 |
+
# data dummy prediction
|
51 |
+
yPred_inf = full_process.predict(data_inf)
|
52 |
+
st.metric(label="Here is a prediction of default payment next month:", value=y_pred_inf[0])
|
53 |
+
|
54 |
+
# result of prediction
|
55 |
+
if yPred_inf[0] == 0:
|
56 |
+
st.write('Not Default')
|
57 |
+
|
58 |
+
else:
|
59 |
+
st.write('Default')
|
requirements.txt
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
pandas
|
2 |
+
numpy
|
3 |
+
seaborn
|
4 |
+
matplotlib
|
5 |
+
scikit-learn
|
6 |
+
imbalanced-learn
|
7 |
+
feature-engine
|