CoolFace
Datasetpublic

VaidhyaMegha/bank-model-risk-kg

Bank Model-Risk Knowledge Graph 520 nodes. 2,391 edges. A synthetic bank's entire model-risk inventory as a graph — models, the data and assumptions behind them, their validations and findings, the regulations that govern them, and the submissions and decisions they drive. Built with Samyama Graph. Generator and loader: samyama-ai/bank-model-risk-kg. Entirely synthetic — this is the point, not a caveat Every record here is generated. It represents no real… See the full description on the dataset page: https://huggingface.co/datasets/VaidhyaMegha/bank-model-risk-kg.

sourceHugging Faceapache-2.0updated 25d agoView on Hugging Face
0likes149downloads
Dataset Card

Bank Model-Risk Knowledge Graph

520 nodes. 2,391 edges. A synthetic bank's entire model-risk inventory as a graph — models, the data and assumptions behind them, their validations and findings, the regulations that govern them, and the submissions and decisions they drive.

Built with Samyama Graph. Generator and loader: samyama-ai/bank-model-risk-kg.

Entirely synthetic — this is the point, not a caveat

Every record here is generated. It represents no real institution, no real model, no real person. The 28 Person nodes are fabricated names attached to fabricated roles.

That makes this dataset unusual and useful: model-risk inventories are exactly the kind of data banks cannot share, so the research and tooling around them is built on descriptions rather than instances. This is a complete, internally consistent instance you can query, benchmark against, and break, with nothing to redact and no licence to negotiate.

Licence: Apache-2.0 — covering both the generator and the data, because the data is the generator's output. No upstream source, no third-party terms, no attribution obligation beyond Apache-2.0 itself.

Reproducible by construction

etl/generate.py fixes SEED = 42 "so the graph (and its snapshot hash) is reproducible." That claim holds: this dataset was produced by running the generator and loader from scratch against an empty engine, and the result matched the snapshot committed in the repository exactly — 520 nodes, 2,391 edges, 12 labels, 17 edge types.

You can regenerate it yourself and get the same graph.

Why a graph

SR 11-7, Basel, IFRS 9, ECB TRIM and the EU AI Act all demand the same thing: trace a model's full lineage — data → assumptions → validation → regulation → the submissions and decisions it drives — and explain why. That is a path query. Tables make it a join problem and documents make it a reading problem.

cypher
// Full lineage of one model, in one traversal
MATCH path = (d:DataSource)<-[:DEPENDS_ON]-(m:Model)-[:VALIDATED_BY]->(v:Validation)
             -[:RAISED]->(f:ValidationFinding)
WHERE m.name = $model
RETURN path

// Which regulations does a model touch, and are the controls that satisfy them evidenced?
MATCH (m:Model)-[:GOVERNED_BY]->(r:RegulatoryRequirement)
OPTIONAL MATCH (c:Control)-[:SATISFIES]->(r)
OPTIONAL MATCH (v:Validation)-[:EVIDENCES]->(c)
RETURN r.name, count(DISTINCT c) AS controls, count(DISTINCT v) AS evidenced

// Downstream blast radius — models feeding models feeding submissions
MATCH (m:Model)-[:FEEDS*1..3]->(downstream)
RETURN m.name, count(DISTINCT downstream) AS reaches
ORDER BY reaches DESC LIMIT 10

Files

Nodes carry an id; edges reference those ids as src and tgt.

nodes/

FileRows
validationfinding.csv173
validation.csv136
model.csv80
person.csv28
feature.csv24
regulatoryrequirement.csv16
datasource.csv15
assumption.csv12
control.csv12
decision.csv10
businessunit.csv8
submission.csv6

edges/

FileRowsConnects
uses_feature.csv365Model → Feature
depends_on.csv287Model → DataSource
controlled_by.csv237Model → Control
governed_by.csv201Model → RegulatoryRequirement
feeds.csv177Model → Model, Model → Submission
raised.csv173Validation → ValidationFinding
makes_assumption.csv147Model → Assumption
evidences.csv136Validation → Control
performed_by.csv136Validation → Person
validated_by.csv136Model → Validation
used_in.csv85Model → Decision
belongs_to.csv80Model → BusinessUnit
developed_by.csv80Model → Person
owned_by.csv80Model → Person
member_of.csv28Person → BusinessUnit
derived_from.csv24Feature → DataSource
satisfies.csv19Control → RegulatoryRequirement

Model is the hub — 13 of the 17 edge types originate there, which is what a model-risk inventory looks like when you draw it.

Usage

python
from datasets import load_dataset
models = load_dataset("VaidhyaMegha/bank-model-risk-kg", "model", revision="v1.0")
bash
docker run --rm -p 8080:8080 -p 6379:6379 public.ecr.aws/f9f6l5u4/samyama-graph:1.1.0
curl -X POST localhost:8080/api/snapshot/import -F "file=@bank-model-risk.sgsnap"

Verification

  • Totals reconcile against the snapshot header: 520 nodes, 2,391 edges.
  • The freshly generated graph matched the repository's committed snapshot exactly — same counts, same 12 labels, same 17 edge types. The fixed-seed reproducibility claim is true.
  • The loader reported back from the engine: "server reports: 520 nodes, 2391 edges".
  • 0 dangling edges. 0 orphan nodes — every node participates in at least one relationship.
  • Round-trip verified after upload.

Limitations

  • Synthetic, so it is a plausible shape rather than a real distribution. Findings-per- validation, models-per-business-unit and similar ratios come from the generator's parameters, not from any bank. Use it to test queries, tooling and teaching; do not infer industry statistics from it.
  • The regulatory layer is nominal. RegulatoryRequirement nodes name real frameworks, but their content is not the text of those regulations and nothing here is a compliance interpretation.
  • No time dimension on most of the graph — this is an inventory snapshot, not a history of how the inventory changed.
  • Findings carry severity but no remediation lifecycle.

Citation

Bank Model-Risk Knowledge Graph, v1.0 (520 nodes, 2,391 edges). Synthetic.
Built with Samyama Graph. https://huggingface.co/datasets/VaidhyaMegha/bank-model-risk-kg
Generator: https://github.com/samyama-ai/bank-model-risk-kg  (SEED = 42)
Licence: Apache-2.0. All data generated; represents no real institution.