Private AI Valuation Agent Week 5: Local LLM vs. Rules

A week-five head-to-head pits a local 8B parameter language model against an existing rule-based matcher for entity resolution, and the rules win on every measure that matters.

3:35 video3 min readWatch on YouTube

It's easy to assume a language model will outperform a hand-built rule-based system, especially once it starts answering with high confidence. Week five of the Private AI Valuation Agent project tests that assumption directly: an 8-billion parameter local model is given the exact same evidence as a working rule-based matcher, and the result is reported honestly, even though it isn't the result that makes the model look good.

Same evidence, one wrong direction

Both systems see identical inputs: the name on a filing, the security title, the fund that filed it, and a list of eleven candidate companies, seven from the core universe plus four from a watch list. Nothing else, no price data, no answer key. Run across 322 calls on a single machine, at about three seconds per call with zero failures, the rules scored 99.6% precision. The local model scored 94.5%. On paper, a five-point gap sounds survivable. Counted in actual records instead of individual test cases, it isn't: one wrong entity match doesn't stay one wrong record, it becomes 196, because a single mislabeled name gets applied across every holding that shares it.

Where the model actually broke

The failure mode was consistent: the model kept promoting resemblance to a match. Shown a company called "Hyperscale Data," it answered "Scala," and when asked to justify the answer, stated that Hyperscale Data is the parent company of Scala, a relationship that doesn't exist. The model didn't misread the filing; it invented a corporate fact and reported it at 95% confidence. A separate case, "Loan Scaled Agile Incorporated 2021 unit term loan," was matched to "Scala" again, this time purely because the words looked alike, at full confidence, affecting 32 holdings that carry that name. A third case involved a filing name, "XAI3FT50," which is actually an internal Fidelity security code, not a ticker or company name at all. The model matched it to "XI" at full confidence based on three overlapping characters, affecting eight holdings that had nothing to find in the first place.

The overconfidence problem

The most consequential finding wasn't any single wrong answer, it was the pattern in the confidence scores. Of the 322 answers, the model reported full confidence on 315 of them. Twelve of the fifteen answers that disagreed with the correct labels came back at 95% confidence or higher. That means the model's own confidence score can't be used to sort answers for review, since it was completely sure on many of the answers it got wrong. A reviewer relying on confidence to flag likely mistakes would have missed most of them.

A veto-only model that never shipped

One consistent pattern did point toward something useful: every mistake the model made was an addition, promoting a false match. The one time the model helped, it removed a company rather than adding one. That observation led to building a second version of the model, restricted to only vetoing candidate matches, never proposing new ones. That veto-only version scored a perfect 1.0 on four rows. Four rows is a small sample, and the version was built, measured, and then left switched off rather than deployed, since a perfect score on so few cases isn't enough to justify replacing a working system.

Key takeaways

  • An 8-billion parameter local model was tested against an existing rule-based matcher using identical evidence: filing name, security title, filing fund, and eleven candidates.
  • The rules scored 99.6% precision versus 94.5% for the model; scaled to actual holdings, one wrong record becomes 196.
  • The model's consistent failure mode was promoting false resemblance, including inventing a nonexistent parent-company relationship at 95% confidence.
  • The model reported full confidence on 315 of 322 answers, including 12 of its 15 wrong answers, meaning confidence couldn't be used to catch mistakes.
  • A veto-only version of the model, restricted to rejecting matches rather than proposing them, scored perfectly on a small sample but was left unshipped.
  • The rules were kept in production because the model showed no measurable lift over the existing system.

Try it yourself

Before handing a task to a language model, write down in advance what result would actually make you keep what you already have, then run both systems on the same cases and check one specific thing: when the model is wrong, does its confidence score know it? If confidence can't separate right answers from wrong ones, you haven't gained a reviewer, you've gained more work to check. This is part of Humanitarians AI's Mycroft Financial AI series for its Fellows program.

Chapters

  1. 0:00Week 5: Evaluating a Local LLM
  2. 0:25The Results: Why the Rules Kept the Job
  3. 0:48System Comparison: Precision and Recall Metrics
  4. 1:12The Failure Mode: Promoting Resemblance & Inventing Corporate Facts
  5. 1:48The Overconfidence Trap: 95%+ Confidence on Wrong Answers
  6. 2:15The Skeptic Veto: Building a High-Precision Veto-Only Version
  7. 2:45Your Turn: Score Your LLM Tasks Before Committing
Full transcript(auto-generated, with timestamps)

Week 5: Evaluating a Local LLM

[0:00]Hi, I'm Am Molly. This video is about measuring a local language model against the rule-based matcher that already works and reporting honestly when the model loses. Week five of the private AI valuation agent. I gave an 8 billion parameter model exactly the evidence the rules get it lost and measuring that properly is the whole week. Here's the whole result before I show you any of it. The rules keep the job. A local model given the same four fields in the same candidate list was wrong in exactly

The Results: Why the Rules Kept the Job

[0:27]One direction. It promoted holdings to companies they were not. Precision fell about five points. Recall did not move at all. I kept the rules. And this week is me showing you why. Both systems see the same evidence. The name on the filing, the security title, the fund that filed it, and a list of 11 candidate companies. The seven in the universe plus four on the watch list. Nothing else. No price and no answer.

System Comparison: Precision and Recall Metrics

[0:48]322 calls on my own machine. About 3 seconds each. Zero failures. The rules score 99.6% precision. The model 94.5 5 points sounds survivable. Counted in records instead of cases and it is not. One wrong record becomes 196. Same labels, same holdings, one system swapped out for another. That is the entire comparison. It fails the same way every

The Failure Mode: Promoting Resemblance & Inventing Corporate Facts

[1:13]Time. It promotes resemblances. It saw a company called Hypers Scale Data and answered Scala. Its reason in its own words, Hypers scale Data is the parent company of Scala. That is not true. There is no such relationship. The model did not misread the filing. It invented a corporate fact and then reported it at 95% confidence. Then a loan scaled Agile Incorporated 2021 unit term loan also scale a I at full confidence because the words look alike. That one is not a single record. 32 holdings carry that name and every one of them would have been priced as a company it has nothing to do with. And then this one the file

The Overconfidence Trap: 95%+ Confidence on Wrong Answers

[1:49]Name is XAI3FT50. F is an internal fidelity security code. It is not a ticker and it is not a company name. The model answered XI at full confidence on three matching characters, eight holdings. There was never anything there to find and it found something. Anyway, here is the part that changes next week. 322 answers and the model reported full confidence on 315 of them. 12 of the 15 answers that disagree with the labels came back

The Skeptic Veto: Building a High-Precision Veto-Only Version

[2:15]At 95% or higher. It was completely sure and it was wrong. So, next week's review Q cannot be sorted by the model's confidence. That was the plan. One thing did work. Every mistake was the model adding a company. The single time it helped, it took one away. So I built a version allowed only to veto never to propose. It scores a perfect 1.0 on four rows. Four. I built it, measured it, and left it switched off. It is a decent skeptic and a poor proposer. Week five on one page. An 8 billion parameter model given exactly what the rules get.

Your Turn: Score Your LLM Tasks Before Committing

[2:46]322 calls, zero failures, five points of precision gone. One bad record becomes 196. Every failure was the same failure. Resemblance promoted to a match once by inventing a fact outright. Full confidence on 315 answers including 12 that were wrong. The plan said keep the rules if there is no lift. There is no lift. I am keeping the rules. Your turn. Paste this into Claude. Take a task you were about to hand to a language model and write down before you run it what result would make you keep what you already have. Then run it and score both on the same cases and check one thing in particular. When the model is wrong, does it know? If its confidence cannot separate its right answers from its wrong ones, you have not bought a reviewer. You have bought more work. Measuring a local language model against the matcher. Week five of the private AI valuation agent amali for humanitarians. The eye.

More from Mycroft Financial AI

Humanitarians AI Lyrical Literacy Project