File size: 3,669 Bytes
87646ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import joblib

# Load the model
model = joblib.load("fraud_model.pkl")

# Real-world feature mappings
real_world_mapped_data = {
    "-0.986639536": "Jamshidov Ozod",  # Latitude of user's location
    "0.054619774": "Tashkent",  # Longitude of user's location (close to Tashkent)
    "0.89218939": "3 seconds since the last transaction",  # Time of transaction
    "1.238546301": "100,000 UZS spent",  # Amount spent
    "1.153949202": "Xiaomi Phone",  # Device used for transaction
    "-0.443156858": "ATM withdrawal",  # Transaction type
    "1.158792971": "Afternoon (2 PM)",  # Time of day
    "-0.234932879": "5 transactions today",  # Frequency of transactions
    "-0.748284316": "10 km from user's home",  # Distance from home location
    "0.19999764": "50,000 UZS (past avg transaction amount)",  # User's past avg transaction amount
    "-0.377070284": "Retail store (Grocery)",  # Merchant category
    "-0.086545898": "Tashkent ATM branch",  # Bank branch or ATM code
    "0.217167156": "2,000,000 UZS spending limit",  # User's spending limit
    "0.314289834": "35 years old",  # User's age
    "1.295545516": "Frequent user behavior",  # Transaction behavior
    "-0.818801496": "1,500,000 UZS current account balance",  # User's current balance
    "0.059642158": "20 minutes between transactions",  # Average time between transactions
    "-0.68956288": "Middle-income category",  # User's income category
    "0.684420234": "Low-risk score",  # User's risk score based on past behavior
    "0.744324727": "750 credit score",  # User's credit score
    "-0.15608398": "Mobile app transaction",  # Transaction channel
    "-0.590576405": "Credit card",  # Card type
    "0.432953111": "2 failed login attempts",  # Number of failed login attempts
    "-0.337631423": "OTP verification",  # Transaction approval method (e.g., OTP)
    "-0.272390765": "1 hour since last login",  # Time since last login
    "-0.551474596": "Employed",  # User's employment status
    "0.171669591": "Transaction within Uzbekistan",  # Transaction country
    "0.012712389": "One-time purchase",  # Transaction recurrence (single purchase)
    "148.81": "148,810 UZS spent",  # Transaction amount
    "0.217684965": "3 days after first transaction",
    "0.3333": "4 days after first transaction"  # Transaction date
}

# Streamlit UI
st.title("Credit Card Fraud Detection")

st.write("### Test Case 1: Jamshidov Ozod")
if st.button("Run Fraud Detection on Test Case"):
    # The mapped PCA values for the test case
    mapped_pca_values = [
        -0.986639536, 0.054619774, 0.89218939, 1.238546301, 1.153949202,
        -0.443156858, 1.158792971, -0.234932879, -0.748284316, 0.19999764,
        -0.377070284, -0.086545898, 0.217167156, 0.314289834, 1.295545516,
        -0.818801496, 0.059642158, -0.68956288, 0.684420234, 0.744324727,
        -0.15608398, -0.590576405, 0.432953111, -0.337631423, -0.272390765,
        -0.551474596, 0.171669591, 0.012712389, 148.81, 0.3333
    ]
    prediction = model.predict([mapped_pca_values])
    st.write(f"Prediction: {'Fraud' if prediction[0] == 1 else 'Non-fraud'}")

st.write("### Test Case 2: Positive Test")
if st.button("Run Fraud Detection on Positive Case"):
    # Modify some values to simulate a fraudulent transaction
    positive_case_values = [
        -4.5, 5.8, 1.2, 7.6, 3.1,
        2.0, -1.5, 2.4, 5.5, 0.8,
        2.2, -0.5, 3.7, 1.9, 4.3,
        2.8, 3.1, 2.2, 4.5, 5.0,
        2.1, 1.7, 1.9, -1.2, -0.8,
        2.6, 1.5, 2.0, 75.8, 1.2
    ]
    prediction = model.predict([positive_case_values])
    st.write(f"Prediction: {'Fraud' if prediction[0] == 1 else 'Non-fraud'}")