A three-layer knowledge framework — taxonomy, ontology, and knowledge graph — built to ground enterprise AI agents in accurate, governed banking domain knowledge aligned to FIBO.
The problem
AI agents operating in banking hallucinate because the knowledge layer underneath them is informal or absent. Terms like "non-performing loan," "beneficial owner," and "Tier 1 capital" mean specific, legally significant things.
This portfolio demonstrates the full semantic stack required to ground a financial AI system — governed SKOS taxonomy, formal OWL ontology, and instantiated Neo4j knowledge graph — all aligned to FIBO and designed to plug directly into a RAG pipeline or agentic architecture.
What this demonstrates
A SKOS-based taxonomy of 134 banking concepts across seven domains. Each term carries 21 metadata columns: plain-language definitions, AI canonical definitions, scope notes, FIBO alignment, usage constraints, governance fields, and lifecycle state. Structured to ingest into Alation, Collibra, or a RAG pipeline.
A formal OWL ontology in Turtle syntax with subclass hierarchies, object properties, OWL restrictions, and a SKOS ConceptScheme bridge connecting ontology to taxonomy. FIBO namespaces imported throughout. Opens and reasons in Protégé — inference-clean, no unsatisfiable classes.
# Class with FIBO alignment + OWL restriction bk:NonPerformingLoan a owl:Class ; rdfs:subClassOf bk:Loan , [ a owl:Restriction ; owl:onProperty bk:hasDelinquencyStatus ; owl:someValuesFrom bk:DelinquencyStatus ] ; skos:definition "Loan where borrower has failed scheduled payments for 90+ days." ; rdfs:isDefinedBy fibo-be:LoanProducts . # Object property with inverse bk:hasCollateral a owl:ObjectProperty ; owl:inverseOf bk:collateralizesLoan ; rdfs:domain bk:SecuredLoan ; rdfs:range bk:CollateralAsset .
Six synthetic customers across banking segments, their accounts and loans, AML alerts escalating to a SAR filing, a fraud event, and collateral relationships — rich enough to run the analytical queries a bank's AI team would actually need.
Retail Banking
Margaret Chen
Checking, savings, mortgage — standard retail profile, baseline for queries
PEP / AML Risk
David Okonkwo
Politically Exposed Person — two international wires trigger AML alerts escalating to SAR filing
Private Banking
Sarah Whitfield
High-net-worth client — account takeover fraud event flagged and blocked
Non-Performing Loan
Robert Mazur
Delinquent mortgage, 90+ DPD — active collections, collateral LTV tracked
Commercial Banking
Apex Manufacturing
Small business — revolving credit, equipment loan, beneficial ownership graph
Middle Market CRE
Meridian Properties
Commercial real estate — CRE loan, collateral appraisal, LTV, capital reserves
Analytical queries
// Find all NPL customers, loans, collateral, and LTV MATCH (c:Customer)-[:HAS_ACCOUNT]->(a:Account) -[:HAS_LOAN]->(l:Loan {status: 'NonPerforming'}) OPTIONAL MATCH (l)-[:SECURED_BY]->(col:Collateral) RETURN c.name, l.loanId, l.balance, l.daysDelinquent, col.appraisedValue, l.ltvRatio ORDER BY l.daysDelinquent DESC
// Trace PEP → accounts → transactions → AML alerts → SAR MATCH (c:Customer {isPEP: true}) -[:HAS_ACCOUNT]->(a:Account) -[:HAS_TRANSACTION]->(t:Transaction) -[:TRIGGERED]->(alert:AMLAlert) OPTIONAL MATCH (alert)-[:ESCALATED_TO]->(sar:SARFiling) RETURN c.name, c.pepStatus, t.amount, alert.alertType, alert.riskScore, sar.filingDate
// Find customers with 2+ risk flags across any risk type MATCH (c:Customer) WITH c, CASE WHEN c.isPEP THEN 1 ELSE 0 END + CASE WHEN (c)-[:HAS_ACCOUNT]->()-[:HAS_LOAN]-> (:Loan {status:'NonPerforming'}) THEN 1 ELSE 0 END + CASE WHEN (c)-[*]->(:AMLAlert) THEN 1 ELSE 0 END AS riskScore WHERE riskScore >= 2 RETURN c.name, c.segment, riskScore ORDER BY riskScore DESC
// Resolve beneficial ownership chain for commercial entities MATCH path = (owner:Customer) -[r:OWNS*1..3]-> (entity:CommercialEntity) RETURN owner.name, [n IN nodes(path) | n.name] AS ownershipChain, [rel IN relationships(path) | rel.ownershipPct] AS ownershipPercentages
Takeaways
Most practitioners can do one layer well. This portfolio shows taxonomy, formal ontology, and knowledge graph working as a coherent system — which is what a production AI knowledge layer requires.
FIBO alignment requires understanding the ontology's namespace structure, import patterns, and how its classes map to real banking concepts. This demonstrates genuine domain fluency, not surface familiarity.
Steward roles, lifecycle states, approval workflows, and audit fields embedded in the taxonomy model — not afterthoughts. The difference between a semantic artifact and a governable enterprise asset.
Every term has a structured ai_canonical_definition, usage constraints, and scope notes formatted for LLM grounding and RAG retrieval — not just human readability.
This is the kind of work I do for AI teams in finance, healthcare, and regulated industries.