AI Compliance in Fintech Risk Models
Design blueprints for building auditable, explainable credit risk assessment models using custom LLMs.
Building an AI system?
Schedule a 15-minute diagnostic call with our senior partners to audit your technical roadmap.
Talk to Versa ➔A credit decision is one of the few places in software where the system is legally required to explain itself. When a consumer is denied credit, the lender must provide specific reasons — not "the model said no," but a concrete, actionable adverse action notice that tells the applicant what factors drove the decision and what they could change. That requirement comes from the Equal Credit Opportunity Act (ECOA) and Regulation B, and it is non-negotiable.
This creates a fundamental tension with modern AI systems. The models that are best at predicting credit risk — deep neural networks, large ensembles, transformer-based architectures — are also the hardest to explain. The models that are easiest to explain — logistic regression, shallow decision trees — leave measurable predictive performance on the table.
The question isn't whether to use AI in credit decisioning. The market has moved past that. The question is how to build a system that satisfies SR 11-7 model risk requirements, produces ECOA-compliant adverse action notices, and still captures the predictive gains that justify the engineering investment.
What regulators actually look for
The OCC's SR 11-7 guidance on model risk management establishes three pillars that any AI-driven credit model must address: model development and documentation, model validation, and ongoing monitoring.
In practice, examiners focus on a smaller set of concrete artifacts:
- Model documentation that describes the development data, the feature engineering decisions, the model architecture, and the rationale for choosing this approach over alternatives. "We used a neural network because it performed better" is insufficient. Examiners want to see the comparison against interpretable baselines and a justification for accepting the additional complexity.
- Sensitivity analysis demonstrating how the model's output changes when individual input features change. If a 10-point increase in a debt-to-income ratio doesn't move the model's output in a direction that makes economic sense, that's a finding.
- Override logging capturing every case where a human overrides the model's recommendation, with the reason documented. A high override rate doesn't necessarily indicate a problem — but an undocumented override rate does.
- Fair lending testing showing that the model doesn't produce disparate impact across protected classes. This means running the model against synthetic populations that vary only on protected attributes and demonstrating that approval rates, pricing, and adverse action reasons don't shift in ways that indicate proxy discrimination.
The common mistake is treating these as documentation requirements — paperwork to fill out after the model is built. They're not. They're architectural requirements that need to be designed into the system from the beginning.
The LLM as justification layer, not decision layer
The architecture that threads this needle uses a two-model approach: a predictive model makes the credit decision, and an LLM generates the human-readable explanation.
The decision model is a gradient-boosted ensemble (XGBoost or LightGBM) trained on structured credit bureau data, application data, and behavioral features. This model is inherently more interpretable than a neural network — SHAP values can be computed per prediction to identify which features drove the output. Gradient-boosted models also produce well-calibrated probability scores, which matters for risk-based pricing.
The justification model is a fine-tuned LLM (typically Llama 3 8B or Mistral 7B, hosted internally) that takes the decision model's output — the probability score, the top contributing features, and their SHAP values — and generates a natural-language rationale. This rationale serves two purposes:
- Internal use. Underwriters reviewing borderline cases see a structured explanation that maps directly to the model's reasoning: "Primary factors: utilization ratio above 85% across revolving accounts, two late payments in the past 12 months, length of credit history below median for this product tier."
- External use. The adverse action notice generator pulls from the same explanation to produce the specific, actionable reasons required by ECOA. The LLM ensures the language is compliant, specific, and doesn't inadvertently reference prohibited factors.
The critical design decision is that the LLM never influences the credit decision itself. It receives the decision as input and produces an explanation as output. This separation means the decision model can be validated and monitored independently, using traditional model risk management practices, without the LLM introducing opacity into the decision logic.
The audit trail: every inference versioned and logged
Every credit decision in the system generates an audit record that contains:
- The input features used for that specific decision, at the moment the decision was made. Not a pointer to the applicant's current record — a snapshot. If the applicant's credit file changes tomorrow, the audit record still reflects what the model saw when it decided.
- The model version that produced the decision, identified by a hash of the model weights. When the model is retrained, the new version gets a new hash. Audit records from the previous version remain linked to that version permanently.
- The SHAP values for the top contributing features. These are computed at inference time and stored alongside the decision. They are the mathematical basis for the explanation.
- The LLM-generated rationale, stored as both the raw structured output and the final formatted adverse action language.
- The timestamp, the decision, and the human disposition — whether the decision was accepted, overridden, or escalated, and by whom.
This record is immutable once written. It lives in an append-only data store (we typically use a partitioned Parquet dataset on encrypted S3 with object lock, or an equivalent on GCP). Retention is governed by the institution's record retention policy — typically seven years for credit decisions under FCRA.
The value of this architecture becomes obvious during an examination. When a regulator asks "why was this applicant denied," the answer isn't a reconstruction — it's a retrieval. Pull the audit record, and everything needed to explain the decision exists in one place: the inputs, the model version, the feature contributions, and the human-readable rationale.
SOC 2, SEC, and data residency
The compliance requirements extend beyond fair lending. SOC 2 Type II controls require demonstrating that access to decision data is restricted, that changes to the model are authorized and logged, and that the processing environment meets defined security standards.
The key controls:
- Access. The inference service runs inside a VPC with no public endpoints. Model weights and training data are encrypted at rest (AES-256) and in transit (TLS 1.3). Access to production model artifacts requires a role that is audited quarterly.
- Change management. Model retraining follows a gated process: data scientist proposes new weights → validation team runs the regulatory test suite (sensitivity analysis, fair lending, performance benchmarks) → model risk committee approves → deployment to production. Each step is logged with the approver's identity and timestamp.
- Retention. Decision records are retained for the regulatory minimum (7 years for FCRA, 25 months for ECOA). PII is tokenized at the point of entry — the audit record contains a reference token, not the applicant's social security number.
For institutions subject to SEC oversight (broker-dealers using AI for margin or lending decisions), additional controls around algorithmic trading and automated decision-making apply. The two-model architecture simplifies this because the decision model can be described in terms regulators are familiar with — features, weights, thresholds — while the LLM handles only the presentation layer.
What this looks like in production
A consumer applies for a personal loan through a digital lending platform. The application is scored in real time. The decision model returns a probability of default of 0.14, which falls above the product's approval threshold of 0.12. The application is declined.
The system generates the following adverse action output:
Reasons for this decision:
- Total revolving utilization (87%) exceeds the typical range for approved applicants in this product tier
- Two payments reported 30+ days past due within the last 12 months
- Average age of open accounts (2.3 years) is below the median for this loan product
- Number of hard inquiries in the past 6 months (4) is above the product threshold
Each reason maps directly to a SHAP value from the decision model. The LLM formatted the language, but the substance came from the model's feature attributions. If the applicant disputes the decision, the audit record contains the exact inputs, the exact model version, and the exact feature contributions that produced it.
The applicant can look at that notice and understand what to work on — reduce utilization, avoid late payments, wait for credit history to season. That's what ECOA requires: specificity and actionability.
Building a system like this takes longer than plugging an LLM into a credit decision pipeline. But the alternative — deploying a model you can't explain to a regulator, generating adverse action notices you can't trace to specific feature contributions, or maintaining a compliance process that depends on manual reconstruction — costs more in the long run. Usually during the examination itself.