RFA-PCA-Model-CAS / slapp.py
cmasukume's picture
Update slapp.py
098b147 verified
import streamlit as st
import pickle
import pandas as pd
# Load the saved model
@st.cache_resource # Cache the model loading to avoid reloading on each run
def load_model():
try:
model = pickle.load(open('model.pkl', 'rb'))
return model
except Exception as e:
st.error(f"Error loading model: {e}")
return None
model = load_model()
# Title of the app
st.title("Fraud Detection API")
st.markdown("Welcome to the Fraud Detection API! Please enter the transaction details below:")
# Tabs for input sections
tab1, tab2, tab3 = st.tabs(["Basic Info", "Features (V1 - V14)", "Features (V15 - V28)"])
# Horizontal layout for Basic Info
with tab1:
st.header("Basic Information")
col1, col2 = st.columns(2)
with col1:
time = st.number_input("Time", min_value=0.0, step=0.1)
with col2:
amount = st.number_input("Amount", min_value=0.0, step=0.1)
# Horizontal layout for Features V1 - V14
with tab2:
st.header("Features (V1 - V14)")
cols = st.columns(7)
with cols[0]:
v1 = st.number_input("V1", step=0.01)
v2 = st.number_input("V2", step=0.01)
with cols[1]:
v3 = st.number_input("V3", step=0.01)
v4 = st.number_input("V4", step=0.01)
with cols[2]:
v5 = st.number_input("V5", step=0.01)
v6 = st.number_input("V6", step=0.01)
with cols[3]:
v7 = st.number_input("V7", step=0.01)
v8 = st.number_input("V8", step=0.01)
with cols[4]:
v9 = st.number_input("V9", step=0.01)
v10 = st.number_input("V10", step=0.01)
with cols[5]:
v11 = st.number_input("V11", step=0.01)
v12 = st.number_input("V12", step=0.01)
with cols[6]:
v13 = st.number_input("V13", step=0.01)
v14 = st.number_input("V14", step=0.01)
# Horizontal layout for Features V15 - V28
with tab3:
st.header("Features (V15 - V28)")
cols = st.columns(7)
with cols[0]:
v15 = st.number_input("V15", step=0.01)
v16 = st.number_input("V16", step=0.01)
with cols[1]:
v17 = st.number_input("V17", step=0.01)
v18 = st.number_input("V18", step=0.01)
with cols[2]:
v19 = st.number_input("V19", step=0.01)
v20 = st.number_input("V20", step=0.01)
with cols[3]:
v21 = st.number_input("V21", step=0.01)
v22 = st.number_input("V22", step=0.01)
with cols[4]:
v23 = st.number_input("V23", step=0.01)
v24 = st.number_input("V24", step=0.01)
with cols[5]:
v25 = st.number_input("V25", step=0.01)
v26 = st.number_input("V26", step=0.01)
with cols[6]:
v27 = st.number_input("V27", step=0.01)
v28 = st.number_input("V28", step=0.01)
# Button to make predictions
if st.button("Predict"):
if model:
# Create a DataFrame from the input data
transaction_data = pd.DataFrame({
'Time': [time],
'V1': [v1], 'V2': [v2], 'V3': [v3], 'V4': [v4], 'V5': [v5], 'V6': [v6],
'V7': [v7], 'V8': [v8], 'V9': [v9], 'V10': [v10], 'V11': [v11], 'V12': [v12],
'V13': [v13], 'V14': [v14], 'V15': [v15], 'V16': [v16], 'V17': [v17], 'V18': [v18],
'V19': [v19], 'V20': [v20], 'V21': [v21], 'V22': [v22], 'V23': [v23], 'V24': [v24],
'V25': [v25], 'V26': [v26], 'V27': [v27], 'V28': [v28], 'Amount': [amount]
})
# Perform prediction
prediction = model.predict(transaction_data)
# Display results
if prediction[0] == 0:
st.success("✅ Acceptable transaction")
else:
st.error("🚨 Fraudulent transaction")
else:
st.error("Model not loaded.")