The blog
Let the model write the sentence, never the number.
Three of the world's largest consulting firms pulled a report for fabricated content in under a year, and all three answered with more review.
Three of the world's largest consulting firms found out in public, inside a year, why AI makes up numbers in reports. The reason fits in a sentence, and it is the finding of the people who build these models: they were trained and scored in a way that rewards a confident guess over an admission of not knowing.
In October 2025 one of them published a report on agentic AI with 45 citations. When an independent investigation checked them, five pointed accurately at real sources. Twenty eight carried paraphrased titles or invented components attached to real ones. Twelve were too vague to trace. Three case studies described AI deployments at named companies that the cited sources did not describe. The report was removed in June 2026.
The month before, a second firm withdrew a cybersecurity report after the same investigators found that of its 27 cited sources, more than 70 per cent were fabricated, misattributed, or pointed at pages that did not exist. Well-known business and technology publications were cited for articles that were never written.
In September 2025 a third revised a 237 page assurance review it had delivered to a national government department, after a university researcher found fabricated academic references and a quote attributed to a judge that the judge had not said. The revised version disclosed that a generative AI system had been used in its preparation, and the firm refunded the final instalment of its fee.
That is three of the largest firms that sell assurance for a living, inside a year.
What the three reports had in common
A citation is a claim about the world: this document exists, it says this, here is where. A figure in a client report is the same kind of claim: this column, these rows, this total. Both look retrieved. In all three reports some of them were generated instead, and nothing in the prose around them changed shape to say so.
The responses were the same too. The statement issued when the first report was removed promised "human oversight to validate content and verify independent sources." The second firm said it takes the accuracy of what it publishes seriously and has an organisation-wide commitment to the responsible use of AI. The third added a disclosure line and reissued.
Every one of those is a promise to review harder. None is a change to where the model sits in the process.
Why does AI make up numbers?
Because it was scored on guessing, and the paper that says so comes from one of the companies that builds these models. The authors put it this way: "Like students facing hard exam questions, large language models sometimes guess when uncertain, producing plausible yet incorrect statements instead of admitting uncertainty." Then the mechanism: "language models are optimized to be good test-takers, and guessing when uncertain improves test performance." And the cause: "the training and evaluation procedures reward guessing over acknowledging uncertainty."
So a model asked for a figure it does not have writes a plausible one, inside a fluent sentence, shaped like every other digit.
A number is the easiest object in a report to guess. It is short, it has no internal structure to get wrong, and it sits in a sentence that reads identically whether the number was looked up or invented. A fabricated citation can at least be clicked; a fabricated figure cannot.
How often does AI get a number wrong at work?
The consulting cases made the news. The everyday version has one measurement we could find.
A reporting-software vendor surveyed just over a hundred business users in June 2026. The vendor sells reporting software, and a hundred is a small sample, so hold the numbers loosely. In that group, 74 per cent said they had shipped a decision, a report or a shared output based on a generative AI number that turned out to be wrong. 39 per cent had done it in the previous thirty days. 69 per cent use generative AI often or always for analysis they share with leadership, and 39 per cent fully trust it.
86 per cent had done something in the previous month that they describe as verifying AI output, and 23 per cent had re-derived a number. The other 63 per cent verified by reading the number and finding it plausible. A generated figure is plausible by construction, so that check passes whether the number is right or not.
How do you trust a number a model produced?
Search for how to trust a number a model produced and you get four kinds of answer. Three of them are better than what most people do today, and all four share one property.
Review harder. This is the consulting-firm answer, and the default. Human oversight, a checklist, a second reader. It fails for the reason we covered last week: verifying a number means knowing which number to check, and a generated figure gives no signal about which one it is. To verify properly you recompute everything, which is the work you handed over.
Govern the data first. This is the enterprise answer. One finance-platform vendor frames it as a question: "does data reach the AI already consolidated, translated into financial concepts, and fully governed?" It is a real improvement, because the model is at least guessing from clean inputs. The model still produces the figure.
Make the model write a query, not an answer. This is the closest anyone has come. One analytics vendor argues for an AI that "generates a query, not an answer": the model writes the database question, the database returns the number, and the number is real by construction. This is right about the number. What it leaves in the model's hands is the choice of what to compute. Which table, which filter, which aggregation, which rows. Every one of the six misreads from last week lives in that choice, moved one layer down. The total is real. Whether it is the total you asked for is still a judgement.
Show the working. One consultancy calls it the shift "from answers to working out": keep the model in a persistent project, make it expose each step, so a reviewer can follow the chain. Verification gets easier. The model still holds the number at the end of the chain.
Four answers, and in every one of them the model is somewhere on the path between your data and the figure on the page. It reads the data, or it queries the data, or it computes from the data, and then it writes the number down. The differences are about how much of that path you can see. None of them takes the model off it.
How do you keep the model away from the number?
There is a fifth arrangement, and it is the dull one. The model writes the prose and a person binds the number. The two never touch.
In a Pressentable report a paragraph is plain text, and a figure inside it is a slot: a placeholder that points at a column in your file and a rule for which rows to use. A person puts each slot there through the picker, choosing the column and the rule. The model never chose what to compute, because nobody asked it to. It never held the value, because the value does not exist until the report is built and the slot resolves against the file.
One piece of code decides what a figure means, and both the sentence and the KPI tile beside it ask that same piece of code. That was decided before either of them existed, because two separate evaluators would eventually give two answers in one document, about what a change means or how a negative is written, and the reader would have no way to tell which was right. The other half of the same rule is that nothing falls back silently. A figure that cannot be resolved shows up as a state with its reason, never as a number.
What happens when you paste an AI sentence into a report?
Before a report is built, Pressentable checks every block in it. When a block contains something that will go stale once next month's data arrives, the check attaches a one-sentence warning to that block. We call that warning a flag.
To show what the check does, we wrote one paragraph three ways and put each version through it. The data behind all three runs is small: revenue of 41,000 in January, 43,036 in February and 48,200 in March. In each run, text is what the paragraph contains, slots is the number each placeholder pulled from the data, and flag is the warning the check attached, or none.
Run one, typed. This is the sentence the way a model writes it, with the numbers typed straight into the text.
text: Revenue rose to 48,200 in March, up 12% on February.
flag: It states a figure that was typed, not read from the data.
The check looks for digits sitting in the prose. It finds them and flags the block. 48,200 is correct for March. The flag says it was typed, so nothing connects it to the file, and in April the sentence will still say 48,200.
Run two, slots with month names. The same sentence, with the two numbers replaced by slots. The first slot points at March's revenue. The second points at the change since the row before.
text: Revenue rose to {{0}} in March, up {{1}} on February.
slots: 0 = 48,200 · 1 = 5,164
flag: It names a period, and the new data may cover another one.
Two things happened. The second slot came back as 5,164 rather than 12 per cent, because a slot gives you the change in the column's own units, 48,200 minus 43,036, and does not compute a percentage. If you want a percentage in the sentence, it has to exist as a column in your file, and then you bind that column.
And the typed-number flag is gone, but a second flag appeared. The words "March" and "February" are still typed. In April the numbers in this sentence will update and the sentence will still say March. The check caught that, and we had not set the run up to test for it.
The month list behind that check is eleven months long, not twelve. "May" is left out on purpose, because "revenue may fall" would otherwise flag every paragraph that used the verb. A quarter or a year carries a digit, so the first check catches those. The checks run in that order, digits first, then months.
Run three, slots only. The same slots, with the month names replaced by relative words.
text: Revenue rose to {{0}} this period, a change of {{1}} on the one before.
slots: 0 = 48,200 · 1 = 5,164
flag: none
No flag. Nothing in this sentence is pinned to a date or a number, so it stays correct every month without anyone touching it. The file states that case as a design fact:
A paragraph whose every number is bound is STRUCTURALLY INCAPABLE of being stale.
Typed numbers get caught, typed month names get caught, and a sentence with neither cannot go stale.
The check detects and names. It finds the typed figure or the named month, points at the block, and gives you the sentence. Whether you act on it is yours. It cannot guess and it cannot miss, because a digit in prose is a digit in prose regardless of who typed it or how confident they sounded.
This is the line last week's post drew from the other side. That one was about a model reading a file and getting a number wrong on the way in. This one is about a model writing a sentence and putting a number in it on the way out. In both cases the figure is looked up from the file rather than written into the sentence.
How do you fix a flagged paragraph?
The product computes a flag from the block's text every time the report is built, so it stays until the text changes. There are three ways to make it go, and none of them is a workaround.
If the flag says a figure was typed, you place that figure through the picker instead: choose the column, choose the rule, and the digit in the prose becomes a slot. The sentence reads the same. The number now comes from the file.
If the flag says a period was named, you take the month out of the sentence. "In March" becomes "this period"; "on February" becomes "on the month before". The sentence gets slightly plainer and stops being tied to a date the data will outgrow.
Or you leave it, knowing what it is. A paragraph that quotes a historical figure on purpose, a footnote that names the month a policy changed, a number that is a constant. The flag is information, and some flagged blocks are correct as they are. Every flagged block is now one you know about.
What happens next month?
A model writes you a paragraph in March. If the figures in it are typed, the paragraph is correct in March and wrong in April, and it is wrong in the way numbers go stale: silently, in the prose, with the tile next to it showing the new number and the sentence still describing the old one. You either reread every paragraph every month or you ship the discrepancy.
If the figures are slots, the paragraph is a set of pointers. A figure resolves against the dataset alone, at build time, so when April's export lands and the report rebinds to the new file, each slot resolves again against April's column under the same rule. By the implementation, a bound figure in prose follows a column rename the same way a table does, because it references its column by name; otherwise the sentence would report the rename as drift forever, over a change you made on purpose. A figure whose column was let go resolves to an invalid state with its reason, and the block says so.
So the paragraph a model wrote in March describes April without anyone touching it, provided it named no month.
What should you let AI write in a client report?
Hand it the sentence. The summary paragraph, the explanation of why something moved, the tightening of the line you wrote badly. A model is good at that, it is the part of the job you like least, and that research paper is a fair description of why it will always sound sure of itself while doing it.
Keep the number. Checking harder does not keep it, since 23 per cent of people re-derive and the other 63 per cent read for plausibility. Put it somewhere the model cannot reach: a slot that resolves from the file, under a rule a person chose, through the one resolver the tile uses too. And keep the month out of the sentence, because the product will tell you if you leave it in.
That is how a report on the client reports page is built, and the Lumen Collective monthly recap is one you can read.
The same rules on a live page
Every figure in the narrative here is a slot pointing at a column. The words can be anyone's. The numbers are the file's.
Where this fits
Typesetting is the second decision. The first is the shape of the report itself: what goes in it, in what order, and what the client is meant to do after reading it.
The guide it belongs to Client reports your clients actually read The five-part client report format that wins renewals, with a free CSV template and a report published in the open.Keep reading
From CSV to this in minutes
Upload the file. Fill the blocks: text, the KPI tiles, the chart, the table, your logo at the head of the page. Export a typeset PDF for the inbox, or publish a live link.
Founding members publish live links and print without our mark. See the founding offer.