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()