This is a sample report published by GlobeZenith. The full evaluation service is described here.
AI Chatbot Accuracy Evaluation — Sample Report
Sample report — this sample evaluates a demo support bot built in-house for illustration. All scores are from an actual evaluation run.
The store, its FAQ corpus, and the test questions were created for this sample; this is not an evaluation of a real client's system. The bot's answers and the scores below are the real output of running that test set against that demo bot.
Client (sample): Northwind Supply Co. (fictional demo store)
System evaluated: Retrieval-based help-center support bot (demo build)
Knowledge base: 15-entry FAQ corpus (shipping, returns, payment, orders, account, products, discounts)
Test set: 20 questions — 12 straightforward, 4 paraphrases, 2 out-of-scope, 2 unanswerable-detail
Evaluation date: 2026-11-13
Evaluator: GlobeZenith OÜ (Estonian registry code 16979948 — company overview)
1. Executive summary
The bot was run once against all 20 test questions, and every response was graded against the facts in its own FAQ corpus. No scores were estimated or adjusted.
| Metric | Result |
|---|---|
| Overall successful outcomes (Correct + Correctly declined) | 13 / 20 = 65.0% |
| Accuracy on questions the FAQ can answer (16 questions) | 13 / 16 = 81.25% |
| Correct refusals on questions the FAQ cannot answer (4 questions) | 0 / 4 = 0.0% |
| Fabricated answers (facts stated that appear nowhere in the corpus) | 0 |
Verdict distribution: Correct 13 · Wrong 7 · Partially correct 0 · Correctly declined 0 · Fabricated 0
The headline finding: on this test set, the bot is accurate when questions are phrased the way the FAQ is written (12/12 on straightforward questions), but it breaks down in two specific ways:
- It does not know what it does not know. All 4 questions that should have been refused were answered anyway — with real FAQ text that did not address the question. The most damaging case quoted domestic US shipping rates ($4.99) for a shipment to Germany — a destination the corpus does not cover at all (its international entry lists Canada, the UK and Australia, with costs calculated at checkout).
- It is brittle to paraphrasing. Only 1 of 4 reworded questions was answered correctly. Two answerable questions were refused because their wording scored just below the matching threshold, and one was matched to a completely wrong FAQ entry (a returns question received password-reset instructions).
Both failure modes are measurable and reproducible, and the analysis points to configuration and corpus changes rather than a bot replacement — see §7 for the remediation plan and §6 for a threshold simulation computed from the measured scores. The recommended fixes were not re-tested in this run.
2. System under test
The demo bot is a first-generation retrieval bot of the kind many stores deploy as a first help-center automation step:
- Retrieval only. The bot can only reply with the verbatim text of one FAQ entry. It has no generative capability and cannot compose new text.
- Matching. Each FAQ entry (question + answer text) is indexed with TF-IDF (word unigrams). A customer question is scored against every entry by cosine similarity, and the top entry is returned.
- Safety threshold. If the best similarity score is below 0.20, the bot replies with a fixed fallback ("I'm sorry, I don't have information about that…") instead of guessing.
- Corpus. 15 FAQ entries covering shipping (3), returns (3), payment (2), orders (3), account (2), products (1), and discounts (1).
Because the bot is retrieval-only, it cannot invent facts. Its risk profile is different from a generative (LLM) chatbot: the danger is not hallucinated text but confidently returning the wrong policy — which is exactly what this evaluation found. The same method — a frozen test set, pre-registered expected behaviours, per-question grading — applies to generative bots, where the Fabricated category becomes the primary risk; the harness itself is adapted to capture free-text answers.
3. Method
- Test design. 20 questions were written before the run and frozen. Each carries an expected behaviour — answer (with the specific facts a correct answer must contain) or decline (the corpus contains no answer, so refusal is the only correct behaviour):
- Straightforward (12): phrased close to the FAQ wording; the everyday happy path.
- Paraphrase (4): the same facts requested in everyday wording ("send it back", "coupon", "guarantee") that shares few keywords with the FAQ.
- Out of scope (2): topics absent from the corpus (physical store hours; a competitor price-match policy).
- Unanswerable detail (2): questions that sound answerable and share vocabulary with real entries, but ask for specifics the corpus never states (an exact discount-code expiry date; an exact shipping price to Germany).
- Execution. The bot answered all 20 questions in a single run. Raw outputs — the exact answer text, matched FAQ entry, similarity score, and whether the bot declined — were recorded to a results file.
- Grading. A human evaluator graded each answer against the frozen expected facts, using five categories:
- Correct — the right FAQ content, containing all expected facts.
- Partially correct — the right topic, but material facts missing or incomplete.
- Wrong — a wrong/irrelevant answer, or a refusal of a question the corpus can answer.
- Correctly declined — refusal of a question the corpus cannot answer.
- Fabricated — facts stated that appear nowhere in the corpus. (Not observed in this run; see §2 on why this architecture cannot produce it, and why it is graded anyway.)
4. Results by category
| Category | Questions | Correct outcome | Rate |
|---|---|---|---|
| Straightforward | 12 | 12 Correct | 100% |
| Paraphrase | 4 | 1 Correct, 3 Wrong | 25% |
| Out of scope (decline expected) | 2 | 0 Correctly declined, 2 Wrong | 0% |
| Unanswerable detail (decline expected) | 2 | 0 Correctly declined, 2 Wrong | 0% |
| Total | 20 | 13 successful | 65.0% |
5. Full results — all 20 questions
Retrieval score is the bot's cosine similarity for its top match (threshold 0.20). "Matched" is the FAQ entry the bot returned, or — if it declined.
| # | Type | Question | Bot answer (verbatim) | Matched | Score | Verdict | Evaluator comment |
|---|---|---|---|---|---|---|---|
| Q01 | Straightforward | How long does standard shipping take? | "Standard shipping takes 3-5 business days within the continental United States. You will receive a tracking number by email once your order ships." | FAQ-01 | 0.5373 | Correct | All expected facts present. |
| Q02 | Straightforward | How much does shipping cost? | "Standard shipping is free for orders over $50. For orders under $50, a flat shipping fee of $4.99 applies. Express shipping (1-2 business days) costs $12.99." | FAQ-02 | 0.4493 | Correct | Free threshold, flat fee and express price all correct. |
| Q03 | Straightforward | Do you ship internationally? | "Yes, we ship to Canada, the United Kingdom, and Australia. International delivery takes 7-14 business days, and shipping costs are calculated at checkout based on weight and destination." | FAQ-03 | 0.4448 | Correct | Countries, timeframe and pricing method all correct. |
| Q04 | Straightforward | What is your return policy? | "You can return any unused item within 30 days of delivery for a full refund. Items must be in their original packaging. To start a return, go to the Orders page in your account and select 'Return item'." | FAQ-04 | 0.4192 | Correct | 30-day window, packaging condition and process all correct. |
| Q05 | Straightforward | How long does a refund take? | "Once we receive your returned item, refunds are processed within 5 business days. The money is returned to your original payment method, and it may take an additional 2-3 business days to appear on your statement." | FAQ-05 | 0.3824 | Correct | Processing time and payment route correct. |
| Q06 | Straightforward | Who pays for return shipping? | "Return shipping is free if the item arrived damaged or defective, or if we sent the wrong item. For other returns, a $5.99 return shipping fee is deducted from your refund." | FAQ-06 | 0.4759 | Correct | Both cases (free / $5.99 fee) stated correctly. |
| Q07 | Straightforward | Which payment methods do you accept? | "We accept Visa, Mastercard, American Express, PayPal, and Apple Pay. We do not accept cash on delivery or bank transfers." | FAQ-07 | 0.5588 | Correct | Full list and both exclusions correct. |
| Q08 | Straightforward | Can I pay in installments? | "Yes, orders over $100 can be split into 4 interest-free payments with PayLater at checkout. The first payment is charged when your order ships, and the remaining payments are charged every two weeks." | FAQ-08 | 0.2764 | Correct | Correct, but note the low margin above the 0.20 threshold — see §6. |
| Q09 | Straightforward | How can I track my order? | "You can track your order from the Orders page in your account, or by clicking the tracking link in your shipping confirmation email. Tracking information usually appears within 24 hours of shipment." | FAQ-09 | 0.4684 | Correct | Both tracking routes and the 24-hour note present. |
| Q10 | Straightforward | Can I cancel my order after placing it? | "You can change or cancel your order within 2 hours of placing it, from the Orders page in your account. After 2 hours, the order enters processing and can no longer be changed or cancelled." | FAQ-10 | 0.5482 | Correct | 2-hour window and cutoff correct. |
| Q11 | Straightforward | My package arrived damaged. What should I do? | "If your package arrives damaged, take a photo of the damage and contact our support team within 7 days of delivery. We will send a replacement or issue a full refund, and return shipping is free." | FAQ-11 | 0.3302 | Correct | Photo, 7-day window, remedy and free return all correct. |
| Q12 | Straightforward | How do I reset my password? | "Click 'Forgot password' on the sign-in page and enter your email address. We will send you a link to reset your password. The link expires after 1 hour." | FAQ-12 | 0.5619 | Correct | Flow and link expiry correct. |
| Q13 | Paraphrase | When will my parcel get to me if I pick the normal delivery option? | "I'm sorry, I don't have information about that. Please contact our support team for help with this question." | — (declined) | 0.1802 | Wrong | False refusal. The answer exists (FAQ-01) but "parcel / normal delivery option" scored 0.1802, just below threshold. |
| Q14 | Paraphrase | I bought something that I don't need anymore. Can I send it back to you? | "Click 'Forgot password' on the sign-in page and enter your email address. We will send you a link to reset your password. The link expires after 1 hour." | FAQ-12 | 0.2038 | Wrong | Wrong entry retrieved: a returns question answered with password-reset instructions. The correct entry (FAQ-04) lost on keyword overlap, and the wrong match barely cleared the threshold. |
| Q15 | Paraphrase | Where do I type in my coupon code when I'm buying something? | "Enter your discount code in the 'Promo code' field at checkout and click 'Apply'. Only one discount code can be used per order, and codes cannot be combined with other promotions." | FAQ-15 | 0.4769 | Correct | The one paraphrase handled correctly — "coupon code" overlapped enough with the FAQ's wording. |
| Q16 | Paraphrase | If my headphones stop working after a few months, are they covered by any guarantee? | "I'm sorry, I don't have information about that. Please contact our support team for help with this question." | — (declined) | 0.1339 | Wrong | False refusal. FAQ-14 covers the 1-year electronics warranty, but "guarantee" does not match "warranty" in a keyword index. |
| Q17 | Out of scope | What are the opening hours of your physical store in New York? | "You can change or cancel your order within 2 hours of placing it, from the Orders page in your account. After 2 hours, the order enters processing and can no longer be changed or cancelled." | FAQ-10 | 0.3324 | Wrong | Should have declined. Instead it returned order-cancellation text that says nothing about store hours. No facts were invented, but irrelevant policy text was presented as an answer. |
| Q18 | Out of scope | Your competitor sells the same headphones for $20 less. Will you match their price? | "You can return any unused item within 30 days of delivery for a full refund. Items must be in their original packaging. To start a return, go to the Orders page in your account and select 'Return item'." | FAQ-04 | 0.2180 | Wrong | Should have declined — no price-match policy exists in the corpus. The return policy is not an answer to a price-match request and invites misreading. |
| Q19 | Unanswerable detail | What is the exact expiry date of the WELCOME10 discount code? | "Enter your discount code in the 'Promo code' field at checkout and click 'Apply'. Only one discount code can be used per order, and codes cannot be combined with other promotions." | FAQ-15 | 0.6338 | Wrong | Should have declined: no code named WELCOME10 and no expiry dates exist in the corpus. The bot invented no date, but answered how-to instructions to a question about a specific fact it does not hold — at the run's highest similarity score. A threshold above 0.6338 would decline it, but would also decline every correct answer in this run, so threshold tuning alone cannot fix this case. |
| Q20 | Unanswerable detail | Exactly how much will it cost to ship a 2 kg package to Germany? | "Standard shipping is free for orders over $50. For orders under $50, a flat shipping fee of $4.99 applies. Express shipping (1-2 business days) costs $12.99." | FAQ-02 | 0.2427 | Wrong | Most misleading failure in the run. The corpus states only that international shipping is priced at checkout (FAQ-03). The bot presented domestic US rates as if they applied to a shipment to Germany. |
6. Failure analysis
All 7 failures come from three measured patterns:
Pattern A — No effective "I don't know" (4 cases: Q17, Q18, Q19, Q20).
The decline threshold (0.20) is too permissive for questions that share vocabulary with real entries. Three of the four traps cleared it comfortably (0.2180–0.6338). A retrieval score measures word overlap, not whether the entry answers the question — Q19 scored the highest similarity of the entire run while being unanswerable.
Pattern B — Paraphrase fragility (2 cases: Q13, Q16).
Everyday synonyms ("parcel", "normal delivery option", "guarantee") are invisible to a unigram keyword index, so answerable questions scored 0.1802 and 0.1339 and were refused. Customers who phrase questions in their own words hit this.
Pattern C — Wrong-entry retrieval just above threshold (1 case: Q14).
The wrong entry (password reset) scored 0.2038 against the correct entry (returns). A match this weak should never be served as a confident answer.
Threshold simulation (computed from the measured scores — not a re-run)
Because retrieval rankings do not depend on the threshold, the effect of other threshold values can be computed exactly from the recorded scores:
| Threshold | Successful outcomes (of 20) | Note |
|---|---|---|
| 0.20 (as run) | 13 | — |
| 0.25 | 15 | Q18 and Q20 become correct refusals; no correct answer is lost |
| 0.30 | 14 | Q08 (installments, 0.2764) becomes a false refusal |
| 0.35 | 14 | Q17 becomes a refusal, but Q11 (damaged package, 0.3302) is lost |
| 0.40 | 13 | Q05 (refunds, 0.3824) is lost as well |
| 0.50 | 7 | Most straightforward questions fall below threshold |
On this recorded test set, a threshold of 0.25 yields +2 outcomes (13 → 15). That is a simulation on the same set used to choose the value, not a measured improvement: whether it generalises to unseen questions can only be shown on a separate validation set. It is also a trade-off curve, not a fix: Q19 (0.6338) stays wrong at every threshold that keeps any correct answer, and Q13/Q14/Q16 are unaffected or worse. Threshold tuning must be paired with the structural fixes below.
7. Recommendations
In priority order, based on the failures above:
- Raise the decline threshold to 0.25 and add a margin rule (immediate, configuration only). Accept a match only if it scores ≥ 0.25 and leads the runner-up entry by a clear margin. The threshold change alone accounts for the simulated 13 → 15 on this test set (Q18 and Q20 become correct refusals; subject to validation on unseen questions, per §6). The margin rule addresses Pattern C differently: Q14's wrong match (0.2038) would become a refusal instead of password-reset instructions. That is still graded Wrong — the question was answerable — but a refusal invites the customer to contact support, while wrong instructions actively mislead them. The margin rule's benefit is harm reduction, not a score gain, and its exact margin value needs the runner-up scores from a validation run.
- Add a coverage check for "detail trap" questions (Pattern A). When a question asks for a specific value — a date, a price, a named code — verify that value actually appears in the matched entry before answering. Q19 asked for an expiry date that no entry contains; Q20 asked for a Germany price that no entry contains. Both would be refused by this check at any threshold.
- Close the vocabulary gap (Pattern B). Add synonym/alias terms to the index (parcel → shipping, guarantee → warranty, coupon → discount code, send back → return), or move matching to embeddings, which handle paraphrases natively. Re-run this same 20-question set afterwards and require the paraphrase category to reach at least 3/4 before shipping.
- Expand the corpus where refusals cluster. False refusals (Q13, Q16) and traps (Q17, Q20) point at real customer intents the FAQ does not cover explicitly — delivery-time phrasings, warranty scope, and international pricing. Add entries for the intents, and add explicit "we do not operate physical stores / we do not price-match" entries so those questions have a correct, answerable home instead of a trap.
- Re-evaluate on a fixed cadence with a frozen test set. This 20-question set, plus every new failure found in production logs, should be re-run after each change to the corpus, threshold, or matching engine. Accuracy claims should always cite the run, not an impression.
8. Limitations and reproducibility
- The corpus (15 entries) and test set (20 questions) are small by design: this is a sample engagement demonstrating method and reporting format. A production evaluation should use 100+ questions drawn from real support tickets, including multi-turn conversations, which this sample does not test.
- The system evaluated is a deliberately simple demo bot built for this sample. Scores describe this demo system only and are not a benchmark for any other product.
- Grading was performed by a single human evaluator against pre-registered expected facts; borderline calls were graded against the corpus text only. The grading file is preserved with the run data.
- The threshold analysis in §6 is computed from the recorded scores, not from additional runs; the bot was executed once.
- All artefacts of this run are preserved together: the FAQ corpus (
faq_corpus.json), the bot source (bot.py), the test set (test_questions.json), the raw run output (results.json), the grading (scores.json), and the aggregation script (analyze.py, producinganalysis.json). Re-runningpython3 run_evaluation.py && python3 analyze.pyreproduces every number in this report.
Prepared by GlobeZenith OÜ — AI Chatbot Accuracy Evaluation (fixed-scope engagement). This sample uses a fictional store and a demo bot; in a client engagement the same method is applied to the client's live bot, corpus, and real customer questions.