ESMATUGBA commited on
Commit
95de41e
·
verified ·
1 Parent(s): cb8b117

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +95 -0
  2. columns.pkl +3 -0
  3. fraud_model.pkl +3 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import joblib
4
+
5
+ # Sayfa ayarları / Page Settings
6
+ st.set_page_config(page_title="Fraud Guard Pro", page_icon="🛡️", layout="wide")
7
+
8
+ # Modelleri yükle / Load Assets
9
+ @st.cache_resource
10
+ def load_assets():
11
+ model = joblib.load("fraud_model.pkl")
12
+ cols = joblib.load("columns.pkl")
13
+ return model, cols
14
+
15
+ model, cols = load_assets()
16
+
17
+ # --- BAŞLIK KISMI / HEADER SECTION ---
18
+ st.markdown("<h1 style='text-align: center;'>🛡️ Fraud Guard Pro</h1>", unsafe_allow_html=True)
19
+ st.markdown("<h3 style='text-align: center;'>Finansal Dolandırıcılık Analiz Sistemi | Financial Fraud Analysis System</h3>", unsafe_allow_html=True)
20
+ st.markdown("---")
21
+
22
+ # --- ÖRNEK SENARYOLAR / QUICK SCENARIOS ---
23
+ st.subheader("🚀 Hızlı Test Senaryoları / Quick Test Scenarios")
24
+ col_s1, col_s2 = st.columns(2)
25
+
26
+ with col_s1:
27
+ if st.button("🚨 Şüpheli İşlem Örneği / Load Fraud Example"):
28
+ st.session_state.step = 1
29
+ st.session_state.type = "TRANSFER"
30
+ st.session_state.amount = 50000.0
31
+ st.session_state.oldorg = 50000.0
32
+ st.session_state.neworg = 0.0
33
+ st.warning("Şüpheli senaryo yüklendi! / Fraud scenario loaded!")
34
+
35
+ with col_s2:
36
+ if st.button("✅ Güvenli İşlem Örneği / Load Safe Example"):
37
+ st.session_state.step = 1
38
+ st.session_state.type = "PAYMENT"
39
+ st.session_state.amount = 150.0
40
+ st.session_state.oldorg = 2500.0
41
+ st.session_state.neworg = 2350.0
42
+ st.success("Güvenli senaryo yüklendi! / Safe scenario loaded!")
43
+
44
+ # --- SOL MENÜ: VERİ GİRİŞİ / SIDEBAR: DATA INPUT ---
45
+ st.sidebar.header("📥 İşlem Detayları / Transaction Details")
46
+
47
+ step = st.sidebar.number_input("Adım / Step", value=st.session_state.get('step', 1))
48
+ type_options = ["CASH_OUT", "TRANSFER", "PAYMENT", "DEBIT"]
49
+ type_input = st.sidebar.selectbox("Tür / Type", type_options,
50
+ index=type_options.index(st.session_state.get('type', 'CASH_OUT')))
51
+ amount = st.sidebar.number_input("Tutar / Amount", value=st.session_state.get('amount', 0.0))
52
+ oldbalanceOrg = st.sidebar.number_input("Gönderen Eski Bakiye / Sender Old Bal.", value=st.session_state.get('oldorg', 0.0))
53
+ newbalanceOrig = st.sidebar.number_input("Gönderen Yeni Bakiye / Sender New Bal.", value=st.session_state.get('neworg', 0.0))
54
+ oldbalanceDest = st.sidebar.number_input("Alıcı Eski Bakiye / Receiver Old Bal.", value=0.0)
55
+ newbalanceDest = st.sidebar.number_input("Alıcı Yeni Bakiye / Receiver New Bal.", value=0.0)
56
+
57
+ # Veriyi hazırlama / Data Preparation
58
+ input_df = pd.DataFrame([[step, amount, oldbalanceOrg, newbalanceOrig, oldbalanceDest, newbalanceDest]],
59
+ columns=["step", "amount", "oldbalanceOrg", "newbalanceOrig", "oldbalanceDest", "newbalanceDest"])
60
+
61
+ for t in type_options:
62
+ input_df["type_" + t] = 1 if type_input == t else 0
63
+
64
+ input_df = input_df.reindex(columns=cols, fill_value=0)
65
+
66
+ # --- ANALİZ VE SONUÇ / ANALYSIS AND RESULT ---
67
+ st.divider()
68
+ if st.button("🔍 ANALİZ ET / ANALYZE NOW", use_container_width=True):
69
+ prediction = model.predict(input_df)
70
+
71
+ res_col1, res_col2 = st.columns([1, 2])
72
+
73
+ with res_col1:
74
+ if prediction[0] == 1:
75
+ st.error("🚨 SONUÇ / RESULT: ŞÜPHELİ / FRAUD")
76
+ st.metric(label="Risk", value="HIGH / YÜKSEK")
77
+ else:
78
+ st.success("✅ SONUÇ / RESULT: GÜVENLİ / SAFE")
79
+ st.metric(label="Risk", value="LOW / DÜŞÜK")
80
+
81
+ with res_col2:
82
+ st.subheader("📝 Karar Analizi / Decision Analysis")
83
+ if prediction[0] == 1:
84
+ st.write("🚩 **Neden Şüpheli? / Why Fraud?**")
85
+ st.write("- Tr: İşlem türü yüksek riskli grupta. / En: High-risk transaction type.")
86
+ if amount >= oldbalanceOrg and amount > 0:
87
+ st.write("- Tr: Hesap bakiyesi tamamen boşaltılıyor. / En: Account is being emptied.")
88
+ else:
89
+ st.write("🛡️ **Neden Güvenli? / Why Safe?**")
90
+ st.write("- Tr: Şüpheli bir bakiye hareketi saptanmadı. / En: No suspicious balance movement detected.")
91
+ if type_input in ["PAYMENT", "DEBIT"]:
92
+ st.write("- Tr: Düşük riskli işlem kategorisi. / En: Low-risk category.")
93
+
94
+ st.sidebar.markdown("---")
95
+ st.sidebar.caption("Dev: Esma | Model: Random Forest")
columns.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b0ee326e0fcf79a2c94bcecdd855e006c102ecd03b3f2dba03eb31fefb4b2871
3
+ size 599
fraud_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c37db75a1db2a709964b4d7ea3ee24948dbc49f5a1d1d104aa9a01a5762711a4
3
+ size 3147609