Scores and confidence
score is between 0 and 1, but not every score is a probability. score_kind says which it is.
score_kind |
Meaning | Use it as |
|---|---|---|
calibrated |
Fitted on your own labelled outcomes (Platt scaling) | A probability: 0.30 means about 3 in 10 such cases are bad |
heuristic |
Noisy-OR of published signal weights | A ranking: higher is riskier, not a frequency |
name_similarity |
Best list match similarity | How close the name is; read with dob_check and country_check |
kya |
KYA Score of an AI agent (trust zones GREEN ≥ 0.70, AMBER 0.40–0.70, RED 0.20–0.40, CRITICAL < 0.20) | Agent trust |
null |
The capability decides without a score (for example KYC) | Read decision and reasons |
From score to decision
Each capability maps its score to a decision with cut-offs. Platform defaults are published on each capability page; you can set your own:
- Card and payment:
assess_step_up_at0.40,assess_decline_at0.80 (PUT /api/v1/thresholds). - Statement, credit, merchant bands: low < 0.30 ≤ medium < 0.60 ≤ high (
PUT /api/v1/ward/thresholds), within half to double each default.
See Thresholds.
Evidence tier
Card scores carry an evidence_tier: STRUCTURE_ONLY (rules), DISCRIMINATION (out-of-fold AUC ≥ 0.70 on your data) or CALIBRATION (and calibration error ≤ 0.05). Below CALIBRATION the probability is marked advisory.
Confidence-gated routing
Route on the score and its kind, not on the decision alone, when you want a softer middle:
d = client.decide("payment", txn)
if d.decision == "STEP_UP" and d.score_kind == "calibrated" and d.score < 0.5:
challenge_with_otp() # likely genuine: low-friction step-up
elif d.decision == "STEP_UP":
send_to_review(d.id)