Harborline Bank: board pack
Harborline Bank is fictional. This is a demonstration on generated data and public datasets; no real customer, account or transaction of any real institution appears here.
Nothing here is a credit decision, a fraud determination, a suspicious activity finding or investment advice.
For the quarter ended 2026Q2, with data to 2026-08-31. From the head of analytics to the board.
The bank at a glance
We closed the period with total assets of $1,033.6M, gross loans of $720.0M and deposits of $930.6M. Net income over the last twelve months was $13.4M. Our net interest margin for the quarter was 5.60%, the efficiency ratio 50.9%, return on assets 1.72% and return on equity 17.8%. Nonperforming loans were 0.49% of gross loans, and the allowance for credit losses stood at 1.90% of loans. Every one of these figures is computed from the general ledger, which reconciled to the cent this quarter apart from one break I describe below.
Against 191 real FDIC insured banks of our size in our region, our margin and returns sit near the top of the range, for one reason: 28% of our loans are card and consumer installment lending, where most of our peers lend mortgages and to businesses. That same mix is where our credit risk sits.
| Ratio | Harborline (fictional) | Peer 10th | Peer median | Peer 90th | Share of peers below | Better when |
|---|---|---|---|---|---|---|
| Net interest margin | 5.60% | 2.48% | 3.39% | 4.33% | 99% | higher |
| Efficiency ratio | 50.94% | 49.89% | 70.91% | 92.18% | 12% | lower |
| Return on assets | 1.72% | 0.20% | 0.80% | 1.71% | 91% | higher |
| Return on equity | 17.80% | 2.00% | 7.60% | 15.22% | 96% | higher |
| Nonperforming loans | 0.49% | 0.02% | 0.52% | 1.99% | 49% | lower |
| Allowance to loans | 1.90% | 0.50% | 0.93% | 1.47% | 98% | higher |
| Capital ratio (simplified) | 19.35% | 12.58% | 15.38% | 30.39% | 74% | higher |
| Loans to deposits | 78.36% | 69.52% | 89.07% | 107.03% | 20% | higher |
Source: real:fdic, FDIC insured institutions, $0.5 to $2.5 billion in assets, CT DE MA MD NJ NY PA, 2026Q2, as of 2026-08-31.
What moved this quarter, largest first:
| Rank | Insight | Materiality |
|---|---|---|
| 1 | Deposits rose $14.1M from 2026Q1 to 2026Q2 (+1.6%). | $14,119,114 |
| 2 | Installment balances rose $8.4M over the last quarter, to $152.1M. | $8,421,146 |
| 3 | Mortgage balances fell $7.1M over the last quarter, to $518.5M. | $7,071,081 |
| 4 | Gross loans rose $2.6M from 2026Q1 to 2026Q2 (+0.4%). | $2,606,214 |
| 5 | Provision expense fell $2.1M from 2026Q1 to 2026Q2 (-41.7%). | $2,076,773 |
| 6 | Net income rose $1.8M from 2026Q1 to 2026Q2 (+72.4%). | $1,832,114 |
| 7 | Net income in 2026-04 was $1.9M against a trailing average of $0.7M, outside two standard deviations. | $1,224,641 |
| 8 | Net income in 2025-05 was -$0.5M against a trailing average of $0.5M, outside two standard deviations. | $1,077,407 |
Credit quality
The two installment vintages we wrote under the loosened cutoff, 2024Q4 and 2025Q1, reached 10.4% cumulative default by twelve months on book, against 4.0% for the vintages before them. The recession from 2025-03 to 2025-05 added to it. Both effects are real in our data and our models recover them, but neither is visible to the application scorecard, which ranks risk well and understates its level on those vintages.
Delinquency rolls the way it should in a book that mostly pays: a current loan moves to thirty days past due at 1.46% a month, and once there, 54.59% roll on to sixty while 42.21% cure.
Expected loss on the open installment book is $8,409,265 on exposure of $152.1M (5.53%). That uses the scorecard's probability of default adjusted, vintage by vintage, by how far observed defaults have run above it, and loss given default of 79.6% from our own recoveries. On the raw scorecard probability the figure would be $4,925,055.
| Score band | Loans | Exposure | PD (with overlay) | LGD | Expected loss | EL rate |
|---|---|---|---|---|---|---|
| under 560 | 371 | $4.6M | 23.69% | 79.6% | $889,783 | 19.40% |
| 560 to 599 | 7,032 | $71.2M | 9.82% | 79.6% | $5,787,865 | 8.13% |
| 600 to 639 | 6,701 | $62.4M | 3.16% | 79.6% | $1,625,988 | 2.61% |
| 640 and over | 1,724 | $14.0M | 0.91% | 79.6% | $105,629 | 0.75% |
Source: generated, Harborline installment loans, seed 20260831, as of 2026-08-31.
A simplified lifetime view in the shape of CECL, using our vintage curves and the Federal Reserve's supervisory baseline for unemployment, puts lifetime losses on the open book at $19,170,851. It is an illustration of the method, not an audited estimate.
Our portfolio limits all held:
| Limit | Measured | Limit value | Status |
|---|---|---|---|
| Loosened vintages' share of installment balances | 13.03% | 35.00% | within |
| Installment balances 30 or more days past due | 2.58% | 4.00% | within |
| Nonperforming loans to gross loans | 0.54% | 1.00% | within |
| Mortgages' share of gross loans | 72.02% | 75.00% | within |
Fraud and the desk
The card fraud model decides at the threshold that minimises what fraud costs us, not at the one that maximises accuracy. On the three test months it would have cost $24,927 in declined good transactions and missed fraud, against $1,573,327 if we approved everything and $89,153 at the threshold accuracy would pick. It declines with precision 74.8% and catches 97.6% of fraud. The analyst queue takes only alerts at the stricter queue point, where precision is 89.7%.
I would ask the board to read our fraud figures the way the desk does. A fraud label arrives only when the chargeback window closes, 60 days after the transaction. At the end of August, 66.1% of the summer's decisions were still unlabelled, and precision over the labelled ones was 73.4%. A report that counted the unlabelled declines as mistakes would have shown 27.0%. We never publish that number.
Financial crime
Our four monitoring rules fired 649 alerts over the three years, about 18.0 a month, and found 362 of the 422 complete laundering episodes planted in our data to test them. Structuring is where our investigators' time goes: legitimate cash businesses deposit just under the reporting threshold, and only 41.5% of structuring alerts are real. The queue is ordered by a triage model so the likeliest cases are opened first; it never closes an alert on its own. No suspicious activity report is filed from this data.
| Rule | Alerts | Precision | Complete episodes | Found | Recall | Posted in part | Alerts per 100k entries |
|---|---|---|---|---|---|---|---|
| Structuring | 376 | 41.5% | 204 | 156 | 76.5% | 0 | 4.57 |
| Rapid movement | 100 | 100.0% | 100 | 100 | 100.0% | 0 | 1.22 |
| Round tripping | 90 | 100.0% | 24 | 24 | 100.0% | 19 | 1.09 |
| Mule fan in | 83 | 100.0% | 94 | 82 | 87.2% | 0 | 1.01 |
Source: generated, Harborline deposit accounts and their entries, September 2023 to August 2026, seed 20260831, as of 2026-08-31.
Fair lending
Our mortgage applications are generated data with no real HMDA filing behind them, so the team runs our fair lending method on New Jersey's public register, the data an examiner would start from. Across 215,881 decided mortgage applications in 2024 and 2025, Black applicants were denied at 24.0% against 10.7% for white non Hispanic applicants. With income, loan size, loan to value, debt to income, the product, the underwriting system and the lender held fixed, the odds ratio is 1.76 (1.67 to 1.85). The public file has no credit scores, so this is not a finding about any lender; it is the gap a lender's own file review would have to explain, and the one I would expect an examiner to ask us about first.
| Dimension | Group | Odds ratio | 95% low | 95% high | BH q value | Finding at q < 0.05 |
|---|---|---|---|---|---|---|
| race and ethnicity | Black | 1.76 | 1.67 | 1.85 | 0.0000 | higher odds of denial |
| race and ethnicity | Hispanic or Latino | 1.42 | 1.36 | 1.49 | 0.0000 | higher odds of denial |
| race and ethnicity | Asian | 1.42 | 1.34 | 1.49 | 0.0000 | higher odds of denial |
| race and ethnicity | Not provided | 1.40 | 1.33 | 1.47 | 0.0000 | higher odds of denial |
| race and ethnicity | Other or joint | 1.09 | 1.00 | 1.19 | 0.0539 | not distinguishable from the reference |
| sex | Not provided | 0.91 | 0.85 | 0.98 | 0.0136 | lower odds of denial |
| sex | Female | 0.88 | 0.84 | 0.91 | 0.0000 | lower odds of denial |
| sex | Joint | 0.76 | 0.73 | 0.79 | 0.0000 | lower odds of denial |
Source: real:hmda, New Jersey HMDA 2024 and 2025, first lien owner occupied home purchase and refinance applications on 1 to 4 unit homes that reached a decision, as of 2026-08-31.
Our own scorecard uses none of the 32 protected attributes and proxies on our list, every model's features are tested against that list, and every decline carries its principal reasons.
Deposits, rates and liquidity
Deposits stand at $930.6M, and the largest one percent of depositors hold 12.6% of them, which is the figure our liquidity planning starts from. When the policy rate fell 2.58 points, savings passed on 0.38 of the cut and time deposits 0.32 in the first year, because certificates reprice only as they mature. The retention list puts $9,442,588 of expected balance at risk in front of 500 calls.
Over twelve months our balance sheet is close to neutral to rates: a two point rise changes net interest income by -$6,981 and a two point fall by -$175,123, on $54.7M earned over the last year. Our simplified liquidity coverage is 378%, and 180% if the largest one percent of depositors also left.
Stress
On the Federal Reserve's 2026 severely adverse scenario, applied to our own starting point, unemployment at the bank peaks at 10.5 and nine quarters of losses come to $59.8M ($55.9M to $63.9M), 8.3% of loans. Pre provision revenue absorbs them, and the capital ratio ends the horizon at 21.7%. This is an illustrative projection in the shape of the supervisory exercise, not the exercise.
| Scenario | Peak unemployment, bank | Losses over 9 quarters | Low | High | Share of loans | Capital ratio at its lowest | Low | Capital ratio after 9 quarters |
|---|---|---|---|---|---|---|---|---|
| Baseline | 5.1 | $27.2M | $27.2M | $27.2M | 3.8% | 19.8% | 19.8% | 28.8% |
| Severely adverse | 10.5 | $59.8M | $55.9M | $63.9M | 8.3% | 19.8% | 19.8% | 21.7% |
Collections and complaints
We expect about 1,053 unsecured charge offs over the next six months; the method missed by 6.7% on average when backtested, against 21.5% for repeating the last six months. The collections queue is now ordered by the balance likely to be lost without a call, and its first 300 calls cover $4,663,027 of $6,687,255.
On the Bureau's public complaint database, 31.2% of narratives are form letters, and whether a complaint ends in a refund is predicted almost as well from the form as from the consumer's words. We did not approve the model that reads the narratives.
Model risk
We use 8 models in this pack. Each has an SR 11-7 style validation report, a tier, an owner and a monitoring plan; 17 challenges were raised and answered during development and each is on record.
| Model | Title | Function | Tier | Role | Status | Last validated | Conclusion | Test AUROC |
|---|---|---|---|---|---|---|---|---|
| pd_scorecard | Probability of default scorecard (champion) | f02 | 1 | champion | in use | 2026-08-31 | approved with conditions | 0.662 |
| pd_challenger | Probability of default challenger (monotone GBM) | f02 | 1 | challenger | validated | 2026-08-31 | not approved | 0.667 |
| fraud_card | Card transaction fraud (the desk's model) | f04 | 1 | sole | in use | 2026-08-31 | approved | 1.000 |
| fraud_account | Application fraud on the BAF suite | f04 | 1 | sole | in use | 2026-08-31 | approved with conditions | 0.880 |
| aml_triage | Alert triage for transaction monitoring | f05 | 2 | sole | in use | 2026-08-31 | approved | 1.000 |
| attrition | Deposit customer attrition, twelve month horizon | f06 | 2 | sole | in use | 2026-08-31 | approved | 0.583 |
| relief | Monetary relief on consumer complaints | f07 | 2 | sole | development | 2026-08-31 | not approved | 0.869 |
| cure | Cure within ninety days for delinquent loans | f09 | 2 | sole | in use | 2026-08-31 | approved | 0.787 |
The probability of default scorecard is approved with a condition: its calibration on the loosened and recession vintages, which the expected loss overlay covers until it is recalibrated. The challenger model ranks marginally better but not by enough to give up the scorecard's directly stated reasons for a decline, and stays in shadow.
Controls
Of 792 ledger account months, 786 tie to the cent between the balance our ledger reports and the sum of its postings. The one break is in savings deposits, account 2010: $4,217.36 first appearing in 2026-03 and carried into every month since. It was planted to prove the control finds it, and it did, to the account and the month. Every control account ties to its sub ledger in all 216 checks. Each of the 3 defect types planted in the source data was caught at exactly the count planted.
The one recommendation
Hold the installment cutoff at 580, and hold reserves on the installment book at the overlay adjusted expected loss of $8,409,265, which is $3,484,210 above what the scorecard's own probability implies.
The cutoff is in the right place. On every loan whose first year we have seen, lowering it to 560 would have lost $196,493 net, and raising it to 600 would have given up $1,641,356 more margin than it saved in losses. The risk is in the level of default on the vintages we have already written, not in whom we approve today, so the answer is reserves, not a tighter policy.
This lands on consumer lending, and on the scorecard's recalibration condition in model risk management.
What would change it: if the observed over expected ratio on the vintages written since the recession falls back toward one, the overlay and the reserve build shrink with it. If a new loosening shows up in the vintage curves, the cutoff question reopens and I will bring it back.
| Cutoff | Loans declined (+) or added (-) | Defaults among them | Losses avoided | Margin forgone | Net benefit |
|---|---|---|---|---|---|
| 560 | -2,333 | -287 | -$3,096,989 | -$2,900,496 | -$196,493 |
| 580 | 0 | 0 | $0 | $0 | $0 |
| 600 | 3,806 | 259 | $2,669,791 | $4,311,147 | -$1,641,356 |
| 620 | 7,038 | 414 | $4,249,056 | $7,587,812 | -$3,338,757 |
| 640 | 9,085 | 461 | $4,691,778 | $9,450,846 | -$4,759,067 |
Source: generated, booked installment loans with an observed twelve month outcome, seed 20260831, as of 2026-08-31.
Appendix: exhibits
Every figure in this pack comes from a query the pipeline ran for this edition. Each exhibit, with where its data lives:
| Exhibit | Data | Source |
|---|---|---|
| Harborline against real peers | results/f01/peer_strips.parquet |
real:fdic, FDIC BankFind financials |
| The ratios every bank reports, monthly | results/f01/ratios_monthly.parquet |
generated, metrics/bank.yaml |
| Monthly transitions between delinquency buckets | results/f02/roll_rates.parquet |
generated, warehouse marts |
| Share of loans not yet defaulted, by score band at application | results/f02/survival_curves.parquet |
generated, lifelines |
| Cumulative default rate by months on book, one line per origination quarter | results/f02/vintages.parquet |
generated, warehouse marts |
| Denial disparities against the reference group, before and after adjustment | results/f03/adjusted.parquet |
real:hmda, mart_hmda_applications |
| Denial rate by county, unadjusted and adjusted for the application mix | results/f03/county.parquet |
real:hmda, mart_hmda_applications |
| The first reason lenders gave for a denial | results/f03/denial_reasons.parquet |
real:hmda, mart_hmda_applications |
| What parity costs: the search for a less discriminatory alternative | results/None |
real:baf, fraud_account validation report |
| Application fraud under the BAF suite's fairness protocol | results/None |
real:baf, fraud_account validation report |
| Who the card model declines wrongly, by age band and gender | results/None |
replayed, fraud_card validation report |
| Expected cost of fraud by decline threshold, test months | results/f04/cost_curve.parquet |
replayed, fraud_card scored stream |
| What the desk could know, day by day | results/f04/label_lag.parquet |
replayed, fraud_card scored stream |
| Precision and recall across thresholds, test months | results/f04/pr_curve.parquet |
replayed, fraud_card scored stream |
| The investigator's view: alerted communities in the transfer network | results/f05/network.json |
generated, Louvain communities over transfers between customers |
| What each rule finds, against the planted truth | results/f05/rule_scorecard.parquet |
generated, packages/crime |
| Alerts by month and rule | results/f05/alerts_monthly.parquet |
generated, packages/crime |
| Deposits by product | results/f06/deposits_monthly.parquet |
generated, marts.mart_deposits_monthly |
| Checking accounts opened and closed each month | results/f06/deposits_monthly.parquet |
generated, marts.mart_deposits_monthly |
| The policy rate, and what each product pays | results/f06/rates.parquet |
generated, marts.mart_deposits_monthly |
| The retention list: expected balance at risk | results/f06/retention_list.parquet |
generated, marts.mart_deposits_monthly |
| The thirty companies with the most complaints | results/f07/companies.parquet |
real:cfpb, CFPB complaint search API aggregates |
| The conduct risk view: issues ranked by the relief they are likely to cost | results/f07/issues.parquet |
real:cfpb, CFPB export archive, sampled by a salted hash of the complaint id |
| What the narratives are about: topics by month | results/f07/topic_trend.parquet |
real:cfpb, CFPB export archive, sampled by a salted hash of the complaint id |
| Complaints to the Bureau by product and month | results/f07/volume_by_product.parquet |
real:cfpb, CFPB complaint search API aggregates |
| The capital ratio along each scenario | results/f08/stress_paths.parquet |
real:frb_scenarios, marts.mart_scenarios and ledger_stress.link |
| Net interest income over twelve months, parallel rate shocks | results/f08/nii_shocks.parquet |
generated, marts.mart_balance_sheet_monthly |
| Unsecured loans rolling into delinquency each quarter, along the 2026 scenarios | results/f08/stress_paths.parquet |
real:frb_scenarios, marts.mart_scenarios and ledger_stress.link |
| Six month charge offs: forecast against what happened, by origin | results/f09/backtest.parquet |
generated, marts.fct_loan_month |
| The next six months for the loans open today | results/f09/forecast.parquet |
generated, marts.fct_loan_month |
| The collections queue: balance at risk times the chance of not curing | results/f09/queue.parquet |
generated, marts.fct_loan_month |
| Cumulative recoveries after charge off | results/f09/recoveries.parquet |
generated, marts.fct_loan_month |
| The fraud model's monitoring, week by week | results/f10/fraud_weekly.parquet |
replayed, fraud_card |
| Score stability by application quarter, against the development quarters | results/f10/pd_psi_by_quarter.parquet |
generated, pd_scorecard |
| Reported balance against the sum of postings, by account and month | results/f11/reconciliation.parquet |
generated, f11 reconciliation |
| Net benefit of each candidate cutoff, on loans with observed outcomes | results/f12/cutoff_options.parquet |
generated, pd_scorecard scores, loan outcomes, recoveries |