Spaces:
Sleeping
Sleeping
import streamlit as st | |
import numpy as np | |
import pandas as pd | |
import joblib | |
# Library Random Data | |
from scipy.stats import randint | |
from datetime import datetime, timedelta | |
from sklearn.utils import shuffle | |
def model_page(): | |
st.title("Model Prediction of Credit Card Fault") | |
st.write("The model predicts whether the customer's transaction is fraud or not") | |
st.sidebar.header('User Input Features') | |
input_data = user_input() | |
st.subheader('User Input') | |
st.write(input_data) | |
# Load the model using a context manager to ensure the file is closed | |
with open("XGB_best_model.pkl", "rb") as f: | |
load_model = joblib.load(f) | |
prediction = load_model.predict(input_data) | |
if prediction == 1: | |
prediction = 'The Transaction is Fraud' | |
else: | |
prediction = 'The Transaction is Legit' | |
st.write('Based on user input, the model predicted: ') | |
st.write(prediction) | |
def user_input(num_rows=1): | |
data = generate_data(num_rows) | |
return data | |
def generate_data(num_rows=555719): | |
trans_date_trans_time = st.sidebar.date_input("Transaction Date", value=datetime.now(), min_value=datetime.now() - timedelta(days=365), max_value=datetime.now()) | |
trans_date_trans_time = [trans_date_trans_time for _ in range(num_rows)] | |
cc_num = st.sidebar.number_input("Credit Card Number", value=500000, min_value=100000, max_value=999999) | |
cc_num = [cc_num for _ in range(num_rows)] | |
merchant = st.sidebar.selectbox("Merchant", ['Merchant1', 'Merchant2', 'Merchant3']) | |
merchant = [merchant for _ in range(num_rows)] | |
category = st.sidebar.selectbox("Category", ['Personal', 'Childcare', 'Food', 'Transportation']) | |
category = [category for _ in range(num_rows)] | |
amt = st.sidebar.number_input("Amount", value=500, min_value=0, max_value=100000) | |
amt = [amt for _ in range(num_rows)] | |
first = st.sidebar.text_input("First Name") | |
first = [first for _ in range(num_rows)] | |
last = st.sidebar.text_input("Last Name") | |
last = [last for _ in range(num_rows)] | |
gender = st.sidebar.selectbox("Gender", ['Male', 'Female']) | |
gender = [gender for _ in range(num_rows)] | |
street = st.sidebar.text_input("Street") | |
street = [street for _ in range(num_rows)] | |
city = st.sidebar.text_input("City") | |
city = [city for _ in range(num_rows)] | |
state = st.sidebar.selectbox("State", ['NY', 'CA', 'IL', 'TX']) | |
state = [state for _ in range(num_rows)] | |
zip_code = st.sidebar.text_input("Zip Code") | |
zip_code = [zip_code for _ in range(num_rows)] | |
lat = st.sidebar.number_input("Latitude", value=40.7128, min_value=-90., max_value=90.) | |
lat = [lat for _ in range(num_rows)] | |
long_ = st.sidebar.number_input("Longitude", value=-74.0060, min_value=-180., max_value=180.) | |
long_ = [long_ for _ in range(num_rows)] | |
city_pop = st.sidebar.number_input("City Population", value=10000, min_value=10000, max_value=1000000) | |
city_pop = [city_pop for _ in range(num_rows)] | |
job = st.sidebar.selectbox("Job", ['Software Engineer', 'Doctor', 'Lawyer', 'Teacher']) | |
job = [job for _ in range(num_rows)] | |
dob = st.sidebar.date_input("Date of Birth", value=datetime.now() - timedelta(days=365*70), min_value=datetime.now() - timedelta(days=365*100), max_value=datetime.now()) | |
dob = [dob for _ in range(num_rows)] | |
trans_num = np.arange(1, num_rows + 1) | |
unix_time = st.sidebar.number_input("Unix Time", value=int(datetime.now().timestamp()), min_value=0, max_value=int(datetime.now().timestamp())) | |
unix_time = [unix_time for _ in range(num_rows)] | |
merch_lat = st.sidebar.number_input("Merchant Latitude", value=40.7128, min_value=-90., max_value=90.) | |
merch_lat = [merch_lat for _ in range(num_rows)] | |
merch_long = st.sidebar.number_input("Merchant Longitude", value=-74.0060, min_value=-180., max_value=180.) | |
merch_long = [merch_long for _ in range(num_rows)] | |
age = st.sidebar.number_input("Age", value=30, min_value=18, max_value=80) | |
age = [age for _ in range(num_rows)] | |
data = { | |
'Trans_date_trans_time': trans_date_trans_time, | |
'Cc_num': cc_num, | |
'Merchant': merchant, | |
'Category': category, | |
'Amt': amt, | |
'First': first, | |
'Last': last, | |
'Gender': gender, | |
'Street': street, | |
'City': city, | |
'State': state, | |
'Zip': zip_code, | |
'Lat': lat, | |
'Long': long_, | |
'City_pop': city_pop, | |
'Job': job, | |
'Dob': dob, | |
'Trans_num': trans_num, | |
'Unix_time': unix_time, | |
'Merch_lat': merch_lat, | |
'Merch_long': merch_long, | |
'age': age, | |
'category': category, | |
'amt': amt, | |
'state': state, | |
'job': job | |
} | |
# Create a Pandas DataFrame | |
df = pd.DataFrame(data) | |
return df | |
# def main(): | |
# st.title("Credit Card Transaction Data") | |
# st.write("This app generates random credit card transaction data.") | |
# num_rows = st.slider("Number of rows", 100, 100000, 555719) | |
# df = generate_data(num_rows) | |
# st.write(df) | |
# if __name__ == "__main__": | |
# main() |