Synthetic evaluation data is test material created by a model or a generator program instead of collected from real users. In AI evaluation, it helps you cover rare cases and add volume quickly, but its inputs and labels carry the generator’s assumptions and blind spots.
For example, suppose a support agent has 120 real, human-labeled test conversations, but only 6 of them combine two requests in one message. You could use those 6 as seeds to generate 200 new multi-intent cases. The new cases help you find failures, but your headline quality score should still come from real conversations.
Synthetic evaluation data can include test inputs, full scenarios, and sometimes reference answers.
Build better agents with Arize
Trace, evaluate, and learn. Build agents that work with Arize AX and start tracing your runs today.
Prefer open source? Try Arize Phoenix for self-hosted, open source agent observability.
Why synthetic evaluation data matters
Real, labeled evaluation data is slow and expensive to collect. Rare or sensitive cases may take months to appear in production, if they appear at all.
Synthetic data is useful for:
- Broadening coverage: Generate cases for categories your real set barely covers.
- Stress testing: Create adversarial or edge cases before launch.
- Regression checks: Rebuild test cases for known failure classes after each change.
- Directing human effort: Spend human labeling on verifying generated labels and on the real holdout set.
The tradeoff is trust. Use synthetic data to find failures and broaden coverage. Use real, human-reviewed data to make launch claims.
How synthetic evaluation data is produced
Teams generate evaluation examples in a few recurring ways. Arize’s guide to pre-production LLM evaluation and Anthropic’s Demystifying evals for AI agents describe these approaches.
- Seed expansion: Start from a small set of real, reviewed examples and ask a model to vary them. It can paraphrase the request, change the entities, make the case harder, or add a distractor.
- Persona and scenario generation: Specify user personas, intents, and edge conditions, then generate conversations or tasks that exercise them. This covers cases too rare or too sensitive to wait for in production.
- Programmatic generation: Build inputs from templates, grammars, or simulators where correctness is mechanically checkable. Arithmetic, structured extraction, and tool-call sequences with a known right answer fit this approach.
- Adversarial generation: Deliberately produce inputs designed to break the system. Examples include ambiguous instructions, conflicting documents, prompt-injection attempts, and malformed tool results.
Synthetic inputs and synthetic labels are different risks
A generated input can be useful even when a generated “correct answer” cannot be trusted. Judge the label attached to each example separately from the input.
Labels range from strongest to weakest:
- Mechanically verified answers, such as a computed result or a known tool-call sequence.
- Generated labels that a human has reviewed.
- Labels a model assigned on its own.
Much confusion comes from treating all three as “the dataset” without distinction.
Worked example: expanding a support-agent evaluation set
Return to the support agent from the opening. It launched with 120 real, human-labeled conversations.
Failure analysis suggests the agent struggles with multi-intent requests. An example is a billing question plus an address change in one message. Only 6 such cases exist in the real set.
Here is a defensible way to expand coverage:
1. Take the 6 real multi-intent cases as seeds; confirm their labels by hand.
2. Generate 200 variations: new products, names, orderings of the two
intents, polite and frustrated tones, one intent implied not stated.
3. Human-review a random 40 of the 200 for realism and label correctness;
fix the generation prompt where reviewers find artifacts.
4. Keep the 6 real cases plus a separate 50-case real holdout untouched
by generation; report scores on synthetic and real sets separately.
5. Run the agent; treat synthetic failures as bug reports to verify,
not as a production failure-rate estimate.
Two properties make this approach defensible. First, the generated labels were checked on a sample with a documented error rate. Second, the headline quality claim still rests on the real holdout.
The synthetic set’s job is coverage. Suppose it finds that the agent drops the second intent when the first one requires a tool call. That finding is valuable.
A number like “fails 31% of synthetic multi-intent cases” must never be quoted as a production rate. It describes the generated set, not your real traffic.
For more on building and maintaining test collections, see evaluation dataset and dataset curation.
How to estimate the label error rate from a review sample
Step 3 in the example reviews 40 of the 200 generated cases. That sample gives you an estimate of how many generated labels are wrong.
Suppose reviewers find 3 incorrect labels among the 40. The observed error rate is 7.5%. With only 40 reviewed cases, that estimate is uncertain.
The following Python code calculates a Wilson score interval for the label error rate using only the standard library.
from math import sqrt
from statistics import NormalDist
def wilson_interval(errors, reviewed, confidence=0.95):
z = NormalDist().inv_cdf((1 + confidence) / 2)
p = errors / reviewed
denominator = 1 + z**2 / reviewed
center = (p + z**2 / (2 * reviewed)) / denominator
margin = (z / denominator) * sqrt(
p * (1 - p) / reviewed + z**2 / (4 * reviewed**2)
)
return center - margin, center + margin
errors, reviewed = 3, 40
low, high = wilson_interval(errors, reviewed)
print(f"label error rate: {errors / reviewed:.1%} "
f"(95% CI {low:.1%} to {high:.1%}, n={reviewed})")
Output:
label error rate: 7.5% (95% CI 2.6% to 19.9%, n=40)
This means anywhere from about 5 to 40 of the 200 generated labels could be wrong. Record this rate with the dataset. If the upper bound is too high for your use, review more cases or fix the generation prompt.
For more on reading these ranges, see confidence interval.
How to validate synthetic evaluation data
- Coverage review: Map generated examples onto the categories of real traffic, such as intents, languages, difficulty, and length. Look for gaps and for implausible over-representation.
- Realism audit: Have reviewers label a sample of generated inputs as plausible or artificial, and check label correctness separately.
- Held-out real anchor: Keep a real, human-reviewed set that generation never touches, and report headline metrics there.
- Generator and judge separation: Use a different model or human review in at least one of the generation, labeling, and judging roles.
- Deduplication and leakage checks: Remove near-duplicate variations and keep generated cases out of training data and prompt examples.
Each check guards against a specific problem.
A taxonomy built from production traces is the reference for coverage. Generation fills its cells. It does not define them.
Generated data often has tells, such as overly tidy phrasing, repeated structures, and no typos. These make it systematically easier than real traffic.
Divergence between synthetic and real scores is itself a signal. It can mean the generator has drifted from reality.
Suppose the same model family generates the cases, writes the reference answers, and judges the outputs. Its blind spots are then correlated across all three roles, and errors can cancel invisibly. This concern sits at the center of LLM evaluation design.
Generated variations of one seed can near-duplicate each other, which inflates the apparent sample size. Keep the boundary described in training data vs. evaluation data explicit and enforced.
Common failure modes of synthetic data
- Distribution narrowing: Generators produce variations around what they already model well. The set looks broad while missing the messy tail of real usage.
- Label fiction: Model-assigned reference answers encode the generator’s misconceptions. A system that shares those misconceptions scores perfectly.
- Artifact exploitation: Systems learn, or are tuned to, the generator’s surface patterns rather than the underlying task.
- False precision: Thousands of synthetic cases produce narrow confidence intervals around a number that does not describe production.
- Staleness: A synthetic set built from last year’s product and personas quietly stops representing either.
None of this makes synthetic data unusable. It makes three things mandatory: recorded provenance, a sampled human audit, and a real holdout.
A synthetic score quoted without those three is not a measurement of production quality.
Synthetic vs. real evaluation data
The difference is provenance, and provenance changes what conclusions the data can support.
Real data supports estimates. Sampled production traffic with human labels can back failure rates, comparisons between versions, and launch decisions, given careful sampling.
Synthetic data supports exploration. It covers rare cases, runs regression checks on known failure classes, and stress tests a system before launch.
The test set and test cases entry explains how a test collection earns the authority to gate a release. A synthetic set earns that authority only to the extent its labels were verified and its distribution was audited against reality.
Cost is the usual argument for synthetic data, and it is real. Generation is cheap and fast, while human labeling is neither.
The choice is not synthetic or real. A sustainable pattern is a small, trusted real core with a large synthetic perimeter that you audit against that core on an ongoing basis.
Frequently asked questions
Can synthetic data replace human-labeled data?
No. It can reduce how much human labeling you need and direct that labeling where it matters most. That includes verifying generated labels, labeling the real holdout, and adjudicating hard cases. Launch and quality-rate claims still need real, reviewed examples.
How do I know if my synthetic cases are realistic enough?
Sample them. Have reviewers rate plausibility and verify labels on a random slice. Then compare score distributions on synthetic and real cases for the same system. A persistent gap in difficulty or style means the generator needs better seed material or constraints.
Is it a problem if the same model generates and judges the data?
Yes, and it is the main structural risk. Shared blind spots let wrong reference answers and wrong judgments agree with each other. Separate the roles across models where you can, and put human review on at least the label-verification step.
How much synthetic data should I generate?
Generate enough to cover the categories and edge cases your real set misses, at a volume your audit process can sample meaningfully. More cases than you can audit add apparent precision without adding trust.
Putting synthetic evaluation data to work
Record provenance for every example: which model or process generated it, from what seed material, and who reviewed it. Store the sampled label error rate with the dataset.
Report synthetic and real scores separately, and treat synthetic failures as bug reports to verify. Base launch decisions on the real holdout.
Arize AX and Arize Phoenix both support datasets and experiments, so you can tag examples by source and compare results on synthetic and real slices side by side.