File size: 1,940 Bytes
b1b4e75 | 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 | import streamlit as st
import pandas as pd
import joblib
import lightgbm as lgb
from geopy.distance import geodesic
model = joblib.load("fraud_detection_model.jb")
encoder = joblib.load("label_encoder.jb")
def haversine(lat1, lon1, lat2, lon2):
return geodesic((lat1, lon1),(lat2,lon2)).km
st.title("Fraud Detection System")
st.write("Enter the Transaction details Below")
merchant = st.text_input("Merchant Name")
category = st.text_input("Category")
amt = st.number_input("Transaction Amount", min_value=0.0, format="%.2f")
lat = st.number_input("Latitude",format="%.6f")
long = st.number_input("Longitude",format="%.6f")
merch_lat = st.number_input("Merchant Latitude",format="%.6f")
merch_long = st.number_input("Merchant Longitude",format="%.6f")
hour = st.slider("Transaction Hour",0,23,12)
day =st.slider("Transaction Day",1,31,15)
month = st.slider("Transaction MOnth",1,12,6)
gender = st.selectbox("Gender",["Male","Female"])
cc_num = st.text_input("Credit Card number")
distance = haversine(lat,long,merch_lat,merch_long)
if st.button("Check For Fraud"):
if merchant and category and cc_num:
input_data = pd.DataFrame([[merchant, category,amt,distance,hour,day,month,gender, cc_num]],
columns=['merchant','category','amt','distance','hour','day','month','gender','cc_num'])
categorical_col = ['merchant','category','gender']
for col in categorical_col:
try:
input_data[col] = encoder[col].transform(input_data[col])
except ValueError:
input_data[col]=-1
input_data['cc_num'] = input_data['cc_num'].apply(lambda x:hash(x) % (10 ** 2))
prediction = model.predict(input_data)[0]
result = "Fraudulant Transaction" if prediction == 1 else " Legitimate Transaction"
st.subheader(f"Prediction: {result}")
else:
st.error("Please Fill all required fields") |