Understand synthetic data from scratch.
What synthetic data is, how we make it, and how it's validated — in plain language. The whole project turns on three verbs: generate, validate, learn.
The idea in one paragraph
Some valuable data can't be shared — it contains personal or banking information. Synthetic data is invented by a program to statistically resemble the real thing while describing no real person. For fraud, we go further: no real data is used at all. A rule-based generator produces plausible, already-synthetic starter data, which a model then learns to imitate. Nothing real ever enters the pipeline.
Essential vocabulary
| Term | In plain words |
|---|---|
dataset | A table. Each row is one example (a transaction); each column is one characteristic. |
tabular | Table-shaped (rows × columns), like a spreadsheet. |
feature | A column used to predict — e.g. amount, country, hour. |
label / target | The column you want to predict. Here: is_fraud. |
marginal | The distribution of one column on its own. |
correlation | A statistical link between two columns. |
copula | The "engine" that imitates a table by separating two things: the shape of each column (marginals) and how columns move together (correlations). |
class imbalance | When a category is rare — fraud is ~0.5% of transactions. |
typology | A family of fraud with its own signature (card-testing, account takeover…), labelled in fraud_type. |
non-stationarity | Patterns drift over time — yesterday's fraud isn't tomorrow's. No frozen dataset is ever "current". |
1 · Generate
We produce realistic transactions at two levels. Between classes, fraud shifts the marginals: higher or odder amounts, night hours, card-not-present, foreign geographies, burst velocity. Within a class, columns are correlated, not independent — a large amount goes with certain merchants; an in-person purchase happens near home. Those inter-feature links are what a fraud model actually learns.
A Gaussian copula learns this structure and reproduces it. We fit one copula per typology and recombine them at an exact target rate, so the minority fraud signal isn't averaged away and each typology keeps its distinct fingerprint.
2 · Validate
A synthetic dataset is only worth something if it passes three tests. We automate them as quality gates — fail one and nothing is published.
- Fidelity — does the synthetic data match the starter statistics (both marginals and correlations)? Aggregated into a
quality_score(≈0.85; gate ≥0.72). - Privacy — does it avoid copying starter rows?
privacy_score= 1.00 (no copies). - Usefulness — can a model actually learn from it? The most honest test.
3 · Learn
This is the buyer's view: train a detector, then measure it. Because fraud is rare, "percent correct" is useless (always predicting "not fraud" scores 99.5%). We use ROC-AUC and PR-AUC instead — threshold-independent, imbalance-robust.
Every dataset ships a reproducible baseline (LogReg + gradient boosting). The headline: a strong global AUC, but markedly lower AUC on the hard typologies — measurable proof the dataset carries genuine boundary cases.
The datasheet, anatomy of trust
Every dataset ships the same fixed datasheet template (after the "datasheets for datasets" discipline). Consistency is the point — a buyer recognises a Plexoria dataset by its datasheet.
| Section | What it holds |
|---|---|
| Scope — read first | What the dataset is / isn't, with the scope warning. |
| Method | Seed, per-typology copula synthesis, rate/mix by construction. |
| Provenance | RNG generator, no real data, reproducibility pins. |
| Data dictionary | Column-by-column, incl. is_fraud and fraud_type. |
| Fraud typologies | Kind (overt / hard), share, count, description. |
| Realism & non-stationarity | Statistical fingerprints, adversarial domain, regeneratable. |
| Quality & privacy scores | The measured QC numbers. |
| Baseline benchmark | Global + per-typology AUC. |
| Integrity | SHA-256 manifest + Ed25519 signature, and how to verify. |