Fraud-Detection / app.py
rahmanmaqbool286's picture
Create app.py
5a56a24 verified
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)