Sahithi27 commited on
Commit
aa855a4
·
verified ·
1 Parent(s): 6effe4f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -17
app.py CHANGED
@@ -2,39 +2,58 @@ import onnxruntime as ort
2
  import gradio as gr
3
  import numpy as np
4
 
5
- # Load ONNX model
 
 
6
  sess = ort.InferenceSession(
7
  "collusion_xgb_model.onnx",
8
  providers=["CPUExecutionProvider"]
9
  )
10
 
11
- # Detect probability output safely
 
 
12
  output_info = sess.get_outputs()
13
  PROB_INDEX = None
 
14
  for i, out in enumerate(output_info):
15
  if len(out.shape) == 2 and out.shape[1] == 2:
16
  PROB_INDEX = i
17
  break
18
 
19
  if PROB_INDEX is None:
20
- raise RuntimeError("Probability output not found in ONNX model")
21
 
22
  print(f"✅ Using output index {PROB_INDEX} as probability tensor")
23
 
 
 
 
 
 
 
 
 
 
 
24
 
 
 
 
25
  def predict(amount, user_txn, driver_txn, pair_count, hour, day):
26
- # IMPORTANT: feature order MUST match training
27
- # Training features:
28
- # [amount, user_txn_count, driver_txn_count, user_driver_pair_count, hour, day_of_week]
 
29
 
30
  X = np.array(
31
  [[
32
- amount,
33
- user_txn,
34
- driver_txn,
35
- pair_count,
36
- hour,
37
- day
38
  ]],
39
  dtype=np.float32
40
  )
@@ -42,10 +61,17 @@ def predict(amount, user_txn, driver_txn, pair_count, hour, day):
42
  outputs = sess.run(None, {sess.get_inputs()[0].name: X})
43
  probs = outputs[PROB_INDEX]
44
 
45
- fraud_prob = probs[0][1] # class-1 probability
46
- return float(fraud_prob)
 
 
 
47
 
 
48
 
 
 
 
49
  gr.Interface(
50
  fn=predict,
51
  inputs=[
@@ -53,9 +79,17 @@ gr.Interface(
53
  gr.Number(label="User Txn Count"),
54
  gr.Number(label="Driver Txn Count"),
55
  gr.Number(label="User–Driver Pair Count"),
56
- gr.Number(label="Hour"),
57
- gr.Number(label="Day of Week"),
 
 
 
 
 
58
  ],
59
- outputs=gr.Number(label="Fraud Probability"),
60
  title="Collusion Fraud Detection (ONNX)",
 
 
 
 
61
  ).launch()
 
2
  import gradio as gr
3
  import numpy as np
4
 
5
+ # ------------------------------------------------
6
+ # Load ONNX model (CPU only)
7
+ # ------------------------------------------------
8
  sess = ort.InferenceSession(
9
  "collusion_xgb_model.onnx",
10
  providers=["CPUExecutionProvider"]
11
  )
12
 
13
+ # ------------------------------------------------
14
+ # Detect probability output tensor safely
15
+ # ------------------------------------------------
16
  output_info = sess.get_outputs()
17
  PROB_INDEX = None
18
+
19
  for i, out in enumerate(output_info):
20
  if len(out.shape) == 2 and out.shape[1] == 2:
21
  PROB_INDEX = i
22
  break
23
 
24
  if PROB_INDEX is None:
25
+ raise RuntimeError("Probability output not found in ONNX model")
26
 
27
  print(f"✅ Using output index {PROB_INDEX} as probability tensor")
28
 
29
+ # ------------------------------------------------
30
+ # Risk bucket logic (PRODUCT FRIENDLY)
31
+ # ------------------------------------------------
32
+ def risk_bucket(p):
33
+ if p >= 0.05:
34
+ return "HIGH RISK"
35
+ elif p >= 0.01:
36
+ return "MEDIUM RISK"
37
+ else:
38
+ return "LOW RISK"
39
 
40
+ # ------------------------------------------------
41
+ # Prediction function
42
+ # ------------------------------------------------
43
  def predict(amount, user_txn, driver_txn, pair_count, hour, day):
44
+ """
45
+ Feature order MUST match training:
46
+ [amount, user_txn_count, driver_txn_count, user_driver_pair_count, hour, day_of_week]
47
+ """
48
 
49
  X = np.array(
50
  [[
51
+ float(amount),
52
+ float(user_txn),
53
+ float(driver_txn),
54
+ float(pair_count),
55
+ float(hour),
56
+ float(day)
57
  ]],
58
  dtype=np.float32
59
  )
 
61
  outputs = sess.run(None, {sess.get_inputs()[0].name: X})
62
  probs = outputs[PROB_INDEX]
63
 
64
+ fraud_prob = float(probs[0][1]) # class-1 probability
65
+
66
+ # Convert to interpretable risk
67
+ risk = risk_bucket(fraud_prob)
68
+ risk_score = int(fraud_prob * 1000) # scaled score for visibility
69
 
70
+ return fraud_prob, risk_score, risk
71
 
72
+ # ------------------------------------------------
73
+ # Gradio UI
74
+ # ------------------------------------------------
75
  gr.Interface(
76
  fn=predict,
77
  inputs=[
 
79
  gr.Number(label="User Txn Count"),
80
  gr.Number(label="Driver Txn Count"),
81
  gr.Number(label="User–Driver Pair Count"),
82
+ gr.Number(label="Hour (0–23)"),
83
+ gr.Number(label="Day of Week (0=Mon, 6=Sun)"),
84
+ ],
85
+ outputs=[
86
+ gr.Number(label="Fraud Probability"),
87
+ gr.Number(label="Risk Score (0–1000)"),
88
+ gr.Text(label="Risk Level"),
89
  ],
 
90
  title="Collusion Fraud Detection (ONNX)",
91
+ description=(
92
+ "This model detects potential user–driver collusion. "
93
+ "Fraud probability is a ranking signal; risk score and bucket are used for decisions."
94
+ ),
95
  ).launch()