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("

🛡️ Fraud Guard Pro

", unsafe_allow_html=True) st.markdown("

Finansal Dolandırıcılık Analiz Sistemi | Financial Fraud Analysis System

", 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")