Spaces:
Sleeping
Sleeping
Commit
·
74c5743
1
Parent(s):
c8d5cfc
Upload 10 files
Browse files- app.py +167 -0
- eda.py +56 -0
- my_model.pkl +3 -0
- output1.png +0 -0
- output2.png +0 -0
- output3.png +0 -0
- output4.png +0 -0
- output5.png +0 -0
- prediction.py +70 -0
- requirements.txt +4 -0
app.py
ADDED
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import eda
|
3 |
+
import prediction
|
4 |
+
|
5 |
+
# Membuat sidebar dengan opsi menu
|
6 |
+
page = st.sidebar.selectbox(label='Select Page:', options=['Home Page', 'Exploration Data Analysis', 'Model Prediction'])
|
7 |
+
st.sidebar.write('')
|
8 |
+
st.sidebar.write('')
|
9 |
+
st.sidebar.write('')
|
10 |
+
st.sidebar.write('')
|
11 |
+
st.sidebar.write('')
|
12 |
+
st.sidebar.image('https://cdn1.iconfinder.com/data/icons/online-money-service-aesthetics-vol-1/256/Fraud_alert-512.png')
|
13 |
+
|
14 |
+
# Memilih halaman berdasarkan opsi yang dipilih
|
15 |
+
if page == 'Home Page':
|
16 |
+
# Tampilan Home Page
|
17 |
+
st.image('https://149695847.v2.pressablecdn.com/wp-content/uploads/2018/02/splunkf1frauddetection-770x385.png')
|
18 |
+
st.markdown("<h1 style='text-align: center;'>Welcome to Home Page<br>Milestone 2</h1>", unsafe_allow_html=True)
|
19 |
+
st.markdown("========================================================================================")
|
20 |
+
st.write('')
|
21 |
+
st.markdown("<p style='text-align: left;'>Nama : Muhammad Insani</p>", unsafe_allow_html=True)
|
22 |
+
st.markdown("<p style='text-align: left;'>Batch : HCK-010</p>", unsafe_allow_html=True)
|
23 |
+
st.markdown("<p style='text-align: left;'>Objective : Program ini dibuat untuk memprediksi transaksi penipuan dari dataset yang terdiri dari 1,75 juta transaksi dengan menggunakan model terbaik diantara SVM, KNN, DecisionTree, Random Forest, dan Boosting</p>", unsafe_allow_html=True)
|
24 |
+
st.write('')
|
25 |
+
st.caption('Silahkan pilih menu lain di Select Box pada sebelah kiri layar anda untuk memulai!')
|
26 |
+
st.write('')
|
27 |
+
st.write('')
|
28 |
+
|
29 |
+
|
30 |
+
|
31 |
+
# Menampilkan Deskripsi dataset
|
32 |
+
with st.expander("Deskripsi Dataset"):
|
33 |
+
st.caption('''
|
34 |
+
|
35 |
+
Dataset ini terdiri dari 1,75 juta transaksi yang dilakukan dengan mempertimbangkan pengguna simulasi melalui berbagai terminal selama periode Januari 2023 hingga Juni 2023. Namun, data tersebut sangat tidak seimbang, dengan hanya sebagian kecil (13,45%) transaksi yang diklasifikasikan sebagai penipuan
|
36 |
+
|
37 |
+
|
38 |
+
| Kolom | Deskripsi |
|
39 |
+
|----------------------|--------------------------------------------------------|
|
40 |
+
| Unnamed: 0 | Indeks unik untuk setiap baris dalam dataset |
|
41 |
+
| TRANSACTION_ID | Pengidentifikasi unik untuk setiap transaksi |
|
42 |
+
| TX_DATETIME | Tanggal dan waktu transaksi |
|
43 |
+
| CUSTOMER_ID | Pengidentifikasi unik untuk pelanggan yang melakukan transaksi |
|
44 |
+
| TERMINAL_ID | Pengidentifikasi untuk terminal ATM atau POS tempat transaksi dilakukan |
|
45 |
+
| TX_AMOUNT | Jumlah transaksi |
|
46 |
+
| TX_TIME_SECONDS | Waktu transaksi dalam detik sejak tengah malam |
|
47 |
+
| TX_TIME_DAYS | Waktu transaksi dalam hari sejak transaksi pertama dalam dataset |
|
48 |
+
| TX_FRAUD | Label biner yang menunjukkan apakah transaksi tersebut merupakan transaksi fraud (1) atau bukan fraud (0) |
|
49 |
+
| TX_FRAUD_SCENARIO | Label kategoris yang menunjukkan jenis transaksi fraud (misalnya, "pembelian dengan kartu curian" atau "pengambilalihan akun") |
|
50 |
+
|
51 |
+
|
52 |
+
|
53 |
+
''')
|
54 |
+
|
55 |
+
# Menampilkan latar belakang
|
56 |
+
with st.expander("Latar Belakang"):
|
57 |
+
st.caption('''
|
58 |
+
Di tengah revolusi digital dan pertumbuhan eksponensial transaksi keuangan global, perlindungan terhadap keamanan sistem pembayaran menjadi krusial.
|
59 |
+
Dataset transaksi finansial global yang mencakup 1,75 juta kasus dari Januari hingga Juni 2023 memberikan peluang unik untuk mengeksplorasi dinamika
|
60 |
+
penipuan di tingkat global. Namun, ketidakseimbangan distribusi data, dengan hanya 13,45% transaksi yang diidentifikasi sebagai penipuan, menciptakan
|
61 |
+
tantangan nyata dalam pengembangan model prediktif yang dapat mengantisipasi dan menanggulangi pola penipuan yang semakin berkembang. Dalam konteks global ini,
|
62 |
+
penelitian ini bukan hanya sekadar respons terhadap tren kecurangan terkini, tetapi juga sebuah langkah signifikan menuju penguatan keamanan dalam ekosistem
|
63 |
+
transaksi keuangan yang semakin kompleks.
|
64 |
+
|
65 |
+
''')
|
66 |
+
|
67 |
+
# Menampilkan problem statement
|
68 |
+
with st.expander("Problem Statement"):
|
69 |
+
st.caption('''
|
70 |
+
Dalam menghadapi ketidakseimbangan data transaksi keuangan, tantangan utamanya adalah memperbaiki model prediktif agar lebih cerdas dalam mengidentifikasi
|
71 |
+
fraud transaction dengan label "TX_FRAUD". Fokusnya adalah mengurangi prediksi yang salah terhadap fraud, mengintegrasikan metrik evaluasi yang lebih cerdas
|
72 |
+
daripada akurasi umum. Proyek ini bertujuan memberikan solusi cerdas dan efisien untuk meningkatkan keamanan sistem pembayaran dengan prediksi yang optimal
|
73 |
+
terkait transaksi fraud.
|
74 |
+
|
75 |
+
''')
|
76 |
+
|
77 |
+
# Menampilkan Kesimpulan berdasarkan pemilihan model :
|
78 |
+
with st.expander("Kesimpulan Berdasarkan Pemilihan Model"):
|
79 |
+
st.caption('''
|
80 |
+
|
81 |
+
Diantara model yang digunakan seperti SVM, KNN, Decision Tree, Random Forest, dan Boosting, Model Decision Tree mendemonstrasikan recall yang tinggi berdasarkan beberapa keunggulan tertentu:
|
82 |
+
|
83 |
+
- Memahami Pola Data:
|
84 |
+
Decision Tree secara alami mampu memahami dan mengekstraksi pola serta hubungan dalam data dengan efektif.
|
85 |
+
|
86 |
+
- Interpretabilitas yang Tinggi:
|
87 |
+
Struktur pohon keputusan memungkinkan interpretasi yang mudah oleh manusia, memudahkan pemahaman faktor-faktor yang berkontribusi pada prediksi fraud.
|
88 |
+
|
89 |
+
- Kemampuan Menangani Fitur Kategorikal:
|
90 |
+
Model ini dapat menangani baik fitur numerik maupun kategorikal tanpa transformasi tambahan, menjadi bermanfaat pada dataset dengan campuran jenis fitur.
|
91 |
+
|
92 |
+
- Menangani Pemisahan yang Non-linear:
|
93 |
+
Decision Tree dapat menangani pemisahan kelas yang non-linear, cocok untuk hubungan fitur dan label yang bersifat kompleks.
|
94 |
+
|
95 |
+
- Pengaturan Hyperparameter yang Mudah:
|
96 |
+
Melalui hyperparameter tuning, kinerja Decision Tree dapat dioptimalkan dengan penyesuaian kriteria split, kedalaman maksimum, dan jumlah sampel minimum.
|
97 |
+
|
98 |
+
- Kemampuan Menangani Imbalanced Data:
|
99 |
+
Model ini menunjukkan kinerja baik pada dataset yang tidak seimbang, seperti pada kasus deteksi fraud.
|
100 |
+
|
101 |
+
- Tingkat Kerumitan yang Sesuai:
|
102 |
+
Decision Tree memiliki tingkat kerumitan yang dapat disesuaikan, memungkinkan penyesuaian untuk mencapai keseimbangan antara underfitting dan overfitting.
|
103 |
+
|
104 |
+
Walaupun Decision Tree memiliki keunggulan ini, perlu diingat bahwa hasil tergantung pada karakteristik khusus dari dataset, dan dalam beberapa kasus, model lain mungkin lebih optimal.
|
105 |
+
|
106 |
+
|
107 |
+
''')
|
108 |
+
|
109 |
+
|
110 |
+
# Menampilkan kesimpulan terhadap hasil model yang dipilih
|
111 |
+
with st.expander("Kesimpulan Terhadap Hasil Model Yang Dipilih"):
|
112 |
+
st.caption('''
|
113 |
+
|
114 |
+
*1. Performa Umum Model:*
|
115 |
+
|
116 |
+
- Model ini memiliki hasil yang umumnya baik untuk kelas minoritas (1), model memiliki tingkat presisi sebesar 0.96, recall sebesar 0.98, dan F1-score sebesar 0.97 pada data uji.
|
117 |
+
- Tingkat True Positives dan True Negatives yang tinggi menunjukkan kemampuan model dalam mengidentifikasi transaksi fraud dan non-fraud dengan baik.
|
118 |
+
|
119 |
+
*2. Kesalahan Model:*
|
120 |
+
|
121 |
+
- Terdapat beberapa kasus False Negatives yang menunjukkan bahwa model masih melewatkan beberapa transaksi fraud. Ini dapat menjadi area perbaikan untuk meningkatkan recall pada kelas fraud.
|
122 |
+
|
123 |
+
*3. Karakteristik False Negatives:*
|
124 |
+
|
125 |
+
- Transaksi ini menunjukkan variasi nilai fitur, pola waktu yang tidak konsisten, dan kesalahan dalam mendeteksi fraud, menekankan perlunya peningkatan pada model untuk fokus pada pola khusus dan mengurangi jumlah kasus yang terlewat.
|
126 |
+
|
127 |
+
*4. Karakteristik True Negatives:*
|
128 |
+
|
129 |
+
- Transaksi yang berhasil diidentifikasi sebagai non-fraud (True Negatives) memiliki variasi nilai fitur yang wajar dan model berhasil memprediksinya dengan benar.
|
130 |
+
|
131 |
+
*5. Perbaikan Model:*
|
132 |
+
|
133 |
+
- Model dapat diperbaiki dengan meningkatkan analisis terhadap kasus-kasus False Negatives, mungkin dengan menambahkan fitur atau menyesuaikan parameter model.
|
134 |
+
- Fokus pada peningkatan recall untuk kelas fraud dapat membantu mengurangi jumlah False Negatives.
|
135 |
+
|
136 |
+
*6. Penggunaan Model:*
|
137 |
+
|
138 |
+
- Model ini dapat digunakan untuk deteksi fraud pada transaksi keuangan dengan tingkat akurasi yang tinggi.
|
139 |
+
- Model dapat memberikan nilai tambah dalam memitigasi risiko fraud dan melindungi keuangan perusahaan.
|
140 |
+
|
141 |
+
*7. Pemantauan dan Peningkatan Lanjutan:*
|
142 |
+
|
143 |
+
- Model perlu dipantau secara berkala, dan perbaikan atau penyesuaian lanjutan diperlukan untuk menjaga kinerja model seiring waktu.
|
144 |
+
- Model ini dapat digunakan sebagai alat bantu dalam pengambilan keputusan terkait dengan deteksi fraud, namun perlu pemahaman kontekstual dan pemantauan yang berkelanjutan.
|
145 |
+
|
146 |
+
|
147 |
+
|
148 |
+
|
149 |
+
''')
|
150 |
+
|
151 |
+
# Menampilkan kesimpulan terhadap problem statement
|
152 |
+
with st.expander("Kesimpulan Terhadap Problem Statement"):
|
153 |
+
st.caption('''
|
154 |
+
|
155 |
+
Dari pernyataan masalah, dapat disimpulkan bahwa model yang berhasil dikembangkan telah mencapai tingkat akurasi yang tinggi dalam mengenali transaksi fraud. Meskipun demikian,
|
156 |
+
menghadapi ketidakseimbangan data menjadi tantangan, sehingga diperlukan fokus khusus untuk mengurangi kesalahan prediksi terhadap transaksi fraud. Penilaian model tidak hanya
|
157 |
+
mengandalkan akurasi umum, tetapi juga mempertimbangkan metrik evaluasi yang lebih cerdas. Secara keseluruhan, model ini memberikan solusi yang cerdas dan efisien untuk meningkatkan
|
158 |
+
keamanan sistem pembayaran dengan prediksi optimal terkait transaksi fraud. Meski demikian, masih terdapat peluang untuk perbaikan, terutama dalam mengatasi kasus False Negatives
|
159 |
+
|
160 |
+
''')
|
161 |
+
|
162 |
+
elif page == 'Exploration Data Analysis':
|
163 |
+
# Menjalankan fungsi untuk EDA
|
164 |
+
eda.run()
|
165 |
+
else:
|
166 |
+
# Menjalankan fungsi untuk Model Prediction
|
167 |
+
prediction.run()
|
eda.py
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Import library yang digunakan
|
2 |
+
import streamlit as st
|
3 |
+
from PIL import Image
|
4 |
+
|
5 |
+
# Fungsi untuk menjalankan aplikasi
|
6 |
+
def run():
|
7 |
+
|
8 |
+
# Tampilan judul halaman
|
9 |
+
st.markdown("<h1 style='text-align: center;'>Welcome to Explaration Data Analysis</h1>", unsafe_allow_html=True)
|
10 |
+
st.markdown("========================================================================================")
|
11 |
+
st.markdown("")
|
12 |
+
|
13 |
+
# Membagi layar menjadi dua kolom
|
14 |
+
col1, col2 = st.columns(2)
|
15 |
+
|
16 |
+
# Menampilkan visualisasi dan penjelasan untuk Default Payment Next Month by Education Level
|
17 |
+
col1.markdown("<h4 style='text-align: left;'>1. Tinjauan Rata-Rata Fitur: Perbandingan Antara Transaksi Fraud dan Non-Fraud</h4>", unsafe_allow_html=True)
|
18 |
+
image = Image.open('output1.png')
|
19 |
+
col1.image(image, caption='figure 1')
|
20 |
+
|
21 |
+
with col1.expander('Penjelasan'):
|
22 |
+
st.caption('Berdasarkan Visulisasi diatas, hasil analisis dataset menunjukkan bahwa transaksi fraud cenderung melibatkan pelanggan dengan nilai CUSTOMER_ID lebih tinggi dan jumlah transaksi (TX_AMOUNT) yang signifikan. Namun, tidak ada pola yang jelas terkait waktu transaksi atau urutan transaksi. Deteksi fraud lebih terkait dengan nilai transaksi tinggi dan karakteristik pelanggan daripada faktor waktu.')
|
23 |
+
|
24 |
+
# Menampilkan visualisasi dan penjelasan untuk Default Payment Next Month by Marital Status
|
25 |
+
col2.markdown("<h4 style='text-align: left;'>2. Pemahaman Distribusi Fitur pada Transaksi Fraud: Boxplot Analysis</h4>", unsafe_allow_html=True)
|
26 |
+
image = Image.open('output2.png')
|
27 |
+
col2.image(image, caption='figure 2')
|
28 |
+
|
29 |
+
with col2.expander('Penjelasan'):
|
30 |
+
st.caption('- Transaksi non-fraud memiliki variasi yang cukup signifikan dalam jumlah, waktu, dan identifikasi pelanggan serta terminal. Tidak ada pola khusus atau kelompok pelanggan tertentu yang dapat diidentifikasi sebagai indikator transaksi non-fraud')
|
31 |
+
st.caption('- Transaksi fraud menunjukkan variasi yang signifikan dalam jumlah, waktu, dan identifikasi pelanggan. Jumlah transaksi fraud cenderung jauh lebih tinggi daripada transaksi normal. Tetapi tidak ada pola yang jelas dalam identifikasi terminal yang dapat diidentifikasi untuk transaksi fraud.')
|
32 |
+
|
33 |
+
# Menampilkan visualisasi dan penjelasan untuk Default Payment Next Month by Pay Status
|
34 |
+
col1.markdown("<h4 style='text-align: left;'>3. Perbandingan Trend Jumlah Transaksi Fraud dan Non-Fraud per Hari: Lineplot Analysis</h4>", unsafe_allow_html=True)
|
35 |
+
image = Image.open('output3.png')
|
36 |
+
col1.image(image, caption='figure 3')
|
37 |
+
|
38 |
+
with col1.expander('Penjelasan'):
|
39 |
+
st.caption('Berdasarkan visualisasi transaksi per hari Subset data untuk transaksi fraud (warna biru) dan non-fraud (warna hijau) menunjukkan bahwa tidak terlihat pola yang konsisten atau jelas antara kedua kelas (fraud dan non-fraud) terkait fitur waktu (TX_TIME_DAYS). Dengan kata lain, tidak ada tren atau perubahan yang mencolok dalam distribusi jumlah transaksi per hari yang membedakan transaksi fraud dan non-fraud.')
|
40 |
+
|
41 |
+
# Menampilkan visualisasi dan penjelasan untuk Default Payment Next Month by Bill Amount
|
42 |
+
col2.markdown("<h4 style='text-align: left;'>4. Perbandingan Trend Jumlah Total Transaksi Fraud dan Non-Fraud per Hari: Lineplot Analysis</h4>", unsafe_allow_html=True)
|
43 |
+
image = Image.open('output4.png')
|
44 |
+
col2.image(image, caption='figure 4')
|
45 |
+
|
46 |
+
with col2.expander('Penjelasan'):
|
47 |
+
st.caption('Berdasarkan total jumlah transaksi per hari,Subset data untuk transaksi fraud (warna biru) dan non-fraud (warna hijau) tidak tampak adanya pola yang konsisten atau jelas yang membedakan antara transaksi fraud dan non-fraud. Dengan kata lain, tidak terdapat tren atau perubahan yang mencolok dalam distribusi total jumlah transaksi per hari yang memisahkan transaksi fraud dan non-fraud.')
|
48 |
+
|
49 |
+
# Menampilkan visualisasi dan penjelasan untuk Default Payment Next Month by Age Range
|
50 |
+
col1.markdown("<h4 style='text-align: left;'>5. Distribusi Transaksi Per Jam</h4>", unsafe_allow_html=True)
|
51 |
+
image = Image.open('output5.png')
|
52 |
+
col1.image(image, caption='figure 5')
|
53 |
+
|
54 |
+
with col1.expander('Penjelasan'):
|
55 |
+
st.caption('Dari visualisasi diatas, Subset data untuk transaksi fraud (warna merah) dan non-fraud (warna hijau) dapat disimpulkan bahwa distribusi transaksi pada jam-jam tertentu dalam sehari menunjukkan pola yang sesuai dengan harapan, dengan lonceng Gaussian yang baik untuk kedua kelas. Meskipun ada pola umum seperti puncak transaksi pada jam 1 siang, tidak terlihat pola yang jelas yang dapat membedakan antara transaksi fraud dan non-fraud.')
|
56 |
+
|
my_model.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:931794cf2e0858d490f22ad0344926633b17dd629ffcb39f10b9806f3d3a58cf
|
3 |
+
size 179447
|
output1.png
ADDED
![]() |
output2.png
ADDED
![]() |
output3.png
ADDED
![]() |
output4.png
ADDED
![]() |
output5.png
ADDED
![]() |
prediction.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pandas as pd
|
3 |
+
import joblib
|
4 |
+
import datetime
|
5 |
+
|
6 |
+
def run():
|
7 |
+
# Tampilan judul halaman
|
8 |
+
st.markdown("<h1 style='text-align: center;'>Welcome to the Fraud Transaction Prediction Model</h1>", unsafe_allow_html=True)
|
9 |
+
st.markdown("========================================================================================")
|
10 |
+
|
11 |
+
st.title("Input Data Transaksi")
|
12 |
+
|
13 |
+
def user_input():
|
14 |
+
col1, col2 = st.columns(2)
|
15 |
+
transaction_id = col1.number_input("Transaction ID", value=0)
|
16 |
+
customer_id = col2.number_input("Customer ID", value=0)
|
17 |
+
terminal_id = col1.number_input("Terminal ID", value=0)
|
18 |
+
tx_amount = col2.number_input("Total Transaction", value=0.0)
|
19 |
+
selected_hour = st.slider("Select Hour", 0, 23, 0)
|
20 |
+
selected_minute = st.slider("Select Minute", 0, 59, 0)
|
21 |
+
selected_second = st.slider("Select Second", 0, 59, 0)
|
22 |
+
selected_date = st.date_input("Select Transaction Date", datetime.date.today())
|
23 |
+
|
24 |
+
reference_date = datetime.datetime(2023, 1, 1, 0, 0, 0)
|
25 |
+
selected_datetime = datetime.datetime.combine(selected_date, datetime.time(selected_hour, selected_minute, selected_second))
|
26 |
+
tx_time = selected_datetime - reference_date
|
27 |
+
tx_time_seconds = int(tx_time.total_seconds())
|
28 |
+
tx_time_days = tx_time.days
|
29 |
+
|
30 |
+
data = {
|
31 |
+
'TRANSACTION_ID': transaction_id,
|
32 |
+
'CUSTOMER_ID' : customer_id,
|
33 |
+
'TERMINAL_ID' : terminal_id,
|
34 |
+
'TX_AMOUNT': tx_amount,
|
35 |
+
'TX_TIME_SECONDS': tx_time_seconds,
|
36 |
+
'TX_TIME_DAYS': tx_time_days
|
37 |
+
}
|
38 |
+
|
39 |
+
features = pd.DataFrame(data, index=[0])
|
40 |
+
return features
|
41 |
+
|
42 |
+
# Menjalankan fungsi input pengguna
|
43 |
+
input = user_input()
|
44 |
+
|
45 |
+
# Menampilkan hasil input pengguna dalam bentuk tabel
|
46 |
+
st.markdown("<h2 style='text-align: left;'>User Input Result</h2>", unsafe_allow_html=True)
|
47 |
+
st.table(input)
|
48 |
+
|
49 |
+
# Memuat model yang telah disimpan sebelumnya
|
50 |
+
load_model = joblib.load("my_model.pkl")
|
51 |
+
|
52 |
+
# Tombol untuk memprediksi
|
53 |
+
if st.button("Predict", help='Click me!'):
|
54 |
+
# Melakukan prediksi menggunakan model
|
55 |
+
prediction = load_model.predict(input)
|
56 |
+
|
57 |
+
# Menampilkan hasil prediksi
|
58 |
+
if prediction == 1:
|
59 |
+
prediction = 'Fraud Transaction'
|
60 |
+
else:
|
61 |
+
prediction = 'Normal Transaction'
|
62 |
+
|
63 |
+
st.markdown("<h4 style='text-align: center;'>Berdasarkan informasi yang diberikan oleh pengguna, model Fraud Transaction memprediksi:</h4>", unsafe_allow_html=True)
|
64 |
+
st.markdown(f"<h1 style='text-align: center;'>{prediction}</h1>", unsafe_allow_html=True)
|
65 |
+
|
66 |
+
# Menampilkan hasil tambahan jika input termasuk dalam salah satu jenis fraud
|
67 |
+
if prediction != "Normal Transaction":
|
68 |
+
st.markdown("<h4 style='text-align: center;'>Transaksi ini termasuk dalam kategori mencurigakan. Harap waspada!</h4>", unsafe_allow_html=True)
|
69 |
+
|
70 |
+
|
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
pandas
|
2 |
+
joblib
|
3 |
+
datetime
|
4 |
+
scikit-learn
|