Syndat
Syndat is a python package that provides functionalities for the evaluation and visualization of synthetic data.
Cite this software
Description
About
Syndat is a Python library to evaluate and visualize the quality of synthetic patient and clinical trial data. It computes synthetic data quality metrics for tabular datasets and aggregates them into three normalized scores (distribution, correlation and discrimination). Beyond metrics, Syndat visualizes how close synthetic data is to the real data: feature distributions, correlation structures, summary statistics and SHAP-based discrimination plots. It also allows users to generate stratified and interpretable visualisations, including raincloud plots, GOF plots, and trajectory comparisons, offering deeper insights into the quality of synthetic clinical data across different subgroups.
For a browser-based workflow, the SYNDAT Dashboard wraps Syndat in a web application that adds privacy risk estimates (via anonymeter) alongside the quality scores. Use it if you need a privacy assessment; the syndat package itself covers quality only.
Installation
Install via pip:
pip install syndat
Usage
Fidelity metrics
Jenson-Shannon Distance
The Jenson-Shannon distance is a measure of similarity between two probability distributions. In our case, we compute probability distributions for each feature in the datasets and can thus compare the statistic feature similarity of two dataframes.
It is bounded between 0 and 1, with 0 indicating identical distributions.
(Normalized) Correlation Difference
In addition to statistical similarity between the same features, we also want to make sure to preserve the correlations across different features. The normalized correlation difference measures the similarity of the correlation matrix of two dataframes.
A low correlation difference near zero indicates that the correlation structure of the synthetic data is similar to the real data.
Discriminator AUC
A classifier is trained to discriminate between real and synthetic data. Based on the Receiver Operating Characteristic (ROC) curve, we compute the area under the curve (AUC) as a measure of how well the classifier can distinguish between the two datasets.
An AUC of 0.5 indicates that the classifier is unable to distinguish between the two datasets, while an AUC of 1.0 indicates perfect discrimination.
Exemplary usage:
import pandas as pd
from syndat.metrics import (
jensen_shannon_distance,
normalized_correlation_difference,
discriminator_auc
)
real = pd.DataFrame({
'feature1': [1, 2, 3, 4, 5],
'feature2': ['A', 'B', 'A', 'B', 'C']
})
synthetic = pd.DataFrame({
'feature1': [1, 2, 2, 3, 3],
'feature2': ['A', 'B', 'A', 'C', 'C']
})
print(jensen_shannon_distance(real, synthetic))
>> {'feature1': 0.4990215421876156, 'feature2': 0.22141025172133794}
print(normalized_correlation_difference(real, synthetic))
>> 0.24571345029108108
print(discriminator_auc(real, synthetic))
>> 0.6
Scoring Functions
For convenience and easier interpretation, a normalized score can be computed for each of the metrics instead:
# JSD score is being aggregated over all features
distribution_similarity_score = syndat.scores.distribution(real, synthetic)
discrimination_score = syndat.scores.discrimination(real, synthetic)
correlation_score = syndat.scores.correlation(real, synthetic)
Scores are defined in a range of 0-100, with a higher score corresponding to better data fidelity.
Visualization
Visualize real vs. synthetic data distributions, summary statistics and discriminating features:
import pandas as pd
import syndat
real = pd.read_csv("real.csv")
synthetic = pd.read_csv("synthetic.csv")
# plot *all* feature distribution and store image files
syndat.visualization.plot_distributions(real, synthetic, store_destination="results/plots")
syndat.visualization.plot_correlations(real, synthetic, store_destination="results/plots")
# plot and display specific feature distribution plot
syndat.visualization.plot_numerical_feature("feature_xy", real, synthetic)
syndat.visualization.plot_numerical_feature("feature_xy", real, synthetic)
# plot a shap plot of differentiating feature for real and synthetic data
syndat.visualization.plot_shap_discrimination(real, synthetic)
Postprocessing
Postprocess synthetic data to improve data fidelity:
import pandas as pd
import syndat
real = pd.read_csv("real.csv")
synthetic = pd.read_csv("synthetic.csv")
# postprocess synthetic data
synthetic_post = syndat.postprocessing.assert_minmax(real, synthetic)
synthetic_post = syndat.postprocessing.normalize_float_precision(real, synthetic)
Evaluation and Visualization of Synthetic Clinical Trial Data
An example demonstrating how to compute distribution, discrimination, and correlation scores, as well as how to generate stratified visualizations (gof, raincloud and other plots), is available in examples/rct_example.py.
Documentation
Full API documentation and a quickstart guide are available at syndat.readthedocs.io, including an overview of the synthetic data quality metrics and how to interpret them.
Acknowledgements
Syndat is developed at the Fraunhofer Institute for Algorithms and Scientific Computing (SCAI) and is used within the NFDI4Health Consortium for the assessment of synthetic health data.
It is currently also being extended as part of the SYNTHIA collaboration, which develops synthetic data methodology for clinical trials and health research.
Citation
Syndat is aimed at researchers and data scientists working with sensitive health data who need to check whether a synthetic dataset preserves statistical properties before using it for analysis or model development.
If you use Syndat in your research, please cite as:
@article{Adams_On_the_fidelity_2025,
author = {Adams, Tim and Birkenbihl, Colin and Otte, Karen and
Ng, Hwei Geok and Rieling, Jonas Adrian and
Näher, Anatol-Fiete and Sax, Ulrich and
Prasser, Fabian and Fröhlich, Holger},
title = {On the fidelity versus privacy and utility trade-off of synthetic patient data},
journal = {iScience},
volume = {28},
year = {2025},
doi = {10.1016/j.isci.2025.112382}
}
Participating organisations
Reference papers
- 1.Author(s): Sobhan Moazemi, Tim Adams, Hwei Geok NG, Lisa Kühnel, Julian Schneider, Anatol-Fiete Näher, Juliane Fluck, Holger FröhlichPublished by arXiv in 202410.48550/arxiv.2408.04478
- 2.Author(s): Tim Adams, Colin Birkenbihl, Karen Otte, Hwei Geok Ng, Jonas Adrian Rieling, Anatol-Fiete Näher, Ulrich Sax, Fabian Prasser, Holger Fröhlich, Alzheimer’s Disease Neuroimaging InitiativePublished by openRxiv in 202410.1101/2024.12.06.24317239
Mentions
- 1.Author(s): Suyeong Kim, Donghun Jeong, Hyeondong Lee, Joseph H. T. Kim, Young Min Kim, Jongho ImPublished in 202610.1002/wics.70078
- 2.Author(s): Jieren Luo, Jiesen Yu, Zihao Cai, Ling Xu, Yinghua Lv, Qingshan Zheng, Lujin LiPublished in European Journal of Clinical Pharmacology by Springer Science and Business Media LLC in 202610.1007/s00228-026-04032-8
- 3.Author(s): Yue Qi, Lorrie Herbault, Hadrien Lautraite, Michael Yu, Katleen Blanchet, Christian Vincelette, Louis Mullie, Guillaume Dumas, Jean-François Rajotte, Kamran Afzali, Sébastien Gambs, Michaël ChasséPublished in 202610.1016/j.ailsci.2026.100155
- 4.Author(s): Trung Ha, Tran Khanh Dang, Dinh Thi Hong LoanPublished in 202610.14569/ijacsa.2026.0170848
- 5.Author(s): KIM, Tae-Yoon, KIM, Jung-HyunPublished in 2026
- 6.Author(s): Muhammad Ilyas, Kenenna Okafor, Fahad Sohrab, Pekka AbrahamssonPublished in 202610.1109/access.2026.3676942
- 7.Author(s): Salwa Alamir, Vincenzo Tufaro, Christos V. Bourantas, Andreas Baumbach, Qianni Zhang, Joseph Jacob, Ryo ToriiPublished in 202610.1016/j.cmpb.2026.109694
- 8.Author(s): Katariina Perkonoja, Parisa Movahedi, Antti Airola, Kari Auranen, Joni VirtaPublished in 202610.1016/j.jbi.2026.105074
- 9.Author(s): Shamsuddeen Adamu, Hitham Alhussian, Said Jadid Abdulkadir, Majdy Mohamed Eltayeb Eltahir, Sallam O. F. Khairy, Ibrahim Hayatu Hassan, Ibrahim Muhammad Kurah, Abubakar Mukhtar, Vijayakanthan Ganesalingam, Vaishali Ravi, Yahaya SaiduPublished in 202610.1186/s13040-026-00591-9
- 10.Author(s): KIM, Tae-Yoon, KIM, Jung-HyunPublished in 2026
- 11.Author(s): Mehmed Halilovic, Thierry Meurers, Marco Alibone, Marion Ludwig, Paul Tiwald, Nico Sieberg-Riedel, Steven Wolter, Lisa Kühnel, Steffen Hess, Fabian Prasser, Karen OttePublished in 202610.1038/s41746-026-02622-5
- 12.Author(s): Anastasia Chiriac, Elena Niculina Dragoi, Berta Nogueiro Estevinho, Alexandra Cristina BlagaPublished in 202610.1016/j.scp.2026.102512
- 13.Author(s): Hakime Öztürk, Tejumade Afonja, Joonas Jälkö, Ruta Binkyte, Pablo Rodriguez-Mier, Sebastian Lobentanzer, Andrew Wicks, Jules Kreuer, Sofiane Ouaari, Nico Pfeifer, Shane Menzies, Sikha Pentyala, Daniil Filienko, Steven Golob, Patrick McKeever, Jineta Banerjee, Luca Foschini, Martine De Cock, Julio Saez-Rodriguez, Mario Fritz, Oliver Stegle, Antti HonkelaPublished in 202610.1186/s13059-026-04326-1
- 14.Author(s): Teng He, Wenya Long, Yingjuan XiePublished in 202610.62486/aid2026153
- 15.Author(s): Alejandro Correa Rojo, Yves Moreau, Gökhan ErtaylanPublished in 202610.1093/bioinformatics/btag377
- 16.Author(s): Francisco Ortuño, Víctor M. de la Oliva Roque, Javier‐Ignacio Ramirez‐Lopez, David P. Kreil, Joaquín Dopazo, Carlos LouceraPublished in 202610.1002/advs.202516196
- 17.Author(s): Yael Friedman, Anna SmajdorPublished in 202610.1007/s10728-026-00596-9
- 18.Author(s): Rania Hassan, Dina FathyPublished in 202610.68159/r206901001
- 19.Author(s): Swathi Ganesan, Lakmali Karunarathne, Kavindu Karunarathne, Mishani Weerakoddi, Nalinda SomasiriPublished in 202610.7759/s44389-025-00063-x
- 20.Author(s): Wisam Makki Alwash, Belal Al-Khateeb, Hasan Hüseyin BalıkPublished in 202610.3390/technologies14110724
- 21.Author(s): Ivana Nanevski, Maryam Mohebi, Sebastian Jäger, Karen Otte, Fabian Prasser, Matthias Schulte-Althoff, Daniel Fürstenau, Felix BiessmannPublished in 202610.1371/journal.pdig.0001522
- 22.Author(s): Soonseok KimPublished in 202510.3390/electronics14214350
- 23.Author(s): Akash Ghosh, Raghav Jain, Anubhav Jhangra, Sriparna Saha, Adam JatowtPublished in 202510.1002/widm.70045
- 24.Author(s): Dr. Wisam Bukaita, Priyatham ChadalawadaPublished in 202510.18103/mra.v13i10.6953
- 25.Author(s): Lisa Pilgram, Fida Kamal Dankar, Jörg Drechsler, Mark Elliot, Josep Domingo-Ferrer, Paul Francis, Murat Kantarcioglu, Linglong Kong, Bradley Malin, Krishnamurty Muralidhar, Puja Myles, Fabian Prasser, Jean Louis Raisaro, Chao Yan, Khaled El EmamPublished in 202510.1016/j.patter.2025.101320
- 26.Author(s): Nasution, Bahrul Ilmi, Eijkelboom, Floor, Elliot, Mark, Allmendinger, Richard, Naesseth, Christian A.Published in 202510.48550/arxiv.2512.00698
- 27.Author(s): JaeCheol Kim, Seungun Park, Jaesik Cha, Eunyeong Son, Yunsik SonPublished in 202510.3390/app151910609
- 28.Author(s): Tinja Pitkämäki, Tapio Pahikkala, Ileana Montoya Perez, Parisa Movahedi, Valtteri Nieminen, Tom Southerington, Juho Vaiste, Mojtaba Jafaritadi, Muhammad Irfan Khan, Elina Kontio, Pertti Ranttila, Juha Pajula, Harri Pölönen, Aysen Degerli, Johan Plomp, Antti AirolaPublished in Applied Computing and Intelligence by American Institute of Mathematical Sciences (AIMS) in 2024, page: 138-16310.3934/aci.2024009
- 1.Author(s): Ally Nyamawe, Deo ShaoPublished in 202610.1177/20552076261418897
- 2.Author(s): Vincenzo Venerito, Maria Morrone, Sergio Del Vescovo, Emre Bilgin, Latika Gupta, Giuseppe Lopalco, Florenzo IannonePublished in 202610.1093/rap/rkag114
- 3.Author(s): Tianyi YuPublished in 202610.21203/rs.3.rs-11196055/v1
- 4.Author(s): Seha Ay, Umit Topaloglu, Wei ZhangPublished in 202610.3389/fdgth.2026.1726771
- 5.Author(s): Ioannis Kyprakis, Grigorios G. Kotoulas, Dimitrios Manousos, Dimitrios G. Boucharas, Borut Flis, Matej Pičulin, Petar Vračar, Zoran Bosnić, Lazar Velicki, Anne P. Nelissen, Lars S. Maier, Iacopo Olivotto, Marta Jimenez-Blanco, Duncan Edwards, Sarah J. Charman, Djordje G. Jakovljevic, Nenad Filipovic, Dimitrios I. Fotiadis, Manolis TsiknakisPublished in 202610.1109/cbms69103.2026.00253
- 6.Author(s): Escudié, Jean-Baptiste, Barnes, Benjamin, Meisegeier, Stefan, Kraywinkel, Klaus, Prasser, Fabian, Körber, NilsPublished in 202610.48550/arxiv.2604.15961
- 7.Author(s): Yanshi Chen, Andrew J. McMurry, Daniel Gottlieb, James R. Jones, Benjamin J. Strober, Kenneth D. MandlPublished in 202610.64898/2026.08.18.26359984
- 8.Author(s): Khaled Hamad, Yazeed Alsarhan, Anas Alomari, Karam Hassan, Areen Arabiat, Hamza Abu Owida, Mowafaq Salem AlzboonPublished in 202610.1109/icsmile69273.2026.11519272
- 9.Author(s): Takuma Ishihara, Koji Chida, Naoto Kawahara, Keiichi YamamotoPublished in 202610.2196/preprints.110352
- 10.Author(s): Chapelle, R{é}my, Sedki, MohammedPublished in 202610.48550/arxiv.2610.35163
- 11.Author(s): Sk., Md. Sajeebul Islam, Hossain, Khan Enaet, Shawon, Md. Mehedi HasanPublished in 202610.48550/arxiv.2607.16300
- 12.Author(s): Iris Pigeot, Manuela Peters, Johannes Darms, Jens Dierkes, Martin Golebiewski, Carsten Oliver Schmidt, Ulrich Sax, Matthias B. Schulze, Hajo Zeeb, Roman Baum, Oya Beyan, Holger Fröhlich, Julia Fürst, Marie L. Gebhardt, Theresa Idda, Timm Intemann, Franziska Jannasch, Elisa Kasbohm, Dennis-Kenji Kipker, Toralf Kirsten, Sophie Anne Inès Klopfenstein, Ekaterina Kutafina, Johanna Liebig, Birte Lindstädt, Matthias Löbe, Frank Meineke, Katharina Nimptsch, Ute Nöthlings, Tracy Bonsu Osei, Ines Perrar, Tobias Pischon, Fabian Prasser, Julia Sasse, Lina H. Schaare, Florian Schwarz, Sofia Maria Siampani, Sylvia Thun, Carina Nina Vorisek, Juliane FluckPublished in 202610.21203/rs.3.rs-10082861/v1
- 13.Author(s): Ivana Nanevski, Sebastian Jäger, Maryam Mohebi, Matthias Schulte-Althoff, Jörg Pohle, Nicholas Chandler, Rahel Gubser, Alessia Nowak, Fabian Prasser, Daniel Fürstenau, Felix Balzer, Felix BiessmannPublished in 202610.1038/s41597-026-07910-z
- 14.Author(s): Md Faisal Ahmed, Zhengdao WangPublished in 202510.1109/tps-isa67132.2025.00035
- 15.Author(s): Marko Miletic, Murat SariyarPublished in 202510.1186/s12911-025-03326-8
- 16.Author(s): Md Faisal Ahmed, Zhengdao WangPublished in 202510.1109/tps-isa67132.2025.00018
- 17.Author(s): Lisa Pilgram, Haksoo Ko, Adeline Tung, Khaled El EmamPublished in 202510.1038/s41746-025-02112-0
- 18.Author(s): Alejandro Correa Rojo, Yves Moreau, Gökhan ErtaylanPublished in 202510.1101/2025.10.17.682995
- 19.Author(s): Echo H. Wang, Puja Myles, Randi Foraker, Sengwee Toh, Lucy Mosquera, Khaled El Emam, Mehmet BurcuPublished in 202510.1038/s41746-025-02126-8