Beyond the Right Number: How to Evaluate Analytics Agents
21 September 2026
When we asked Genie what percentage of orders were refunded, it answered 7.10%. Our reference calculation was 7.0989%, so we accepted the
rounded answer.
A revenue reconciliation is harder to grade. If you ask why marketing’s
revenue is lower than finance’s and get an accurate table of both totals,
you still need an explanation. The table doesn’t tell you why they differ
or which number to use in your meeting.
We saw a similar problem with a safety-stock recommendation. The agent
identified the products with the most stockouts and recommended buying
more, but left out the cost of carrying that inventory.
Checking the numbers would have missed both problems. We needed to grade
the explanation and the recommendation as well.
In our benchmark of analytics agents,
we organize that work into three layers: descriptive, diagnostic, and
prescriptive. The examples below come from our simulated e-commerce business, Driftline
Aquatics. They show what we check and where grading gets difficult.
The cards show recorded answers and grades. You can inspect the expected
reasoning, reference numbers, and supporting excerpts together. The grade
applies to the full recorded response; omissions in excerpts are marked
with […]. Where a recorded grade deserves another look, we explain why.
Descriptive: did it get the number right?
Descriptive questions ask what happened. How much revenue did we book? What
percentage of shipments arrived on time? Usually, you can calculate a
reference value independently and compare the answer against it.
The refund-rate example is straightforward. The reference is 7.0989%.
Genie’s 7.10% is a valid rounding. It gives the reader the requested
information at a sensible level of precision.
Descriptive question examples1 of 4
What percentage of orders were refunded?
Expected answer
7.0989%, normally displayed as 7.10%.
Genie · recorded answer excerpt
The percentage of orders that were refunded is 7.10%.
GoodRecorded grade · full answer graded
7.10% is a valid rounding of 7.0989%.
What is the total net booked revenue across all orders?
Expected answer
14,052,127.84 in net booked revenue.
nao · recorded answer excerpt
The total net booked revenue across all orders is $14,052,127.84.
GoodRecorded grade · full answer graded
Exact revenue total matches the reference.
What is the average net booked value per order?
Expected answer
45.6837, normally displayed as 45.68.
nao · recorded answer excerpt
The average net booked value per order is 45.68, based on 307,596 orders.
GoodRecorded grade · full answer graded
45.68 is a valid rounding of 45.6837.
What percentage of shipments were delivered on time?
Expected answer
93.6043%, using the on-time flag and shipments with a ship date.
Cortex Agents · recorded answer excerpt
93.6% of shipments were delivered on time — 311,812 out of 333,117 shipped shipments met their on-time delivery SLA.
GoodRecorded grade · full answer graded
93.6% is a valid rounding of 93.6043%.
Before running an evaluation, specify the metric, population, time period, and acceptable tolerance. An
accurate calculation over the wrong set of orders still answers the wrong
question.
Be explicit about rounding, too. An on-time rate of 93.6% is consistent
with the 93.6043% reference. 93.74% differs by 0.1357 percentage
points, beyond this question’s 0.01 tolerance. An answer that looks
close on the page can still be outside the requirement.
Diagnostic: does the explanation hold up?
Diagnostic questions ask why something happened. We check both the
explanation and the numbers used to support it.
Take the gap between marketing and finance revenue. A useful answer needs
to establish the size of the gap, explain the different scopes, and tell
the reader when each metric is appropriate. Those are three separate
requirements you can write down before the agent runs.
In the first card, nao reports the revenue figures, explains that paid-channel
attribution covers a narrower scope than finance’s total, and describes
what each measure is useful for. It explains why the totals should differ.
Diagnostic question examples1 of 4
Marketing's attributed revenue is far below finance's booked revenue. Why, and which is correct?
Expected reasoning
Establish the gap, explain the different revenue scopes, and explain why both metrics can be valid for their intended purpose.
Reference numbers · SQL results
Finance booked revenue: 14,052,127.84. Marketing attributed revenue: 4,550,706.25, or 32.38% of finance’s total.
nao · recorded answer excerpt
The gap is a scope mismatch, not an error. Finance's €14,052,128 net booked revenue counts *every* order, net of discounts and refunds. Marketing's attributed revenue (€3,941,595 from the warehouse's own attribution model, or €4,550,706 from ad platforms' self-reported numbers) only covers the slice of revenue credited to paid channels.
[…]
Which is correct? Both, for their intended purpose. Finance's number is right for total business performance; Marketing's is right for paid-channel effectiveness — it was never meant to equal total revenue.
GoodRecorded grade · full answer graded
The full response quantified the gap, explained the different scopes, and said when each metric is appropriate.
Why does summing order revenue from the sales detail table produce a much larger total?
Expected reasoning
Identify order totals repeated on each line, quantify the overstatement, and recommend counting each order total once.
Reference numbers · SQL results
Sales-detail sum: 17,836,707.87 versus 14,052,127.84 at order grain. The detail table contains 348,119 rows for 307,304 distinct orders.
Cortex Analyst · recorded answer excerpt
result: SOURCE | ORDER_COUNT | ROW_COUNT | NET_BOOKED_SUM | NOTE
fct_orders (order grain) | 307596 | 307596 | 1.405212784e+07 |
obt_sales (order-line grain) | 307304 | 348119 | 1.783670787e+07 | order_net_booked is repeated once per order line — sum is inflated by fan-out
GoodRecorded grade · full answer graded
The judge accepted the matching totals and fan-out explanation. The recorded answer does not explicitly recommend deduplicating orders, although the rubric asks for it: this recorded pass deserves review.
Blended return on ad spend looks fine. Is a platform quietly deteriorating?
Expected reasoning
Examine platforms over time, identify any sustained decline supported by the data, and explain what the blend conceals.
Reference numbers · SQL results
The reference contains 150 monthly platform rows. For example, Reddit ROAS is 1.68 in August 2023 and 1.24 in June 2025. The judge needs the full series to assess a trend.
Genie · recorded answer excerpt
There is no clear evidence of a platform experiencing a significant decline; all platforms appear to maintain relatively steady ROAS month-to-month.
WrongRecorded grade · full answer graded
The judge rejected the claim of stable performance for failing to identify the platform decline.
Which categories drive the most refunded revenue?
Expected reasoning
Rank categories by refunded revenue and quantify how concentrated the refund value is.
Reference numbers · SQL results
Tanks & Kits: 490,636.33; Livestock: 177,120.12; CO2 & Equipment: 139,599.44. These are the three largest categories by refunded revenue.
nao · recorded answer excerpt
Refunds are highly concentrated: across ~$1.01M in total refunded revenue over the 7 product categories, Tanks & Kits alone accounts for 46% of it (465,797), and the top 3 categories (Tanks & Kits, Livestock, CO2 & Equipment) together drive 75.8% of all refunded revenue.
WrongRecorded grade · full answer graded
The ranking was plausible, but 465,797 is about 5.1% below the 490,636.33 reference.
Explanations also need numerical scrutiny. In the refund-category example,
nao correctly identifies Tanks & Kits as the largest contributor, but gives 465,797 in refunded revenue against a reference of 490,636.33. The
ranking sounds convincing; the amount is about 5.1% low.
For your own evaluations, turn “explains the result” into a short list of
observable requirements. Which comparison must the answer establish? Which
difference must it explain? What conclusion should the reader be able to
draw? Then check the facts supporting that reasoning separately.
Prescriptive: can you use the recommendation?
Prescriptive questions ask what to do. They need evidence and a proposed
action, plus the consequences or trade-offs relevant to the decision.
The safety-stock answer illustrates the gap. Genie names the leading
variants and reports the correct counts: 418, 277, and 191 stockout days. It recommends prioritizing those variants. But it never
weighs holding costs against lost-sales risk, which the question’s rubric
requires.
You could agree with the direction and still need more work before placing
an order.
Prescriptive examples1 of 4
Which carrier should we drop or renegotiate?
Expected reasoning
Use service and cost evidence, recommend an action, and estimate its effect while considering the risk of moving shipment volume.
Reference numbers · SQL results
DHL: 74,178 shipments, 92.76% on time, average cost 9.48. PostNL: 122,604 shipments, 93.36% on time, average cost 6.07. The reference includes five carriers.
nao · recorded answer excerpt
Across 333,117 shipments (Jan 2023–Jul 2025), DHL is the outlier carrier: it's priced like a premium option ($9.48/shipment — between GLS and UPS) but delivers the worst on-time rate of all five carriers (92.76%) and the highest late-shipment rate (7.24%).
[…]
This also means the fix doesn't cost anything: reallocating DHL's ~74K annual shipments to the best-performing carrier in each zone (DPD in NL/EU_FAR, UPS in EU_NEAR) keeps total spend flat at ~$2.72M while lifting the blended on-time rate from 93.60% → 93.99% (roughly 1,300 fewer late shipments/year).
[…]
Recommended move:
1. Go to DHL with a service-level ultimatum (94%+ on-time, tighter DOA rate) — there's no price lever since rates are already at parity with peers.
2. If DHL won't commit, phase its volume over to DPD/UPS/GLS by zone over 1–2 quarters.
3. Keep DHL only as backup/overflow capacity for peak season, since there's no cost penalty to retaining the relationship at lower volume.
GoodRecorded grade · full answer graded
The full response combined service and cost evidence, a recommendation, an estimated effect, and a phased migration.
Where should we add safety stock?
Expected reasoning
Identify the variants driving stockout days, recommend targeted increases, and weigh holding costs against lost-sales risk.
To reduce stockouts, you should prioritize adding safety stock to variants with the highest stockout counts. Examples of variants with the most frequent stockouts include:
- DL-30009-40017 (418 stockouts)
- DL-30073-40156 (277 stockouts)
- DL-30073-40155 (191 stockouts)
- DL-30012-40028 (152 stockouts)
- DL-30007-40014 (150 stockouts)
The top variants experience significantly more stockouts than others, indicating where safety stock would have the greatest impact.
WrongRecorded grade · full answer graded
The full response identified the leading variants and their counts, but did not weigh holding costs against lost-sales risk.
Is reducing returns a product-level or category-level problem?
Expected reasoning
Establish the category pattern, recommend actions at the appropriate level, and quantify the exposure. The stored rubric emphasizes category-level fixes.
Reference numbers · SQL results
Category return rates: Live Plants 8.60%, Livestock 8.39%, Tanks & Kits 5.85%. Their net revenue is 393,306.79, 1,641,568.97, and 6,497,679.84 respectively.
Hex · recorded answer excerpt
Focus at the category level first, then target a short product exception list. Returns appear largely structural within categories—not driven by one or two rogue SKUs.
- Tanks & Kits is the largest margin opportunity: about $201K of return-related margin exposure, or 47% of the $432K total proxy exposure. Its 5.84% return rate is not the highest, but the category’s high margins make returns economically expensive.
- Livestock and Live Plants have the underlying rate problem: weighted return rates are 8.40% and 8.58%, versus roughly 4.6%–5.8% elsewhere. Together they generate approximately 9,589 returned units.
[…]
Avoid a broad SKU-by-SKU program across the catalog; the evidence supports a few category playbooks plus exception monitoring.
Data source: curated product-month performance joined to the product dimension. “Margin exposure” is a prioritization proxy calculated as reported margin × return rate—not an accounting measure of realized margin loss.
GoodRecorded grade · full answer graded
The full response supported category-level actions with return rates and quantified exposure, labelled as a proxy.
Which thin-margin products should we reprice?
Expected reasoning
Identify the products using the relevant margin definition, recommend a specific pricing move and target margin, and consider sales-volume risk.
Reference numbers · SQL results
The lowest reference margin rates include SKU DL-30026-40065 at 60.82%, and DL-30027-40067 and DL-30036-40084 at 60.87%. The query returns 20 variants.
nao · recorded answer excerpt
Raise price +5% on 14 variants across 7 hardscape/tools SKUs — Cholla Wood, CO2 Tubing, Natural Fine Gravel, Malaysian Driftwood, Glass Bubble Counter, Frodo Stone, and Substrate Spatula. These currently run at 60.8–61.5% margin (vs. the 51.8% store average is *higher* margin%, but their absolute dollar cushion is thin at low ticket sizes, making them vulnerable to cost/discount creep) with flat-to-growing volume, low returns ($3,949 incremental margin per 6 months (~$7,900/year) on these 7 SKUs alone, assuming flat volume.
Hold off on: Seachem Prime Water Conditioner & Micro Pellet Fish Food (store's two lowest-margin lines, ~48.8%) — test a smaller +2–3% move only, since their volume is already down 14–19% YoY. Also avoid repricing Redmoor Root, Pagoda Stone, White Silica Sand and the Flourish line right now — similar margin but already in double-digit YoY volume decline, plus any livestock/live-plant SKUs given biological risk.
GoodRecorded grade · full answer graded
The judge accepted the products, +5% price move, and volume-risk discussion. The answer gives current margins rather than an explicit target margin, so this recorded pass also deserves review against the stated expectation.
Several recommendations may be defensible. The rubric should specify
what the reasoning must establish: the problem, a concrete action, the
expected effect, and the relevant trade-off. Avoid requiring the agent to
imitate one preferred paragraph.
For forecasts, we look for the assumptions behind the estimate. In
the category-returns example, Hex labels its margin-exposure calculation as
a prioritization proxy. It does not claim that the estimate is a measured accounting loss.
Turn those expectations into a judge
We use a model to assess explanations and recommendations, and code to
check its output. The model must identify supporting passages for its
decisions. Code verifies those quotes, checks direct numeric comparisons,
and derives the grade.
From answer to grade
Question + rubricWhat must the answer establish?
Reference evidenceStored values or complete SQL results
Agent answerThe response actually recorded
↓
ModelAssess each criterion
Pass, fail, or unverifiable, with supporting excerpts and numeric claims mapped to reference values.
↓
CodeValidate evidence and check numbers
Require complete criteria and authentic quotes. Check numeric tokens, units, rounding, and tolerances.
↓
CodeDerive the result
↓↓↓
GoodAll required checks pass
WrongA required check fails
Review requiredUnverifiable evidence or invalid assessment; no grade
↓
Keep the audit trailAssessment · evidence · computed checks
The model interprets the answer. Code verifies the assessment and derives the grade. Evidence-preparation errors also stop grading.
The judge receives the question, rubric, agent response, and reference
evidence. For a simple metric, the evidence is a stored value. For questions supported by SQL, we
execute the reference query and include all its rows. A trend across five
platforms cannot be fairly assessed if part of the platform data is missing.
If required evidence cannot be prepared, grading stops.
The model then assesses each required criterion as pass, fail, or unverifiable. A pass needs a supporting excerpt from the answer. A fail
identifies a wrong claim or missing requirement. Unverifiable means the
supplied evidence cannot resolve a material claim.
Code checks that every criterion appears exactly once and that the quoted
words occur in the recorded response. For each passing criterion, we can see the passage the judge relied on. A real
quote can still be interpreted incorrectly, so that semantic judgment
remains something to validate with people.
For direct numeric claims, the model identifies the reported number and
maps it to a reference value. Code checks the original number token,
applies the declared unit conversion, and calculates the difference. An
extractor cannot turn −42 into 42 by dropping the sign, or use 42 as evidence for an answer that actually says 420.
Tolerances are part of this check. We use an explicit absolute tolerance
when the question supplies one. Scalar and table comparisons otherwise
allow for displayed precision; rubric comparisons without a specified
tolerance use a 1% relative fallback. The model still needs to select the
correct metric, reference value, and units. Derived calculations and
forecasts need their own explanation of the method and assumptions.
A failed required check prevents a pass. An unverifiable assessment produces
a review-required error rather than a forced good or wrong grade. We save
the assessment, evidence, and computed checks so we can investigate the
result later. Reused grades must match the question, evidence, answer, and
judge configuration that produced them.
Evaluate the judge, too
Some of the passes in these cards deserve review. The judge accepted the
order-total explanation even though it did not explicitly recommend
deduplicating orders, as the rubric required. Saving the reasoning helps
us spot mistakes like this; it does not prevent them.
To start your own evaluation, choose a small set of questions people
actually ask. Write the requirements first, calculate the reference values
independently, and have people review the agent responses. Include difficult
cases: a correct table with no explanation, sound reasoning with one wrong
number, and a sensible recommendation that omits a cost.
Compare the judge’s decisions with those human labels. Inspect false passes,
false failures, and cases sent to review separately. Keep a held-out set
that you do not use to tune the prompt. When a disagreement reveals an
ambiguous question or incomplete evidence, improve those inputs as well.
Also keep unanswered questions, platform failures, and judge errors visible
alongside your scores. Removing a response from grading does not establish
that the agent answered it correctly.
We have implemented and tested the checks described here. Measuring their
agreement with human reviewers remains a separate validation step. Code
tests establish that the checks execute as intended; human review helps
establish whether the decisions are fair.
If you’re building an evaluation, start with a few real questions and write
out what each answer needs to contain. Check the numbers, read the
explanations, and look for the costs or assumptions behind recommendations.
When you disagree with a grade, keep the answer and the reason. Those cases
will tell you what to fix in the judge, the rubric, or the question itself.