Spaces:
Sleeping
Sleeping
| import dash | |
| from dash import html, dcc, Input, Output, State, callback | |
| import dash_bootstrap_components as dbc | |
| import pandas as pd | |
| import joblib | |
| dash.register_page(__name__, path="/prediction") | |
| # Load model | |
| artifact = joblib.load("models/fraud_mlp_pipeline.joblib") | |
| model = artifact["model"] | |
| threshold = artifact["threshold"] | |
| # Features | |
| feature_names = ['Time'] + [f'V{i}' for i in range(1, 29)] + ['Amount'] | |
| layout = dbc.Container([ | |
| dbc.Row([ | |
| dbc.Col([ | |
| html.Div([ | |
| html.H4("TRANSACTION INPUTS", className="text-white mb-4 fw-bold"), | |
| # Generate Inputs dynamically | |
| *[ | |
| dbc.Input(id=f"feat-{feat}", placeholder=feat, type="number", className="mb-3 bg-dark-glass") | |
| for feat in feature_names | |
| ], | |
| dbc.Button("PREDICT FRAUD", id="predict-btn", className="w-100 py-3 mt-2 fw-bold border-0", | |
| style={"background": "linear-gradient(90deg, #00d2ff 0%, #3a7bd5 100%)"}), | |
| html.Div(id="predict-output", className="mt-4 p-3 result-display text-center") | |
| ], className="div-user-controls p-4") | |
| ], lg=6, md=8, sm=12) | |
| ], justify="center") | |
| ], fluid=True) | |
| def predict_fraud(n, *values): | |
| if n is None: | |
| return "" | |
| try: | |
| df = pd.DataFrame([values], columns=feature_names) | |
| proba = model.predict_proba(df)[:, 1][0] | |
| prediction = "π΄ Fraud Detected!" if proba >= threshold else "π’ Legit Transaction" | |
| return html.Div([ | |
| html.H5(f"Fraud Probability: {proba:.2f}", className="text-info"), | |
| html.H3(prediction, className="text-white fw-bold") | |
| ]) | |
| except Exception as e: | |
| return html.Div([f"β Error: {str(e)}"], className="text-danger") | |