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