Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
import numpy as np | |
from sklearn.preprocessing import MinMaxScaler | |
import pickle | |
# Load the trained model | |
with open('knn_model.pkl', 'rb') as file: | |
kn_class = pickle.load(file) | |
# Load the fitted MinMaxScaler | |
with open('scaler.pkl', 'rb') as file: | |
scaler = pickle.load(file) | |
def predict_fraud(cc_num, gender, lat, long, city_pop, unix_time, amount): | |
# Handle categorical feature 'Gender' | |
gender = 1 if gender == 'M' else 0 | |
# Scale the amount feature | |
amount_scaled = scaler.transform([[amount]])[0][0] | |
# Create input dataframe for the model | |
input_data = pd.DataFrame({ | |
'cc_num': [cc_num], | |
'Gender': [gender], | |
'lat': [lat], | |
'long': [long], | |
'city_pop': [city_pop], | |
'unix_time': [unix_time], | |
'Amount_Scaled': [amount_scaled] | |
}) | |
# Predict using the loaded model | |
prediction = kn_class.predict(input_data) | |
# Return the result | |
return 'Fraudulent Transaction' if prediction[0] == 1 else 'Legitimate Transaction' | |
# Define examples, including one example of fraud | |
examples = [ | |
[1234567890123456, 'M', 40.712776, -74.005974, 8398748, 1614575732, 100.0], # Legitimate transaction | |
[2345678901234567, 'F', 34.052235, -118.243683, 3990456, 1614575832, 200.0], # Legitimate transaction | |
[3456789012345678, 'M', 37.774929, -122.419416, 883305, 1614575932, 5000.0] # Fraudulent transaction | |
] | |
# Define Gradio interface | |
interface = gr.Interface( | |
fn=predict_fraud, | |
inputs=[ | |
gr.Number(label="Credit Card Number"), | |
gr.Radio(['M', 'F'], label="Gender"), | |
gr.Number(label="Latitude"), | |
gr.Number(label="Longitude"), | |
gr.Number(label="City Population"), | |
gr.Number(label="Unix Time"), | |
gr.Number(label="Transaction Amount") | |
], | |
outputs="text", | |
title="SafeTransact", | |
description="Enter the transaction details to predict if it is fraudulent or legitimate.", | |
examples=examples | |
) | |
# Launch the interface | |
interface.launch(inline=False) |