Nav772's picture
Upload folder using huggingface_hub
7537ea4 verified
import gradio as gr
import pickle
import numpy as np
import json
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
with open('metrics.json', 'r') as f:
metrics = json.load(f)
with open('retrain_report.json', 'r') as f:
retrain_report = json.load(f)
def predict(amount, hour, day_of_week, distance_from_home,
distance_from_last_txn, ratio_to_median, num_txn_last_24h,
is_foreign, merchant_risk_score, card_age_months):
features = np.array([[amount, hour, day_of_week, distance_from_home,
distance_from_last_txn, ratio_to_median,
num_txn_last_24h, int(is_foreign),
merchant_risk_score, card_age_months]])
prob = model.predict_proba(features)[0]
return {'Legitimate': float(prob[0]), 'Fraud': float(prob[1])}
def get_model_info():
m = metrics.get('metrics', {})
r = retrain_report
lines = []
lines.append('Last updated: ' + metrics.get('timestamp', 'N/A'))
lines.append('F1 Score: ' + str(round(m.get('f1', 0), 4)))
lines.append('ROC AUC: ' + str(round(m.get('roc_auc', 0), 4)))
lines.append('Precision: ' + str(round(m.get('precision', 0), 4)))
lines.append('Recall: ' + str(round(m.get('recall', 0), 4)))
lines.append('')
lines.append('Retrain Decision: ' + str(r.get('decision', 'N/A')))
lines.append('Reason: ' + str(r.get('reason', 'N/A')))
drift = r.get('drift', {})
lines.append('Drift Detected: ' + str(drift.get('dataset_drift', 'N/A')))
lines.append('Drifted Features: ' + str(drift.get('drifted_features', [])))
return chr(10).join(lines)
with gr.Blocks() as demo:
gr.Markdown('# Fraud Detection System (Auto-Retrained)')
gr.Markdown('This model is automatically retrained when data drift is detected.')
with gr.Tab('Predict'):
with gr.Row():
with gr.Column():
amount = gr.Number(value=50.0, label='Transaction Amount ($)')
hour = gr.Slider(0, 23, value=14, step=1, label='Hour of Day')
day = gr.Slider(0, 6, value=3, step=1, label='Day of Week (0=Mon)')
dist_home = gr.Number(value=10.0, label='Distance from Home (km)')
dist_last = gr.Number(value=5.0, label='Distance from Last Txn (km)')
with gr.Column():
ratio = gr.Number(value=1.0, label='Ratio to Median Spending')
n_txn = gr.Slider(0, 20, value=3, step=1, label='Txns in Last 24h')
foreign = gr.Checkbox(value=False, label='Foreign Transaction')
merchant = gr.Slider(0, 1, value=0.2, step=0.05, label='Merchant Risk Score')
card_age = gr.Slider(1, 120, value=36, step=1, label='Card Age (months)')
predict_btn = gr.Button('Analyze Transaction', variant='primary')
output = gr.Label(num_top_classes=2, label='Result')
predict_btn.click(
fn=predict,
inputs=[amount, hour, day, dist_home, dist_last,
ratio, n_txn, foreign, merchant, card_age],
outputs=output
)
gr.Examples(
examples=[
[25.0, 14, 2, 5.0, 3.0, 0.8, 2, False, 0.1, 48],
[500.0, 3, 5, 100.0, 80.0, 5.0, 10, True, 0.7, 6],
[1200.0, 2, 6, 200.0, 150.0, 8.0, 15, True, 0.9, 3],
],
inputs=[amount, hour, day, dist_home, dist_last,
ratio, n_txn, foreign, merchant, card_age],
)
with gr.Tab('Model Info'):
info_btn = gr.Button('Show Model Info')
info_output = gr.Textbox(label='Model Details', lines=12)
info_btn.click(fn=get_model_info, outputs=info_output)
demo.launch()