Introduction
When a small business applies for financing, an underwriter looks at its bank statements and sorts every transaction into a category to work out its true revenue and existing debt. The industry is split on how to do this: many lenders still use vendor categories built on keyword rules, some have moved to large language models (LLMs), and since September 2026 some are trying decision models, a new kind of model that picks from a fixed list of categories. We built this benchmark to find out which method to use, from a lender with no labelled data to one with tens of thousands of labelled transactions. We compared 23 methods on 72 synthetic bank statements. We also tested whether each method knows when it is unsure, so that a person checks only the answers it is unsure of.
Our main finding is that once a lender has labelled transactions, a fine-tuned decision model is the best choice. Without labelled data, a frontier LLM is the most accurate choice and a decision model is the cheapest. However, with about 25,000 labelled transactions (roughly 64 three-month bank statements), a fine-tuned decision model passes every model used out of the box (ours, the Taktile fine-tuned model reached 97%). It also knows when it is unsure: when a person checks the sixth of answers it is least sure of, 99.3% of transactions end up right or reviewed, and checking those answers with a second model first cuts the share a person sees to 4.4%.
Want a quick digest of the research and what it means for lenders?
Read the summaryKey Findings
Without labelled data, a frontier LLM is the most accurate choice and a decision model is the cheapest.
Claude Opus 5.5 scored 95.5% at $2.52 per 1,000 transactions. The best decision models scored 92.1 to 93.0% for $0.002 to $0.107.
About 25,000 labelled transactions are enough to fine-tune a decision model past every model used out of the box.
The Taktile fine-tuned model, built on the open Qwen3.5-4B, reached 97% across three test sets after training on 24,400 labelled transactions (about 64 three-month statements). Kev-4B, an open decision model fine-tuned on the same data improved from 80% to 96%.
Fine-tuned decision models know when they are unsure, so only the doubtful answer are checked.
The Taktile fine-tuned model flagged 16% of transactions below 0.90 confidence. With a second model checking them first, a person ended up reviewing 4.4% and 98.8% were right or reviewed.
1. Background: bank statements in small-business lending
A lender typically asks for three to six months of bank statements (a few hundred to several thousand transactions). Each has a date, an amount, and a short description written by the bank, as shown in the example below. The underwriter needs to categorize each transaction, for example as a customer payment, card-processor payout, payroll, bank fee or loan payment. From these categories they work out the business’s true revenue and existing debt. This is harder than it sounds. A deposit might be a customer payment, a transfer from the owner’s other account or the proceeds of a loan, and only a customer payment should count as revenue.
Sample transaction
| Date | Description | Amount |
|---|---|---|
| 03/07/2024 | ACH DEBIT GEORGIA POWER 88473847 PAYMENT | -899.01 |
Category the underwriter assigns: operating expense, a cost of running the business.
This study pays special attention to merchant cash advances, a common form of small-business financing in the US that is repaid through fixed daily or weekly debits. These debits are easy to miss, because the description often names an unfamiliar funder or shows only a number. For every method we report the share of debt repayments it finds, counting loan payments and cash advance repayments, since missing them understates the business’s debt.
Lenders usually buy transaction categories from data vendors, and underwriters correct them by hand or paste transactions into ChatGPT, with one underwriting lead we interviewed putting observed vendor accuracy at around 70 to 80%.
2. Methods for classifying transactions
Methods for this task have changed with each wave of machine learning. Keyword rules came first, then classifiers trained on labelled examples became the standard. Since 2023, many teams have experimented with LLMs, which need no labelled data but are slower and more expensive. Since TypeSafe AI released Jev in September 2026, decision models have brought classification back, while leveraging the advantages of a large pretrained model's knowledge. The table shows how each of the five groups we compared works and what it needs.
Click a method to see how we ran it.
| Method | How it works | What it needs | Examples in this study |
|---|---|---|---|
| Keyword rules | Lists of words and patterns for each category, as in vendor engines | Someone to write and maintain the lists | Our keyword rules |
Keyword rules. Our rules are 24 word patterns, one for each category except "other debit". Each rule applies only to money in or only to money out transactions, and the first match wins. A transaction that no rule matches becomes "other debit" or "other credit". These rules see only the description and whether money came in or went out. | |||
| Trained classifiers | A model learns from labelled transactions which patterns point to each category | Labelled transactions | TF-IDF (bag of words) with logistic regression; bge-small, a text encoder |
Trained classifiers. TF-IDF with logistic regression, the standard text classifier of the 2010s, counts short runs of letters and words. bge-small is a 33-million-parameter text encoder (a model that turns text into numbers representing its meaning) with a classification head, one layer that turns those numbers into a probability for each category. In the main results both learn from 24,400 labelled transactions (64 statements), and each reads the description, whether money came in or went out, a rough amount, the business type and the statement facts. | |||
| LLMs | A general language model reads the definitions and transactions and writes a category for each | Category definitions | Claude Opus 5.5, GPT-6 Sol, Gemini 3.5 Flash-Lite |
LLMs. We ran eight LLMs from Anthropic, OpenAI and Google through Taktile’s platform, at temperature 0. Each request holds 25 transactions from one statement, the category definitions (what each category covers, what it does not, and examples written for the definitions) and a written summary of the statement. The model returns a category for each transaction and a confidence score which estimates how likely that category is to be right. | |||
| Decision models | A model scores every allowed category for each transaction and returns a probability for each | Category definitions | Jev, pplx-decider, Mercury Decide |
Decision models. We called ten decision models with the same definitions and statement summary, Jev through TypeSafe’s API and the others through OpenRouter. Each request asks 25 questions, one per transaction. The model returns the predicted category and a probability for every option. | |||
| Fine-tuned decision models | A decision model trained further on labelled transactions | Category definitions and labelled transactions | The Taktile fine-tuned model, Kev-4B |
Fine-tuned decision models. The Taktile fine-tuned model is a small adapter (about 34 million trained parameters) and a decision head trained on top of Qwen3.5-4B which uses the same 25-question requests the decision models receive. Kev-4B is an open reproduction of Jev with 4 billion parameters, which we fine-tuned with an adapter in the same way. | |||
Each method also attaches a confidence to every answer: LLMs estimate their own, the trained classifiers and decision models return a probability for every category, and the keyword rules use a fixed score. Section 7 tests how well these confidences match accuracy.
The following sections compare these groups as a lender moves from no labelled data to tens of thousands of labelled transactions.
3. Data and test setup
To compare these methods fairly, we needed bank statements with labelled transactions. However, real statements contain the names of businesses, owners and employees, so we built a set of synthetic statements. Their formats and structure follow statements shared by a development partner, but every business, person, identifier and amount is generated.
A generator plans each statement as a business with a bank, an owner, and a schedule of recurring payments (card payouts, payroll, rent, debt repayments) and one-off payments (Figure 1). Because each transaction’s category comes from that plan, the labels are exact, with no person or model needed to label them.
Each statement covers three months of one business’s account and holds about 360 transactions on average (100 to 1,300). We generated three test sets of 24 statements each, 25,593 transactions in all, and for each test set 288 training statements of other businesses, about 100,000 labelled transactions. Most debt repayments in the test sets go to lenders whose names never appear in the training statements.
We report accuracy, the share of debt repayments found, calibration error (the average gap between a method’s confidence and its accuracy, where 0 is perfect) and the billed cost and time to classify 1,000 transactions.
4. Results for all methods
The following table lists every method, click a column header to sort. Figure 2 plots the same table as accuracy against cost per 1,000 transactions.
All 23 methods
| Method | Main test set↓ | Mean, three test sets↕ | Debt repayments found↕ | $ per 1,000↕ | Seconds per 1,000↕ |
|---|---|---|---|---|---|
| 1Taktile fine-tuned model, 24k labelled transactionsfine-tuned decision model | 97.3% | 97.2% | 95.6% | $0.03 | 45 |
| 2Kev-4B, 24k labelled transactionsfine-tuned decision model | 96.4% | 96.4% | 94.2% | $0.03 | 45 |
| 3 | 95.5% | 95.2% | 89.9% | $2.52 | 538 |
| 4 | 94.2% | 94.1% | 94.6% | $0.0002 | 5.5 |
| 4TF-IDF classifier, 24k labelled transactionstrained | 94.2% | 93.2% | 94.9% | <$0.0001 | 0.07 |
| 6 | 94.1% | 93.8% | 82.6% | $0.67 | 528 |
| 7 | 94.0% | 93.7% | 82.8% | $3.30 | 466 |
| 8 | 93.5% | 93.9% | 78.8% | $0.74 | 392 |
| 9 | 93.0% | 92.7% | 78.0% | $0.107 | 69 |
| 10 | 92.8% | 92.7% | 76.7% | $0.089 | 462 |
| 11 | 92.7% | 92.5% | 74.1% | not priced | 84 |
| 12 | 92.4% | 92.4% | 73.5% | $0.042 | 558 |
| 13 | 92.1% | 91.8% | 73.8% | $0.002 | 20 |
| 14 | 91.8% | 91.5% | 75.4% | $0.122 | 253 |
| 15 | 91.0% | 90.2% | 61.4% | $0.040 | 12 |
| 16 | 90.8% | 90.6% | 77.9% | $0.019 | 9 |
| 17 | 90.3% | 90.1% | 74.7% | $0.50 | 286 |
| 18 | 90.0% | 89.3% | 68.2% | $0.225 | 39 |
| 19 | 86.4% | 86.2% | 73.2% | $0.18 | 184 |
| 20 | 80.7% | 80.0% | 50.6% | $0.258 | 929 |
| 21Kev-4B untuned (open copy of Jev)decision model | 80.1% | 78.6% | 51.6% | $0.015 | 1,555 |
| 22 | 78.8% | 80.1% | 46.5% | $0.011 | 42 |
| 23Keyword rulesrules | 43.7% | 44.6% | 15.5% | $0 | 0.01 |
5. Starting without labelled data
A lender starting out has category definitions but no labelled transactions. The choice is then between accuracy and cost (Figure 3). Claude Opus 5.5 was the most accurate method without labels at 95.5% for $2.52 per 1,000 transactions. The best decision models scored 90 to 93% and were far more cost efficient at $0.002 to $0.12.
6. Fine-tuning on your own labelled transactions
Every transaction a lender reviews becomes a labelled example a model can fine-tune on. To see how many labels models need we trained two decision models, an encoder, and TF-IDF (bag of words) on 1,500 to 24,400 labelled transactions.
Classifiers trained from scratch need the most labels. The encoder scored 62.5% after 1,500 labelled transactions and about 94% after 24,400. It took about 103,000 (288 statements) for the encoder to reach comparable accuracy to the other methods.
The Jev-like system one decision model improves fastest, because it already has general knowledge of the world from pre-training, and has also been trained to understand how to make decisions. Kev-4B rose from 79.9% with no labels to 88.9% after 1,500 labelled transactions (4 statements) and 96.4% after 24,400 (64 statements).
The Taktile fine-tuned model starts from Qwen3.5-4B, an open source language model with no decision training. We keep that model frozen and add a small adapter (about 34 million parameters) and a decision head, which learn from the same 25-question requests the decision models receive, with the right category marked on each question. Two passes over 24,400 labelled transactions took 5.4 hours on one H100. It scored 89.6% after 1,500 labelled transactions, 92.5% after 5,700 and 97.3% after 24,400.
Finding
Fine-tuned on 24,400 labelled transactions, a 4-billion-parameter decision model averaged 96.4% (Kev-4B) to 97.2% (the Taktile fine-tuned model) which puts it above every model used out of the box.
7. Confidence and review
In most production implementations, a lender accepts the answers a model is sure of and sends the rest to a human to review. This only works if the confidence is calibrated: of the answers given with 90% confidence, about 90% should be right.
DefinitionWhat calibration error measuresHow we compute expected calibration error, and what it leaves out.ShowHide
A model that answers with 90% confidence should be right about 90% of the time. Calibration error measures how far a model is from that. We use expected calibration error (ECE), the standard measure in machine learning literature, computed in three steps:
- Sort every transaction into one of ten bins by the model’s confidence in its chosen category: 0 to 10%, 10 to 20%, and so on up to 90 to 100%.
- In each bin, compare the average confidence with the share of answers that were actually right. The difference is that bin’s gap.
- Average the gaps, weighting each bin by the share of transactions in it.
Zero is perfect. The Taktile fine-tuned model’s 0.020 means its confidence is off by two points on average. Claude Opus 5.5’s 0.129 means its self-reported confidence is thirteen points away from its accuracy, it says 70% when it is right 90% of the time, so a 0.90 cutoff sends more than half of its answers to review.
To see what this means in practice, we sent every answer below 0.90 confidence to a person and counted an answer as wrong only if it was wrong and not sent to review. The Taktile fine-tuned model sent 15.8% of transactions to review and got 99.2% of the rest right, so 0.7% of all transactions were wrong without a person seeing them. Kev-4B sent 12.3% and left 1.0% wrong.
Sending every answer below 0.90 confidence to a person, our three test sets
| Method | Sent to review | Accuracy of the rest | Wrong without review |
|---|---|---|---|
| Taktile fine-tuned model, 24k transactions | 15.8% | 99.2% | 0.7% |
| Kev-4B fine-tuned, 24k transactions | 12.3% | 98.9% | 1.0% |
| bge-small encoder, 103k transactions | 6.8% | 97.8% | 2.0% |
| Jev, no labels | 29.2% | 97.9% | 1.5% |
| pplx-decider v1.1 27B, no labels | 13.9% | 97.3% | 2.3% |
| Claude Opus 5.5, no labels | 53.8% | 99.4% | 0.3% |
A low calibration error is not enough on its own, because it says nothing about where a model’s mistakes sit. The encoder’s calibration error is as low as the Taktile model’s, but its mistakes tend to arrive with high confidence: at a 0.90 cutoff it sent only 6.8% of transactions to review and still left 2.0% of all transactions wrong without anyone seeing them, three times the Taktile model’s share. Claude Opus 5.5 has the opposite problem: its confidence runs below its accuracy, so the same cutoff would send 54% of transactions to a person. At every review budget the Taktile model leaves fewer errors unseen than the encoder (Figure 5), and Opus 5.5 ranks its answers almost as well but would need a cutoff chosen for the budget rather than 0.90.
Left: accuracy against stated confidence, one dot per decile of each model’s confidence with a 95% interval. Dots on the diagonal are calibrated, above it under-confident, below it over-confident.
Right: at every confidence cutoff, the share of transactions sent to a person against the share of all transactions left wrong without review; lower is better. Dots mark the 0.90 cutoff used in the text; Opus 5.5’s lies off the chart, at 54% reviewed and 0.3% left wrong.
We can also have a second model take over part of that review. For each answer below 0.90, we also asked a secondary model as a check: when the two models agree, the answer is accepted, and only disagreements go to a person.
Ways to handle the Taktile fine-tuned model’s answers below 0.90 confidence, our three test sets
| Setup | Sent to a person | Right or reviewed | Extra cost per 1,000 |
|---|---|---|---|
| Accept every answer | 0% | 97.2% | $0 |
| Jev as a check, disagreements to a person | 4.9% | 98.6% | $0.003 |
| pplx-decider as a check, disagreements to a person | 7.3% | 98.7% | $0.017 |
| GPT-6 Sol as a check, disagreements to a person | 4.4% | 98.8% | $0.12 |
| Claude Opus 5.5 as a check, disagreements to a person | 4.3% | 98.7% | $0.40 |
| Every answer below 0.90 to a person | 15.8% | 99.3% | $0 |
With GPT-6 Sol as the check, a person saw 4.4% of transactions instead of 15.8%, and 98.8% were right or reviewed (an answer sent to a person counts as handled), against 99.3% when every unsure answer goes to a person. The cheapest check, Jev, did almost as well (4.9% and 98.6%) for $0.003 per 1,000 transactions.
Finding
A fine-tuned decision model knows when it is unsure. Sending its answers below 0.90 confidence to a person meant reviewing about one transaction in six, with 99.2% of the rest right and 0.7% of all transactions wrong without review. Checking those answers with a second model first cut the human review to 4.4% of transactions.
8. Why a fine-tuned decision model suits this task
Three properties suit the fine-tuned decision model for this task.
- It classifies by definition. It reads every category’s definition in each request to pick a category, so it can classify wording it has never seen, and even a new category, by its definition. This is a large advantage over an encoder’s classification head, which only knows its training examples and cannot handle new categories.
- It keeps the general knowledge of the pretrained base model. Fine-tuning adds a small adapter to a large pretrained language model, which keeps what that model knows such as the fact that ADP runs payroll, or that a “recovery solutions” firm collects debts.
- It returns a calibrated probability for every category in one pass. Unlike a general LLM, it does so at about $0.03 per 1,000 transactions against $2.52 for Claude Opus 5.5, whose confidence would send 54% of transactions to review.
Figure 6 shows the first property in practice. A classifier trained without cash advance repayments found none of the 744 in the main test set, while Jev found 72% when given only the category’s definition.
9. Conclusion
The best method for classifying bank transactions depends on how much labelled data a lender has. With none, a frontier LLM is the most accurate choice (95.5%) and a decision model the cheapest (92 to 93%). Once about 25,000 transactions have been reviewed (roughly 64 statements), a fine-tuned decision model passes every model used out of the box, with the Taktile fine-tuned model reaching 97%, and its confidence is reliable enough to decide which answers a second model or a person should check.
Taktile Labs, October 2026.
Non-technical summary
The problem: There’s currently no solution for bank statement classification that’s both fast and accurate. Lenders typically buy transaction categories from data vendors, which run at around 70 to 80% accuracy; then, underwriters have to correct them by hand or paste transactions into ChatGPT. That workaround isn’t scalable: it’s people using AI to solve the problem one statement at a time, rather than a model connected to an end-to-end workflow.
What’s changed: Decision models, a very new type of model, offer a way out of the trade-off between accuracy and speed. Fine-tuned on about 25,000 of a lender’s own labelled transactions (roughly 64 statements), a decision model beat the best frontier LLM, at about 1/80th of the cost. The real win: because a decision model knows when it’s unsure, it can be wired into the workflow so that underwriters only see the transactions AI isn’t confident about: about 16%, or 4% with a second model checking first. A frontier LLM at the same confidence cutoff sends more than half to a person.
What lenders can do next: Start with a frontier LLM or an out-of-the-box decision model connected to your underwriting workflow, and store every correction an underwriter makes as labelled data. Once you have around 25,000 data points, fine-tune a decision model on them and set a confidence threshold so only the unsure answers go to review. That’s the path from today’s manual correction to a workflow where most transactions are categorized correctly without anyone touching them.