| |
| import os, sys, traceback, joblib, numpy as np, pandas as pd, gradio as gr |
|
|
| MODEL_PATH = "model4_random_forest.pkl" |
|
|
| |
| |
|
|
| _model = None |
|
|
| def get_model(): |
| global _model |
| if _model is not None: |
| return _model |
| try: |
| _model = load_model_joblib(MODEL_PATH) |
| print("Model loaded OK. Type:", type(_model), file=sys.stderr) |
| return _model |
| except Exception as e: |
| print("ERROR LOADING MODEL AT RUNTIME:", e, file=sys.stderr) |
| traceback.print_exc() |
| _model = None |
| return None |
|
|
| def predict(step, tx_type, amount, oldbalanceOrg, oldbalanceDest): |
| try: |
| model = get_model() |
| if model is None: |
| raise RuntimeError("Model unavailable on the server. Check Space logs for load error.") |
| |
| |
| if isinstance(tx_type, str): |
| tx_str = tx_type.strip().upper() |
| if tx_str in TYPE_MAP: |
| tx_mapped = TYPE_MAP[tx_str] |
| else: |
| try: |
| tx_mapped = int(tx_type) |
| except: |
| raise ValueError(f"Unknown type: {tx_type}. Expected one of {list(TYPE_MAP.keys())} or integer 0-4.") |
| else: |
| tx_mapped = int(tx_type) |
|
|
| df = pd.DataFrame([{ |
| "step": int(step), |
| "type": int(tx_mapped), |
| "amount": float(amount), |
| "oldbalanceOrg": float(oldbalanceOrg), |
| "oldbalanceDest": float(oldbalanceDest) |
| }]) |
| X = df[["step","type","amount","oldbalanceOrg","oldbalanceDest"]].values |
| preds = model.predict(X) |
| pred0 = preds[0].item() if hasattr(preds[0], "item") else preds[0] |
| probs = model.predict_proba(X)[0].tolist() if hasattr(model, "predict_proba") else None |
| return {"prediction": int(pred0), "probabilities": probs} |
| except Exception as e: |
| tb = traceback.format_exc() |
| print("PREDICTION ERROR:", tb, file=sys.stderr) |
| return {"error": str(e)} |
|
|