What synthetic data is, and where it actually helps ML teams
A practical guide to how synthetic data is generated across data types, where it earns its place in an ML workflow, and where it doesn't.
Read articleA synthetic dataset can look plausible row by row and still be wrong in ways that matter for training. Evaluation is how you find out before a model does. This article lays out a practical evaluation workflow covering statistical fidelity, downstream utility, and privacy, along with the failure modes each check is designed to catch.
There is no single quality score for synthetic data. A dataset used to share schema-accurate records with a vendor needs different checks than one used to augment a fraud model. Before running any metrics, write down:
That last point is easy to get wrong. If you compare synthetic data against the same records the generator was trained on, you reward memorization. Keep a real holdout set aside from the start.
Fidelity checks compare the synthetic data to the real reference at increasing levels of structure.
Start with the basics. Every column should have the expected type and range. Categorical values should come from the real vocabulary. Business rules should hold: end dates after start dates, totals that equal the sum of line items, foreign keys that resolve. These checks are cheap and catch a surprising number of problems.
Compare each column on its own. For continuous columns, use the Kolmogorov-Smirnov statistic or the Wasserstein distance alongside overlaid histograms. For categorical columns, compare category frequencies with total variation distance or Jensen-Shannon divergence. Look specifically at:
Matching marginals is necessary but far from sufficient. A generator that samples each column independently will pass every marginal test and be useless for training. Compare correlation matrices, using Pearson or Spearman for numeric pairs and Cramér's V or mutual information for categorical pairs, and inspect the difference matrix rather than a single averaged number. Then look at conditional distributions for the relationships you know matter: income given age and region, transaction amount given merchant category, and so on.
Train a classifier to distinguish real rows from synthetic rows. If it separates them easily, the generator has left a detectable signature. The classifier's feature importances point to where: often a single column, an interaction, or a formatting artifact. A result near chance is a good sign, though not proof of quality on its own.
Fidelity metrics describe the data. Utility metrics describe what the data does for your task, which is what you ultimately care about.
The standard check is TSTR: train a model on synthetic data and evaluate it on the real holdout set. Compare it to TRTR, the same model trained on real training data and evaluated on the same holdout. The gap between the two tells you how much task-relevant signal the synthetic data carries.
Run this with the model family you actually intend to use, not only a convenient baseline. Also compare more than headline accuracy:
If synthetic data will be mixed with real data, evaluate that directly. Train on real data alone, then on real plus synthetic at several ratios, and evaluate each on the real holdout. This shows whether synthetic data adds value and where adding more stops helping.
Every evaluation should end on real data the generator has never seen. Anything else measures how well the synthetic data agrees with itself.
Synthetic data is only safer than real data if it does not reproduce identifiable records. Test this explicitly.
Check for synthetic rows that exactly match training rows. Then check for near matches, which are more common and more telling.
For each synthetic row, compute the distance to its nearest neighbour in the generator's training data. Do the same for each row in the real holdout set. If synthetic rows are systematically closer to training records than holdout rows are, the generator is memorizing. The comparison against holdout matters: some closeness is expected simply because both sets come from the same population.
Membership inference tests ask whether an attacker with the synthetic data can tell if a given record was in the training set. Attribute inference tests ask whether, knowing some fields of a real person, an attacker can predict a sensitive field more accurately from the synthetic data than from general population knowledge. Both are more realistic threat models than duplicate counts alone.
Pay special attention to rare records. A person with an unusual combination of attributes is easier to re-identify, and generators are more likely to reproduce such records closely because there is little else to learn from in that region. Differential privacy during training offers a formal bound on this risk, at a cost to fidelity that should itself be measured.
Evaluation is most useful when it is repeatable. Fix the holdout set, the metrics, and the thresholds, then produce the same report every time a generator is retrained or its settings change. That turns synthetic data quality into something you can track, review, and sign off on, rather than a judgement made once and forgotten.
SETC's evaluation reports cover fidelity, utility, and privacy against your reference data; the product page describes what they contain. To see them on your own data, book a demo.
Keep reading
A practical guide to how synthetic data is generated across data types, where it earns its place in an ML workflow, and where it doesn't.
Read articleReweighting, SMOTE, conditional generation, and simulation: how to give models enough examples of the events that matter most.
Read article