Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import pickle | |
| import numpy as np | |
| import sqlite3 | |
| import hashlib | |
| # ====================== | |
| # Dark FinTech Theme | |
| # ====================== | |
| st.set_page_config(page_title="SecurePay AI", page_icon="π", layout="wide") | |
| st.markdown(""" | |
| <style> | |
| body { background-color: #0E1117; color: white; } | |
| div.stButton > button { | |
| background-color: #1F77B4; | |
| color: white; | |
| border-radius: 8px; | |
| } | |
| </style> | |
| """, unsafe_allow_html=True) | |
| # ====================== | |
| # Database Setup | |
| # ====================== | |
| def init_db(): | |
| conn = sqlite3.connect("database.db") | |
| c = conn.cursor() | |
| c.execute("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT)") | |
| c.execute("""CREATE TABLE IF NOT EXISTS transactions | |
| (amount REAL, hour INT, risk REAL)""") | |
| conn.commit() | |
| conn.close() | |
| init_db() | |
| def hash_password(password): | |
| return hashlib.sha256(password.encode()).hexdigest() | |
| def register_user(username, password): | |
| conn = sqlite3.connect("database.db") | |
| c = conn.cursor() | |
| c.execute("INSERT INTO users VALUES (?,?)", | |
| (username, hash_password(password))) | |
| conn.commit() | |
| conn.close() | |
| def login_user(username, password): | |
| conn = sqlite3.connect("database.db") | |
| c = conn.cursor() | |
| c.execute("SELECT * FROM users WHERE username=? AND password=?", | |
| (username, hash_password(password))) | |
| result = c.fetchone() | |
| conn.close() | |
| return result | |
| def save_transaction(amount, hour, risk): | |
| conn = sqlite3.connect("database.db") | |
| c = conn.cursor() | |
| c.execute("INSERT INTO transactions VALUES (?,?,?)", | |
| (amount, hour, risk)) | |
| conn.commit() | |
| conn.close() | |
| # ====================== | |
| # Load Model | |
| # ====================== | |
| model = pickle.load(open("fraud_model.pkl", "rb")) | |
| # ====================== | |
| # Session State | |
| # ====================== | |
| if "logged_in" not in st.session_state: | |
| st.session_state.logged_in = False | |
| # ====================== | |
| # Login / Register | |
| # ====================== | |
| if not st.session_state.logged_in: | |
| st.title("π SecurePay AI Login") | |
| menu = st.radio("Select Option", ["Login", "Register"]) | |
| username = st.text_input("Username") | |
| password = st.text_input("Password", type="password") | |
| if menu == "Register": | |
| if st.button("Create Account"): | |
| register_user(username, password) | |
| st.success("Account Created Successfully!") | |
| if menu == "Login": | |
| if st.button("Login"): | |
| if login_user(username, password): | |
| st.session_state.logged_in = True | |
| st.success("Login Successful") | |
| else: | |
| st.error("Invalid Credentials") | |
| # ====================== | |
| # Main Dashboard | |
| # ====================== | |
| else: | |
| st.title("π³ SecurePay AI Dashboard") | |
| st.subheader("Fraud Detection for Small Businesses") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| amount = st.number_input("Transaction Amount ($)", min_value=0.0) | |
| hour = st.slider("Transaction Hour", 0, 23, 12) | |
| with col2: | |
| new_customer = st.selectbox("New Customer?", ["No", "Yes"]) | |
| refund_request = st.selectbox("Refund Requested?", ["No", "Yes"]) | |
| location_mismatch = st.selectbox("Location Mismatch?", ["No", "Yes"]) | |
| new_customer = 1 if new_customer == "Yes" else 0 | |
| refund_request = 1 if refund_request == "Yes" else 0 | |
| location_mismatch = 1 if location_mismatch == "Yes" else 0 | |
| if st.button("Analyze Transaction"): | |
| features = np.array([[amount, hour, new_customer, | |
| refund_request, location_mismatch]]) | |
| prediction = model.predict(features)[0] | |
| probability = model.predict_proba(features)[0][1] | |
| save_transaction(amount, hour, probability) | |
| if prediction == 1: | |
| st.error("β οΈ High Fraud Risk Detected") | |
| else: | |
| st.success("β Transaction Appears Safe") | |
| st.progress(int(probability * 100)) | |
| st.write(f"Risk Score: {round(probability * 100, 2)}%") | |
| st.markdown("---") | |
| st.subheader("π Live Analytics") | |
| conn = sqlite3.connect("database.db") | |
| data = conn.execute("SELECT risk FROM transactions").fetchall() | |
| conn.close() | |
| risk_values = [r[0] for r in data] | |
| if risk_values: | |
| st.line_chart(risk_values) | |