Credora · Analysis flow

Inside RUN_ANALYSIS: each step, its source, rows and time on the live deployment, ending in the PREFERRING top 50 and the CRM export.

Virtual schemas (bank RDS) VS_CBS Oracle · VS_CIF MySQL · VS_LOS PostgreSQL refreshed, then read in place CIBIL relay https://cibil.credora.link consumer (partners) + commercial (companies) GSTN relay gst.credora.link GST_FETCH AA relay aa.credora.link AA_FETCH Refresh VS VS_CBS · VS_CIF VS_LOS Read applications PostgreSQL ⋈ MySQL → APPLICATIONS CIBIL consumer 16 parallel UDFs → CIBIL_CONSUMER CIBIL commercial bulk endpoint → CIBIL_COMMERCIAL GST returns 2–10 y, monthly → GST_FILING Account Aggregator partners, consent → AA_ACCOUNT Features (13) Oracle pushdown → CA_MONTHLY → FEATURES Risk model active version trains v1 if none Score PD PD_SCORE UDF 4 parallel → SCORES Decide offer + limit RAROC vs hurdle → DECISIONS Rank PREFERRING skyline layers until 50 ranked Export to CRM FastAPI backend after the run DECISIONS → VS_CBS.TXN Oracle · ~850k rows GROUP BY in Oracle BucketFS models/pd_<v>.pkl MODEL_REGISTRY CREDORA.CONFIG EBLR · spreads hurdle RAROC 15% Relationship mgrs top 50 offers negotiate in limit RDS PostgreSQL crm offer · offer_event negotiation trail EXECUTE SCRIPT CREDORA.RUN_ANALYSIS('<run>') · as CREDORA_SVC · 1,000 companies · about 20 s (live deployment) Each step is logged in CREDORA.RUN_LOG with its rows and time; the web app shows the SQL, Lua or Python behind it. 1.7 s 3 schemas 1 0.3 s 1,000 rows 2 0.7 s 3,490 rows 3 0.4 s 1,000 rows 4 1.4 s 71,217 rows 5 3.2 s 5,810 rows 6 10.4 s 1,000 rows 7 – 1 model 8 1.9 s 1,000 rows 9 0.06 s 1,000 rows 10 0.02 s 83 rows 11 upsert crm.offer 12 WHERE THE 20 SECONDS GO 1 · 1.7 s 2 3 4 5 · 1.4 s 6 · 3.2 s 7 · 10.4 s 9 · 1.9 s steps 8, 10, 11 together: under 0.1 s features (Oracle pushdown over 850k transactions) take half the run Legend (colour of time and bar = what the step works on) Bank data via virtual schemas Outside-world API (UDF) Exasol SQL / Lua step ML step (UDF, BucketFS) Backend, after the Lua run Next step Source read / write 1 Step number

One call, eleven logged steps

  • • Steps 1–2 read the bank's databases in place through the three virtual schemas
  • • Steps 3–6 call CIBIL, GSTN and AA through the public relays from parallel UDFs
  • • Every step writes its rows and milliseconds to RUN_LOG

Model, then policy

  • • Step 8 uses the active model from BucketFS and trains v1 if none exists
  • • Step 9 scores PD with per-feature attribution in 1.9 s
  • • Step 10 prices the offer and the negotiation limit from CONFIG: RAROC must meet the hurdle

From skyline to the bank's CRM

  • • PREFERRING HIGH RAROC_OFFER PLUS LOW PD PLUS HIGH OFFER_AMOUNT peels skyline layers
  • • Layers are peeled until 50 approved companies are ranked: the RMs' top 50
  • • After the run the backend upserts crm.offer; negotiation steps go to crm.offer_event