|
import streamlit as st |
|
import pandas as pd |
|
|
|
|
|
import matplotlib.pyplot as plt |
|
import seaborn as sns |
|
|
|
def run(): |
|
st.title('Default Credit Card Payment Prediction') |
|
st.markdown('Model ini bertujuan untuk memprediksi status pembayaran seseorang di bulan mendatang dengan simbol 1=gagal bayar dan 0=kredit lancar.') |
|
st.markdown('Model dikelola oleh Nicku R. Perdana (HCK-012)') |
|
st.image('https://img.freepik.com/free-photo/online-shopping-cheerful-asian-girl-holding-credit-card-smartphone-paying-order-with-mobile-phone-standing-yellow-background_1258-93224.jpg?w=1380&t=st=1706441175~exp=1706441775~hmac=daf53df3a74b11c7abb0a3099d93afa158ed12b1d30ff6fdd5b84a390c4d8c44') |
|
st.markdown('Sumber Gambar: Freepik') |
|
st.markdown('---') |
|
|
|
|
|
st.markdown('# Exploratory Data Analysis') |
|
st.markdown('## 1. Dataframe Credit Card Payment Log (BigQuery)') |
|
st.markdown('Bagian ini bertujuan untuk menampilkan tabel (300 entri data teratas) yang telah digunakan untuk melatih model') |
|
data = pd.read_csv('P1G5_Set_1_nicku_perdana.csv') |
|
st.dataframe(data=data.head(300)) |
|
st.markdown('## 2. Distribusi data') |
|
st.markdown('Bagian ini menampilkan informasi visualisasi seputar tabel bahan pelatihan model. ') |
|
st.markdown('### 2A. Distribusi "limit_balance"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.histplot(data=data, x=data['limit_balance'], kde=True).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan sebaran distribusi limit kartu kredit yang dimiliki oleh nasabah dalam satuan USD.') |
|
|
|
st.markdown('### 2B. Distribusi "sex"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.countplot(data=data, x=data['sex']).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan komposisi nasabah berdasarkan jenis kelamin dengan legenda berupa 1=laki-laki, 2=perempuan.') |
|
|
|
st.markdown('### 2C. Distribusi "education_level"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.countplot(data=data, x=data['education_level']).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan komposisi nasabah berdasarkan jenjang pendidikan yang ditempuh terakhir kali dengan legenda berupa 0=lainnya, 1=Pascasarjana, 2=Sekolah Tinggi/Universitas, 3=Sekolah Menengah, 4=lainnya, 5=lainnya, 6=lainnya.') |
|
|
|
st.markdown('### 2D. Distribusi "marital_status"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.countplot(data=data, x=data['marital_status']).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan komposisi nasabah berdasarkan status perkawinan dengan legenda berupa 0=lainnya, 1=menikah, 2=lajang, 3=cerai.') |
|
|
|
st.markdown('### 2E. Distribusi "age"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.histplot(data=data, x=data['age'], kde=True).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan sebaran distribusi usia nasabah.') |
|
|
|
st.markdown('### 2F. Distribusi Status Pembayaran') |
|
|
|
opsiPay = st.selectbox( |
|
'Pilih status berdasarkan periodenya.', |
|
('pay_0', 'pay_2', 'pay_3', 'pay_4', 'pay_5', 'pay_6'), |
|
index=None, placeholder='Pilih periode...' ) |
|
if opsiPay != None: |
|
st.markdown(f'#### Distribusi "{opsiPay}"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.countplot(data=data, x=data[opsiPay]).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown(f'Deskripsi: Grafik di atas menjelaskan komposisi nasabah berdasarkan status pembayaran pada periode {opsiPay} dengan legenda berupa -2=Tagihan lunas dan tidak ada transaksi (inactive), -1=Tagihan lunas; ada transaksi yang belum dibayarkan karena tagihan belum muncul, 0=Tagihan kartu kredit telah dibayarkan jumlah minimal, 1=Terlambat bayar 1 bulan, 2=Terlambat bayar 2 bulan, 3=Terlambat bayar 3 bulan, 4=Terlambat bayar 4 bulan, 5=Terlambat bayar 5 bulan, 6=Terlambat bayar 6 bulan, 7=Terlambat bayar 7 bulan, 8=Terlambat bayar 8 bulan, 9=Terlambat bayar 9 bulan.') |
|
|
|
st.markdown('### 2G. Distribusi Jumlah Tagihan Kartu Kredit') |
|
|
|
opsiBillAmt = st.selectbox( |
|
'Pilih periode tagihan.', |
|
('bill_amt_0', 'bill_amt_2', 'bill_amt_3', 'bill_amt_4', 'bill_amt_5', 'bill_amt_6'), |
|
index=None, placeholder='Pilih periode...' ) |
|
if opsiBillAmt != None: |
|
st.markdown(f'#### Distribusi "{opsiBillAmt}"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.histplot(data=data, x=data[opsiBillAmt], kde=True).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown(f'Deskripsi: GDeskripsi: Grafik di atas menjelaskan sebaran tagihan kartu kredit nasabah pada periode {opsiBillAmt} dalam satuan USD.') |
|
|
|
st.markdown('### 2H. Distribusi Jumlah Tagihan Kartu Kredit yang Terbayarkan') |
|
|
|
opsiPayAmt = st.selectbox( |
|
'Pilih periode tagihan.', |
|
('pay_amt_0', 'pay_amt_2', 'pay_amt_3', 'pay_amt_4', 'pay_amt_5', 'pay_amt_6'), |
|
index=None, placeholder='Pilih periode...' ) |
|
if opsiPayAmt != None: |
|
st.markdown(f'#### Distribusi "{opsiPayAmt}"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.histplot(data=data, x=data[opsiPayAmt], kde=True).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown(f'Deskripsi: GDeskripsi: Grafik di atas menjelaskan sebaran tagihan kartu kredit nasabah yang telah terbayarkan pada periode {opsiPayAmt} dalam satuan USD.') |
|
|
|
st.markdown('### 2I. Distribusi "default_payment_next_month"') |
|
canvas = plt.figure(figsize=(10,5)) |
|
sns.countplot(data=data, x=data['default_payment_next_month']).set(ylabel='Frekuensi') |
|
st.pyplot(canvas) |
|
st.markdown('Deskripsi: Grafik di atas menjelaskan komposisi nasabah berdasarkan status pembayaran kartu kredit dengan legenda berupa 0=kredit lancar, 1=gagal bayar.') |
|
|
|
if __name__ == '__main__': |
|
run() |