Skip to main content

A utility and privacy evaluation library for synthetic data

Project description

Documentation Status PyPI Downloads GitHub stars

Synthetic Data: Utility, Regulatory compliance, and Ethical privacy

The SURE package is an open-source Python library intended to be used for the assessment of the utility and privacy performance of any tabular synthetic dataset.

The SURE library features multiple Python modules that can be easily imported and seamlessly integrated into any Python script after installing the library.

[!WARNING] This is a beta version of the library and only runs on Linux and MacOS for the moment.

[!IMPORTANT] Requires Python >= 3.10

Installation

To install the library run the following command in your terminal:

$ pip install clearbox-sure

Modules overview

The SURE library features the following modules:

  1. Preprocessor
  2. Statistical similarity metrics
  3. Model garden
  4. ML utility metrics
  5. Distance metrics
  6. Privacy attack sandbox
  7. Report generator

Preprocessor

The input datasets undergo manipulation by the preprocessor module, tailored to conform to the standard structure utilized across the subsequent processes. The Polars library used in the preprocessor makes this operation significantly faster compared to the use of other data processing libraries.

Utility

The statistical similarity metrics, the ML utility metrics and the model garden modules constitute the data utility evaluation part.

The statistical similarity module and the distance metrics module take as input the pre-processed datasets and carry out the operation to assess the statistical similarity between the datasets and how different the content of the synthetic dataset is from the one of the original dataset. In particular, The real and synthetic input datasets are used in the statistical similarity metrics module to assess how close the two datasets are in terms of statistical properties, such as mean, correlation, distribution.

The model garden executes a classification or regression task on the given dataset with multiple machine learning models, returning the performance metrics of each of the models tested on the given task and dataset.

The model garden module’s best performing models are employed in the machine learning utility metrics module to compute the usefulness of the synthetic data on a given ML task (classification or regression).

Privacy

The distance metrics and the privacy attack sandbox make up the synthetic data privacy assessment modules.

The distance metrics module computes the Gower distance between the two input datasets and the distance to the closest record for each line of the first dataset.

The ML privacy attack sandbox allows to simulate a Membership Inference Attack for re-identification of vulnerable records identified with the distance metrics module and evaluate how exposed the synthetic dataset is to this kind of assault.

Report

Eventually, the report generator provides a summary of the utility and privacy metrics computed in the previous modules, providing a visual digest with charts and tables of the results.

This following diagram serves as a visual representation of how each module contributes to the utility-privacy assessment process and highlights the seamless interconnection and synergy between individual blocks.

drawing

Usage

The library leverages Polars, which ensures faster computations compared to other data manipulation libraries. It supports both Polars and Pandas dataframes.

The user must provide both the original real training dataset (which was used to train the generative model that produced the synthetic dataset), the real holdout dataset (which was NOT used to train the generative model that produced the synthetic dataset) and the corresponding synthetic dataset to enable the library's modules to perform the necessary computations for evaluation.

Below is a code snippet example for the usage of the library:

# Import the necessary modules from the SURE library
from sure import Preprocessor, report
from sure.utility import (compute_statistical_metrics, compute_mutual_info,
			  compute_utility_metrics_class,
			  detection,
			  query_power)
from sure.privacy import (distance_to_closest_record, dcr_stats, number_of_dcr_equal_to_zero, validation_dcr_test, 
			  adversary_dataset, membership_inference_test)

# Assuming real_data, valid_data and synth_data are three pandas DataFrames

# Preprocessor initialization and query execution on the real, synthetic and validation datasets
preprocessor            = Preprocessor(real_data, num_fill_null='forward', scaling='standardize')

real_data_preprocessed  = preprocessor.transform(real_data)
valid_data_preprocessed = preprocessor.transform(valid_data)
synth_data_preprocessed = preprocessor.transform(synth_data)

# Statistical properties and mutual information
num_features_stats, cat_features_stats, temporal_feat_stats = compute_statistical_metrics(real_data, synth_data)
corr_real, corr_synth, corr_difference                      = compute_mutual_info(real_data_preprocessed, synth_data_preprocessed)

# ML utility: TSTR - Train on Synthetic, Test on Real
X_train      = real_data_preprocessed.drop("label", axis=1) # Assuming the datasets have a “label” column for the machine learning task they are intended for
y_train      = real_data_preprocessed["label"]
X_synth      = synth_data_preprocessed.drop("label", axis=1)
y_synth      = synth_data_preprocessed["label"]
X_test       = valid_data_preprocessed.drop("label", axis=1).limit(10000) # Test the trained models on a portion of the original real dataset (first 10k rows)
y_test       = valid_data_preprocessed["label"].limit(10000)
TSTR_metrics = compute_utility_metrics_class(X_train, X_synth, X_test, y_train, y_synth, y_test)

# Distance to closest record
dcr_synth_train       = distance_to_closest_record("synth_train", synth_data, real_data)
dcr_synth_valid       = distance_to_closest_record("synth_val", synth_data, valid_data)
dcr_stats_synth_train = dcr_stats("synth_train", dcr_synth_train)
dcr_stats_synth_valid = dcr_stats("synth_val", dcr_synth_valid)
dcr_zero_synth_train  = number_of_dcr_equal_to_zero("synth_train", dcr_synth_train)
dcr_zero_synth_valid  = number_of_dcr_equal_to_zero("synth_val", dcr_synth_valid)
share                 = validation_dcr_test(dcr_synth_train, dcr_synth_valid)

# Detection Score
detection_score = detection(real_data, synth_data, preprocessor)

# Query Power
query_power_score = query_power(real_data, synth_data, preprocessor)

# ML privacy attack sandbox initialization and simulation
adversary_df = adversary_dataset(real_data, valid_data)
# The function adversary_dataset adds a column "privacy_test_is_training" to the adversary dataset, indicating whether the record was part of the training set or not
adversary_guesses_ground_truth = adversary_df["privacy_test_is_training"] 
MIA = membership_inference_test(adversary_dfv, synth_data, adversary_guesses_ground_truth)

# Report generation as HTML page
report(real_data, synth_data)

Follow the step-by-step guide to test the library.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

clearbox_sure-0.2.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

clearbox_sure-0.2.15-cp312-cp312-macosx_10_13_universal2.whl (372.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

clearbox_sure-0.2.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

clearbox_sure-0.2.15-cp311-cp311-macosx_10_9_universal2.whl (377.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

clearbox_sure-0.2.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

clearbox_sure-0.2.15-cp310-cp310-macosx_10_9_universal2.whl (374.5 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file clearbox_sure-0.2.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 958977ade66f77154cf6a2396242e94f499fb710848a13a07858c535fb4afce3
MD5 203a8bed1becb6c83d45e81069c1fcaf
BLAKE2b-256 e4f985eb1c255f3f1f2ab188577f7400c207b458fc00a971f36fe1163ccbb099

See more details on using hashes here.

File details

Details for the file clearbox_sure-0.2.15-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 186720e22f6d1d98f340fea54863797c8db078fd6974c3e1de641eb9ddcb21c6
MD5 a917fb0443993b3950e5ed18e00fa721
BLAKE2b-256 93d0924b7e9203d44889971879d0846882151d8018db6eb51ecfd0d72845af98

See more details on using hashes here.

File details

Details for the file clearbox_sure-0.2.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 be229c732ead7f1f6b166cba5473e860436049e2ade1887d31696d4b84457032
MD5 2b1c9bf9138adfced1529ec650f9f150
BLAKE2b-256 d50b2ab655e00da1a2bcc1230ab452602275c9f477419fd4e5da93b34f4e66f2

See more details on using hashes here.

File details

Details for the file clearbox_sure-0.2.15-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3b6a02f23bfeebfa63b746e6dc495b141c698f3fef3b28c900c270ae5f7e1813
MD5 b3b53f4b16ae23a02b477bc1423479ea
BLAKE2b-256 cedf8c139c90a3e0aa43b17efda529added4ad965709aa39342a19aeae2c0642

See more details on using hashes here.

File details

Details for the file clearbox_sure-0.2.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8061570a9c61bae993a9d93eb409987d3d61cd6864d29a7db59ea3221d6e5bae
MD5 42b9b04687ec1947c98dcdc05792d445
BLAKE2b-256 83a3718227993d16e9dee94839dbc665205571d6105a6821abaa035de3401e25

See more details on using hashes here.

File details

Details for the file clearbox_sure-0.2.15-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clearbox_sure-0.2.15-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f805f3e92ec410d1b461d6fbe315b5c509fdb3df04dd9fc6b89a9757b03e43bc
MD5 b1577af36eeff0760b5ed982faf546f6
BLAKE2b-256 642ef123383a8de01d378e9fd91013f039482413b6f3ebcdff05f14425f60c94

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page