DPSynth generates production-shaped tabular data while spending a privacy budget it can itemise. Reconstruction, linkage and membership inference are bounded by arithmetic rather than by policy.
A single noisy query is easy to bound. A table is not: generate twenty columns sequentially and the loss compounds. Naive composition adds each release's cost, and the total crosses a usable budget long before the data is useful.
DPSynth tracks loss in the Rényi divergence domain instead, accumulating over orders α ∈ [1.5, 64] and taking the tightest bound available at each step. The shaded area above is the headroom that buys — 8.4 times more usable slices at the same ε, which is the difference between a toy synthetic table and one a model can train on.
Whether an adversary can recover the rows that were in the training set. Bounded by the noise mechanism, not by access control.
Whether a record can be tied to the same individual across two releases. Each release spends from the same accounted budget.
Whether the presence of one person can be detected from the output. The property ε is defined against exactly this.
git clone https://github.com/KELLERBABG/Differential-Privacy-Synthesizer.git cd Differential-Privacy-Synthesizer && pip install -e . python -m dpsynth --input data.csv --epsilon 0.5 --delta 1e-6