File size: 4,356 Bytes
abb80b9
cb8b117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
abb80b9
cb8b117
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import streamlit as st
import pandas as pd
import joblib

# Sayfa ayarları / Page Settings
st.set_page_config(page_title="Fraud Guard Pro", page_icon="🛡️", layout="wide")

# Modelleri yükle / Load Assets
@st.cache_resource
def load_assets():
    model = joblib.load("fraud_model.pkl")
    cols = joblib.load("columns.pkl")
    return model, cols

model, cols = load_assets()

# --- BAŞLIK KISMI / HEADER SECTION ---
st.markdown("<h1 style='text-align: center;'>🛡️ Fraud Guard Pro</h1>", unsafe_allow_html=True)
st.markdown("<h3 style='text-align: center;'>Finansal Dolandırıcılık Analiz Sistemi | Financial Fraud Analysis System</h3>", unsafe_allow_html=True)
st.markdown("---")

# --- ÖRNEK SENARYOLAR / QUICK SCENARIOS ---
st.subheader("🚀 Hızlı Test Senaryoları / Quick Test Scenarios")
col_s1, col_s2 = st.columns(2)

with col_s1:
    if st.button("🚨 Şüpheli İşlem Örneği / Load Fraud Example"):
        st.session_state.step = 1
        st.session_state.type = "TRANSFER"
        st.session_state.amount = 50000.0
        st.session_state.oldorg = 50000.0
        st.session_state.neworg = 0.0
        st.warning("Şüpheli senaryo yüklendi! / Fraud scenario loaded!")

with col_s2:
    if st.button("✅ Güvenli İşlem Örneği / Load Safe Example"):
        st.session_state.step = 1
        st.session_state.type = "PAYMENT"
        st.session_state.amount = 150.0
        st.session_state.oldorg = 2500.0
        st.session_state.neworg = 2350.0
        st.success("Güvenli senaryo yüklendi! / Safe scenario loaded!")

# --- SOL MENÜ: VERİ GİRİŞİ / SIDEBAR: DATA INPUT ---
st.sidebar.header("📥 İşlem Detayları / Transaction Details")

step = st.sidebar.number_input("Adım / Step", value=st.session_state.get('step', 1))
type_options = ["CASH_OUT", "TRANSFER", "PAYMENT", "DEBIT"]
type_input = st.sidebar.selectbox("Tür / Type", type_options, 
                                 index=type_options.index(st.session_state.get('type', 'CASH_OUT')))
amount = st.sidebar.number_input("Tutar / Amount", value=st.session_state.get('amount', 0.0))
oldbalanceOrg = st.sidebar.number_input("Gönderen Eski Bakiye / Sender Old Bal.", value=st.session_state.get('oldorg', 0.0))
newbalanceOrig = st.sidebar.number_input("Gönderen Yeni Bakiye / Sender New Bal.", value=st.session_state.get('neworg', 0.0))
oldbalanceDest = st.sidebar.number_input("Alıcı Eski Bakiye / Receiver Old Bal.", value=0.0)
newbalanceDest = st.sidebar.number_input("Alıcı Yeni Bakiye / Receiver New Bal.", value=0.0)

# Veriyi hazırlama / Data Preparation
input_df = pd.DataFrame([[step, amount, oldbalanceOrg, newbalanceOrig, oldbalanceDest, newbalanceDest]],
                        columns=["step", "amount", "oldbalanceOrg", "newbalanceOrig", "oldbalanceDest", "newbalanceDest"])

for t in type_options:
    input_df["type_" + t] = 1 if type_input == t else 0

input_df = input_df.reindex(columns=cols, fill_value=0)

# --- ANALİZ VE SONUÇ / ANALYSIS AND RESULT ---
st.divider()
if st.button("🔍 ANALİZ ET / ANALYZE NOW", use_container_width=True):
    prediction = model.predict(input_df)
    
    res_col1, res_col2 = st.columns([1, 2])
    
    with res_col1:
        if prediction[0] == 1:
            st.error("🚨 SONUÇ / RESULT: ŞÜPHELİ / FRAUD")
            st.metric(label="Risk", value="HIGH / YÜKSEK")
        else:
            st.success("✅ SONUÇ / RESULT: GÜVENLİ / SAFE")
            st.metric(label="Risk", value="LOW / DÜŞÜK")

    with res_col2:
        st.subheader("📝 Karar Analizi / Decision Analysis")
        if prediction[0] == 1:
            st.write("🚩 **Neden Şüpheli? / Why Fraud?**")
            st.write("- Tr: İşlem türü yüksek riskli grupta. / En: High-risk transaction type.")
            if amount >= oldbalanceOrg and amount > 0:
                st.write("- Tr: Hesap bakiyesi tamamen boşaltılıyor. / En: Account is being emptied.")
        else:
            st.write("🛡️ **Neden Güvenli? / Why Safe?**")
            st.write("- Tr: Şüpheli bir bakiye hareketi saptanmadı. / En: No suspicious balance movement detected.")
            if type_input in ["PAYMENT", "DEBIT"]:
                st.write("- Tr: Düşük riskli işlem kategorisi. / En: Low-risk category.")

st.sidebar.markdown("---")
st.sidebar.caption("Dev: Esma | Model: Random Forest")