Spaces:
Sleeping
Sleeping
| 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 | |
| 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") |