Gigisghifari commited on
Commit
a5f06cb
1 Parent(s): 3eb4b73

Upload 6 files

Browse files
Files changed (6) hide show
  1. P1G5_Set_1_A.A_Ghifari(Changed).csv +0 -0
  2. app.py +10 -0
  3. eda.py +95 -0
  4. model_svc.pkl +3 -0
  5. predict.py +82 -0
  6. requirements.txt +7 -0
P1G5_Set_1_A.A_Ghifari(Changed).csv ADDED
The diff for this file is too large to render. See raw diff
 
app.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import eda
3
+ import predict
4
+
5
+ navigation = st.sidebar.selectbox('Pilih Halaman:', ('EDA','Predict'))
6
+
7
+ if navigation == 'EDA':
8
+ eda.run()
9
+ else:
10
+ predict.run()
eda.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import seaborn as sns
4
+ import matplotlib.pyplot as plt
5
+ import plotly.express as px
6
+
7
+ st.set_page_config(
8
+ page_title = 'Credit Card Default - EDA',
9
+ layout='wide',
10
+ initial_sidebar_state='expanded'
11
+ )
12
+
13
+ def run():
14
+ # Membuat title
15
+ st.title('Model Prediksi Credit Card Default')
16
+
17
+ # Membuat Subheader
18
+ st.subheader('EDA untuk Analisis Dataset Credit Card Default')
19
+
20
+ # Menambah Gambar
21
+ st.image('https://media.istockphoto.com/id/957837328/photo/business-debt-collection-or-recovery-unpaid-invoice.jpg?s=612x612&w=0&k=20&c=7sH7P4t7Fl2PjFfAUOIolZictaF8CsXXsxkbwZBz98g=',
22
+ caption= 'Credit Card Default')
23
+
24
+ # Menambah Deskripsi
25
+ st.write('-'*50)
26
+ st.write('Graded Challenge 5')
27
+ st.write('Nama : Achmad Abdillah Ghifari')
28
+ st.write('Batch : BSD-006')
29
+ st.write('-'*50)
30
+
31
+ # menjelaskan kegunaan page ini
32
+ st.write('Pada page ini, kita akan melihat exploratory data analyst (EDA) dari dataset credit card default yang dapat dilihat di [BigQuery](https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=ml_datasets&t=credit_card_default&page=table&project=graded-challenge-5&ws=!1m5!1m4!4m3!1sbigquery-public-data!2sml_datasets!3scredit_card_default). dalam exploratory data analysis ini kita akan mencoba menjawab pertanyaan-pertanyaan berikut')
33
+ st.write('1. bagaimana distribusi limit balance customer pada data?')
34
+ st.write('2. bagaimana persebaran limit balance dan age?')
35
+ st.write('3. marital status apa yang memiliki average limit_balance tertinggi?')
36
+ st.write('4. apakah lebih banyak customer yang membayar atau melakukan default?')
37
+ st.write('5. customer umur berapa yang paling sering melakukan default?')
38
+ st.write('6. apa education level terbanyak dari customer kartu kredit?')
39
+ st.write('7. berapa limit balance yang paling sering dimiliki kedua gender?')
40
+
41
+ # membuat garis lurus
42
+ st.markdown('---')
43
+
44
+ # show dataframe
45
+ st.write('### Credit Card Default Dataset')
46
+ data = pd.read_csv('P1G5_Set_1_A.A_Ghifari(Changed).csv')
47
+ st.dataframe(data)
48
+
49
+
50
+ # Membuat Histogram (EDA 1)
51
+ st.write('### Histogram of limit balance')
52
+ fig = plt.figure(figsize=[15,5])
53
+ sns.histplot(data['limit_balance'], kde=True, bins = 30)
54
+ st.pyplot(fig)
55
+
56
+ # Membuat ScatterPlot (EDA 2)
57
+ st.write('### Scatterplot of limit balance and age')
58
+ fig = plt.figure(figsize=[15,5])
59
+ sns.scatterplot(x = 'limit_balance', y = 'age', hue= 'default', data = data)
60
+ st.pyplot(fig)
61
+
62
+ # Membuat barplot (EDA 3)
63
+ st.write('### barchart of marital status and limit balance')
64
+ fig = plt.figure(figsize=[15,5])
65
+ sns.barplot(data=data, x='marital_status', y='limit_balance',)
66
+ st.pyplot(fig)
67
+
68
+ # Membuat pie chart (EDA 4)
69
+ st.write('### pie chart of if a customer has defaulted')
70
+ fig = plt.figure(figsize=(15,5))
71
+ data['default'].value_counts().plot(kind='pie', autopct='%.2f%%')
72
+ st.pyplot(fig)
73
+
74
+ # Membuat line chart (EDA 5)
75
+ st.write('### age of defaulting customer')
76
+ Def_Age= data.groupby(['age', 'default']).size().unstack(fill_value=0)
77
+ fig, ax = plt.subplots(figsize=[15, 5])
78
+ Def_Age.plot(kind='line', ax=ax)
79
+ st.pyplot(fig)
80
+
81
+ # Membuat bar chart (EDA 6)
82
+ st.write('### The amount of education level')
83
+ fig = plt.figure(figsize=[15,5])
84
+ data['education_level'].value_counts().plot(kind='bar')
85
+ st.pyplot(fig)
86
+
87
+ # Membuat line chart (EDA7)
88
+ st.write('### limit balance of gender')
89
+ Sex_Bal= data.groupby(['limit_balance', 'sex']).size().unstack(fill_value=0)
90
+ fig, ax = plt.subplots(figsize=[15, 5])
91
+ Sex_Bal.plot(kind='line', ax=ax)
92
+ st.pyplot(fig)
93
+
94
+ if __name__ == '__main__':
95
+ run()
model_svc.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4e2438225043fe41ff527eaf7d96881c4cacd6151b7da6abb155649e3d4cc4a2
3
+ size 95444
predict.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ import pickle
4
+ import json
5
+ import streamlit as st
6
+ with open('model_svc.pkl', 'rb') as file_1:
7
+ model = pickle.load(file_1)
8
+
9
+ def run():
10
+ with st.form("my_form"):
11
+ st.write("## Credit Card Default Prediction Model")
12
+ st.write('pada page ini kita dapat melakukan prediksi model dengan memasukan data kedalam form dibawah. untuk bantuan mengenai value yang harus dimasukan dapat dilihat pada logo "?" disebelah pertanyaan.')
13
+ Limit_Balance = st.number_input('masukan limit balance customer', 0, 1000000, 100000, help= "limit balance harus memiliki jarak dari 10000 sampai 800000")
14
+ sex = st.selectbox('masukan gender customer', [1, 2], index=0, help= 'pilih angka 1 (Male) atau 2(Female)')
15
+ education_level = st.selectbox('masukan level edukasi customer', [1, 2, 3, 4], index=0, help= 'pilih angka jika merupakan lulusan 1(Sekolah), 2(universitas), 3(SMA), 4(lainnya))')
16
+ marital_status = st.selectbox('masukan marital status customer', [1, 2, 3], index=0, help= 'pilih angka 1 (Married), 2(Single), atau 3(lainnya)')
17
+ age = st.number_input('masukan umur dari customer', 20, 70, 35, help= 'umur customer harus memiliki jarak 20 sampai 70')
18
+ pay_1 = st.selectbox('masukan status payment customer pada bulan september', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=1, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
19
+ pay_2 = st.selectbox('masukan status payment customer pada bulan agustus', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=2, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
20
+ pay_3 = st.selectbox('masukan status payment customer pada bulan july', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=1, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
21
+ pay_4 = st.selectbox('masukan status payment customer pada bulan juni', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=2, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
22
+ pay_5 = st.selectbox('masukan status payment customer pada bulan may', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=2, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
23
+ pay_6 = st.selectbox('masukan status payment customer pada bulan april', [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8], index=1, help= 'pilih angka jika pembayaran -2(2 bulan lalu), -1(1 bulan lalu), 0(tepat waktu), 1(telat 1 bulan)...,8(telat 8 bulan)' )
24
+ bill_amt_1 = st.number_input('masukan jumlah bill customer pada bulan september', 0, 1000000, 52000, help= "bill harus memiliki jarak dari 10000-800000")
25
+ bill_amt_2 = st.number_input('masukan jumlah bill pada customer bulan agustus', 0, 1000000, 46000, help= "bill harus memiliki jarak dari 10000-800000")
26
+ bill_amt_3 = st.number_input('masukan jumlah bill pada customer bulan july', 0, 1000000, 30000, help= "bill harus memiliki jarak dari 10000-800000")
27
+ bill_amt_4 = st.number_input('masukan jumlah bill pada customer bulan juni', 0, 1000000, 75000, help= "bill harus memiliki jarak dari 10000-800000")
28
+ bill_amt_5 = st.number_input('masukan jumlah bill pada customer bulan may', 0, 1000000, 47000, help= "bill harus memiliki jarak dari 10000-800000")
29
+ bill_amt_6 = st.number_input('masukan jumlah bill pada customer bulan april', 0, 1000000, 80000, help= "bill harus memiliki jarak dari 10000-800000")
30
+ pay_amt_1 = st.number_input('masukan payment sebelumnya customer pada bulan september', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
31
+ pay_amt_2 = st.number_input('masukan payment sebelumnya customer pada bulan agustus', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
32
+ pay_amt_3 = st.number_input('masukan payment sebelumnya customer pada bulan july', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
33
+ pay_amt_4 = st.number_input('masukan payment sebelumnya customer pada bulan juni', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
34
+ pay_amt_5 = st.number_input('masukan payment sebelumnya customer pada bulan may', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
35
+ pay_amt_6 = st.number_input('masukan payment sebelumnya customer pada bulan april', 0, 1000000, 52000, help= "payment harus memiliki jarak dari 10000-800000")
36
+
37
+ submitted = st.form_submit_button("Submit")
38
+
39
+ data_inf = {
40
+ 'limit_balance': Limit_Balance,
41
+ 'sex' : sex,
42
+ 'education_level' : education_level,
43
+ 'marital_status' : marital_status,
44
+ 'age' : age,
45
+ 'pay_1': pay_1,
46
+ 'pay_2': pay_2,
47
+ 'pay_3': pay_3,
48
+ 'pay_4': pay_4,
49
+ 'pay_5': pay_5,
50
+ 'pay_6': pay_6,
51
+ 'bill_amt_1': bill_amt_1,
52
+ 'bill_amt_2': bill_amt_2,
53
+ 'bill_amt_3': bill_amt_3,
54
+ 'bill_amt_4': bill_amt_4,
55
+ 'bill_amt_5': bill_amt_5,
56
+ 'bill_amt_6': bill_amt_6,
57
+ 'pay_amt_1': pay_amt_1,
58
+ 'pay_amt_2': pay_amt_2,
59
+ 'pay_amt_3': pay_amt_3,
60
+ 'pay_amt_4': pay_amt_4,
61
+ 'pay_amt_5': pay_amt_5,
62
+ 'pay_amt_6': pay_amt_6,
63
+ }
64
+
65
+ data_inf = pd.DataFrame([data_inf])
66
+ data_inf
67
+
68
+ st.write('-'*50)
69
+ st.write('# Hasil')
70
+ if submitted:
71
+ result= model.predict(data_inf)
72
+ for i in result:
73
+ if i == 0:
74
+ st.write('### customer tidak akan melakukan default pada bulan depan')
75
+ else:
76
+ st.write('### customer akan melakukan default pada bulan depan')
77
+ st.write('-'*50)
78
+
79
+ if __name__ =='__main__':
80
+ run()
81
+
82
+
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ streamlit
2
+ pandas
3
+ seaborn
4
+ matplotlib
5
+ numpy
6
+ scikit-learn
7
+ plotly