diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 32d63f7..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# Change Log
-
-## v1.3.2 - 2022-05-03
-
-### Added
-* html and public, commandline parameters to `sdnist.challenge.submission` module to allow using this
-module for scoring with public data sets.
-
-### Changed
-
-
-### Fixed
-* `sdnist.challenge.submission` to read epsilon from dataset's parameters json file
-instead of using hard-coded values.
-* Generating collective html visualization of all synthetic datasets scored using `sdnist.challenge.submission`
-module.
-* Jinja template to render drop-down selection of year and puma for census challenge visualization.
-
-## v1.3.1 - 2022-04-05
-
-### Added
-* Graph Map Edge scoring for taxi challenge.
-* Apparent Match Distribution privacy metric.
-* Support for running `sdnist.challenge.submission` module
-for commandline. `sdnist.challenge.submission` module generates
-final score which can be compared to leaderboard scores
-
-### Changed
-
-* Score function computes aggregate score over all scoring metrics
-available for a challenge.
- * k-marginal for census challenge.
- * k-marginal, hoc and graph-edge-map for taxi challenge
-
-### Fixed
-* Higher Order Conjunction Metric
-
-## v1.3.0 - 2022-03-23
-
-### Added
-* Support for visualizing k-marginal scores of each puma with openstreet map for all available census datasets in SDNist. Support available for datasets:
- * IL_OH_10Y_PUMS.[csv, json, parquet] tabular supported with IL_OH_10Y_PUMS.geojson.
- * GA_NC_SC_10Y_PUMS.[csv, json, parquet] tabular (csv, json, parquet) supported with GA_NC_SC_10Y_PUMS.geojson.
- * NY_PA_10Y_PUMS.[csv, json, parquet] tabular supported with NY_PA_10Y_PUMS.geojson.
-
-### Changed
-* No more support for downloading a specific missing dataset instead SDNist downloads all the available datasets from the [sdnist github releases](https://github.com/usnistgov/SDNist/releases).
-
-### Fixed
-* problem with importing `importlib_resources` in python >= 3.7
-* broken download links for fetching data.
\ No newline at end of file
diff --git a/CITATION.cff b/CITATION.cff
new file mode 100644
index 0000000..1ebac0a
--- /dev/null
+++ b/CITATION.cff
@@ -0,0 +1,27 @@
+cff-version: 1.2.0
+title: "SDNist: Deidentified Data Report Tool"
+abstract: "SDNist provides benchmark data and a suite of both machine- and human-readable outputs with more than ten metrics including univariate and multivariate statistics, database distance metrics, principal component analysis, propensity, basic privacy evaluation, and other information-rich tools. "
+message: >-
+ If you use this repository or present information about it publicly, please cite us.
+type: software
+version: 2.0.0
+doi: 10.18434/mds2-2943
+date-released: 2021-12-16
+contact:
+ - affiliation: "National Institute of Standards and Technology"
+ email: gary.howarth@nist.gov
+ family-names: Gary
+ given-names: Howarth
+authors:
+- family-names: Task
+ given-names: Christine
+ affiliation: Knexus Research Corporation
+ email: christine.task@knexusresearch.com
+- family-names: Bhagat
+ given-names: Karan
+ affiliation: Knexus Research Corporation
+- family-names: Howarth
+ given-names: Gary
+ affiliation: National Institute of Standards and Technology
+ email: gary.howarth@nist.gov
+ ORCID: 0000-0002-3587-0546
diff --git a/README.md b/README.md
index db9d282..d631fe6 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,8 @@
-# SDNist v1.4 beta: Deidentified Data Report Tool
-
-## We anticipate releasing SDNist v2 February 21 2023!
+# SDNist v2.0: Deidentified Data Report Tool
## [SDNist is the offical software package for engaging in the NIST Collaborative Research Cycle](https://pages.nist.gov/privacy_collaborative_research_cycle)
-Welcome! SDNist v1.4b is a python package that provides benchmark data and evaluation metrics for deidentified data generators. This version of SDNist supports using the [NIST Diverse Community Excerpts](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts), a geographically partioned, limited feature data set.
+Welcome! SDNist v2.0 is a python package that provides benchmark data and evaluation metrics for deidentified data generators. This version of SDNist supports using the [NIST Diverse Community Excerpts](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts), a geographically partioned, limited feature data set.
The deidentified data report evaluates utility and privacy of a given deidentified dataset and generates a summary quality report with performance of a deidentified dataset enumerated and illustrated for each utility and privacy metric.
@@ -25,16 +23,24 @@ Help us improve the package and this guide by reporting issues [here](https://gi
### Temporal Map Challenge Environment
-SDNist v1.4b does not support the Temporal Map Challenge environment.
+SDNist v2.0 does not support the Temporal Map Challenge environment.
To run the testing environment from the [*NIST PSCR Differential Privacy Temporal Map Challenge*](https://www.nist.gov/ctl/pscr/open-innovation-prize-challenges/past-prize-challenges/2020-differential-privacy-temporal) for the Chicago Taxi data sprint or the American Community Survey sprint, please go to the the [Temporal Map Challenge assets repository](https://github.com/usnistgov/Differential-Privacy-Temporal-Map-Challenge-assets).
+
+### Citing SDNist Deidentified Data Report Tool
+If you publish work that utilizes the SDNist Deidentified Data Tool, please cite the software. Citation recommendation:
+> Task C., Bhagat K., and Howarth G.S. (2023), SDNist v2: Deidentified Data Report Tool,
+> National Institute of Standards and Technology,
+> https://doi.org/10.18434/mds2-2943
+(NOTE: DOI is not yet active, but should be by 1 APR 2023).
+
Setting Up the SDNIST Report Tool
------------------------
### Brief Setup Instructions
-SDNist v1.4 requires Python version 3.7 or greater. If you have installed a previous version of the SDNist library, we recommend uninstalling or installing v1.4 in a virtual environment. v1.4 can be installed via [Release 1.4.0b](https://github.com/usnistgov/SDNist/releases/tag/v1.4.1-b.1). The NIST Diverse Community Exceprt data will download on the fly.
+SDNist v2.0 requires Python version 3.7 or greater. If you have installed a previous version of the SDNist library, we recommend uninstalling or installing v2.0 in a virtual environment. v2.0 can be installed via [Release 2.0](https://github.com/usnistgov/SDNist/releases/tag/v2.0.0). The NIST Diverse Community Exceprt data will download on the fly.
### Detailed Setup Instructions
@@ -54,10 +60,10 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
c:\\sdnist-project>
```
-4. Download the sdnist installable wheel (sdnist-1.4.1b-py3-none-any.whl) from the [Github:SDNist beta release](https://github.com/usnistgov/SDNist/releases/download/v1.4.1-b.1/sdnist-1.4.1b1-py3-none-any.whl).
+4. Download the sdnist installable wheel (sdnist-2.0.0-py3-none-any.whl) from the [Github:SDNist beta release](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/sdnist-2.0.0-py3-none-any.whl).
-5. Move the downloaded sdnist-1.4.1b1-py3-none-any.whl file to the sdnist-project directory.
+5. Move the downloaded sdnist-2.0.0-py3-none-any.whl file to the sdnist-project directory.
6. Using the terminal on Mac/Linux or powershell on Windows, navigate to the sdnist-project directory.
@@ -110,7 +116,7 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
```
-10. Per step 5 above, the sdnist-1.4.1b1-py3-none-any.whl file should already be present in the sdnist-project directory. Check whether that is true by listing the files in the sdnist-project directory.
+10. Per step 5 above, the sdnist-2.0.0-py3-none-any.whl file should already be present in the sdnist-project directory. Check whether that is true by listing the files in the sdnist-project directory.
**MAC OS/Linux:**
```
@@ -120,12 +126,12 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
```
(venv) c:\\sdnist-project> dir
```
- The sdnist-1.4.0b2-py3-none-any.whl file should be in the list printed by the above command; otherwise, follow steps 4 and 5 again to download the .whl file.
+ The sdnist-2.0.0-py3-none-any.whl file should be in the list printed by the above command; otherwise, follow steps 4 and 5 again to download the .whl file.
11. Install sdnist Python library:
```
- (venv) c:\\sdnist-project> pip install sdnist-1.4.1b1-py3-none-any.whl
+ (venv) c:\\sdnist-project> pip install sdnist-2.0.0-py3-none-any.whl
```
@@ -143,8 +149,9 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
TARGET_DATASET_NAME Select name of the target dataset that was used to generated given deidentified dataset
optional arguments:
- \-h, \--help show this help message and exit
- \--data-root DATA_ROOT Path of the directory to be used as the root for the target datasets\--download DOWNLOAD Download toy datasets if not present locallyChoices for Target Dataset Name::
+ \-h, \--help Show this help message and exit
+ \--data-root DATA_ROOT Path of the directory to be used as the root for the target datasets
+ \--download DOWNLOAD Download toy datasets if not present locallyChoices for Target Dataset Name::
(dataname) (filename)
MA ma2019
@@ -204,7 +211,7 @@ Generate Data Quality Report
- TX
- NATIONAL
- - **--data-root**: The absolute or relative path to the directory containing the bundled dataset, or the directory where the bundled dataset should be downloaded to if it is not available locally. The default directory is set to sdnist_toy_data.
+ - **--data-root**: The absolute or relative path to the directory containing the bundled dataset, or the directory where the bundled dataset should be downloaded to if it is not available locally. The default directory is set to **diverse_community_excerpts_data**.
## Setup Data for SDNIST Report Tool
@@ -215,7 +222,7 @@ Generate Data Quality Report
(venv) c:\\sdnist-project> python -m sdnist.report syn_tx.csv TX
Downloading all SDNist datasets from:
- https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip ...
+ https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip ...
...5%, 47352 KB, 8265 KB/s, 5 seconds elapsed
```
@@ -227,30 +234,30 @@ Generate Data Quality Report
3. The sdnist.report package also needs a deidentified dataset that it can evaluate against its original counterpart. Since the sdnist.report package comes bundled with the datasets, the deidentified dataset should be generated using the bundled datasets.
- You can download a copy of the datasets from [Github Sdnist Toy Dataset](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts). This copy is similar to the one bundled with the sdnist.report package, but it contains more documentation and a description of the datasets.
+ You can download a copy of the datasets from Github [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts). This copy is similar to the one bundled with the sdnist.report package, but it contains more documentation and a description of the datasets.
-4. You can download the toy deidentified datasets from [Github Sdnist Toy Synthetic Dataset](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/toy_synthetic_data.zip). Unzip the downloaded file, and move the unzipped toy_synthetic_dataset directory to the sdnist-project directory.
+4. You can download the toy deidentified datasets from Github [Sdnist Toy Synthetic Dataset](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/toy_deidentified_data.zip). Unzip the downloaded file, and move the unzipped toy_synthetic_dataset directory to the sdnist-project directory.
-5. Each toy deidentified dataset file is generated using the [Sdnist Toy Dataset](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip). The syn_ma.csv, syn_tx.csv, and syn_national.csv deidentified dataset files are created from target datasets MA (ma2019.csv), TX (tx2019.csv), and NATIONAL(national2019.csv), respectively. You can use one of the toy synthetic dataset files for testing whether the sdnist.report package is installed correctly on your system.
+5. Each toy deidentified dataset file is generated using the [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip). The syn_ma.csv, syn_tx.csv, and syn_national.csv deidentified dataset files are created from target datasets MA (ma2019.csv), TX (tx2019.csv), and NATIONAL(national2019.csv), respectively. You can use one of the toy synthetic dataset files for testing whether the sdnist.report package is installed correctly on your system.
6. Use the following commands for generating reports if you are using a toy deidentified dataset file:
For evaluating the Massachusetts dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_ma.csv MA
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_ma.csv MA
```
For evaluating the Texas dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_tx.csv TX
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_tx.csv TX
```
For evaluating the national dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_national.csv NATIONAL
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_national.csv NATIONAL
```
7. A deidentified dataset can be a .csv or a parquet file, and the path of this file is required
@@ -258,9 +265,6 @@ by the sdnist.report package to generate a data quality report.
## Download Data Manually
-1. If the sdnist.report package is not able to download the datasets, you can download them from [Github:SDNist toy data beta release](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip).
-2. Move the downloaded SDNist-toy-data-1.4.0-b.1.zip file to the sdnist-project directory.
-3. Unzip the SDNist-toy-data-1.4.0-b.1.zip file and move the data directory inside it to the sdnist-project directory.
-4. Delete the SDNist-toy-data-1.4.0-b.1.zip file once the data directory is successfully moved out of the unzipped directory.
-5. Also delete the now-empty SDNist-toy-data-1.4.0-b.1 directory from where the zip file was extracted.
-6. And finally, to successfully install datasets manually, change the name of the data directory inside the sdnist-project directory to sdnist_toy_data.
+1. If the sdnist.report package is not able to download the datasets, you can download them from Github [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip).
+3. Unzip the **diverse_community_excerpts_data.zip** file and move the unzipped **diverse_community_excerpts_data** directory to the **sdnist-project** directory.
+4. Delete the **diverse_community_excerpts_data.zip** file once the data is successfully extracted from the zip.
diff --git a/SDNist_introduction_paper_PPAI22.pdf b/SDNist_introduction_paper_PPAI22.pdf
deleted file mode 100644
index b5636c9..0000000
Binary files a/SDNist_introduction_paper_PPAI22.pdf and /dev/null differ
diff --git a/challenge benchmark problems/Location Sequence Benchmark.pdf b/challenge benchmark problems/Location Sequence Benchmark.pdf
deleted file mode 100644
index 5bf9284..0000000
Binary files a/challenge benchmark problems/Location Sequence Benchmark.pdf and /dev/null differ
diff --git a/challenge benchmark problems/Survey Data Benchmark.pdf b/challenge benchmark problems/Survey Data Benchmark.pdf
deleted file mode 100644
index e7da2d3..0000000
Binary files a/challenge benchmark problems/Survey Data Benchmark.pdf and /dev/null differ
diff --git a/examples/DPSyn/LICENSE b/examples/DPSyn/LICENSE
deleted file mode 100644
index 15629b1..0000000
--- a/examples/DPSyn/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 DPSyn
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/examples/DPSyn/config/data.yaml b/examples/DPSyn/config/data.yaml
deleted file mode 100644
index 86505c7..0000000
--- a/examples/DPSyn/config/data.yaml
+++ /dev/null
@@ -1,176 +0,0 @@
----
-pub_dataset_path: /codeexecution/dataloader/public.csv
-priv_dataset_path: /codeexecution/data/ground_truth.csv
-parameter_spec: /codeexecution/data/parameters.json
-numerical_binning:
- "AGE":
- - 20
- - 105
- - 5
- "INCTOT":
- - 0
- - 105_000
- - 5_000
- "INCWAGE":
- - 0
- - 105_000
- - 5_000
- "INCWELFR":
- - 0
- - 105_000
- - 5_000
- "INCINVST":
- - 0
- - 105_000
- - 5_000
- "INCEARN":
- - 0
- - 105_000
- - 5_000
- "POVERTY":
- - 0
- - 520
- - 20
- "HHWT":
- - 0
- - 520
- - 20
- "PERWT":
- - 0
- - 520
- - 20
- "DEPARTS":
- - 0
- - 15
- - 30
- - 45
- "ARRIVES":
- - 0
- - 15
- - 30
- - 45
-grouping_attributes:
- - attributes:
- - "SEX"
- - "MARST"
- num_values: 12
- grouped_name: "SEX+MARST"
- combinations:
- - !!python/tuple [1, 1]
- - !!python/tuple [1, 2]
- - !!python/tuple [1, 3]
- - !!python/tuple [1, 4]
- - !!python/tuple [1, 5]
- - !!python/tuple [1, 6]
- - !!python/tuple [2, 1]
- - !!python/tuple [2, 2]
- - !!python/tuple [2, 3]
- - !!python/tuple [2, 4]
- - !!python/tuple [2, 5]
- - !!python/tuple [2, 6]
- - attributes:
- - "HCOVANY"
- - "HCOVPRIV"
- - "HINSEMP"
- - "HINSCAID"
- - "HINSCARE"
- num_values: 13
- grouped_name: "HINS-COV"
- combinations:
- - !!python/tuple [1, 1, 1, 1, 1]
- - !!python/tuple [2, 1, 1, 1, 1]
- - !!python/tuple [2, 1, 1, 1, 2]
- - !!python/tuple [2, 1, 1, 2, 1]
- - !!python/tuple [2, 1, 1, 2, 2]
- - !!python/tuple [2, 2, 1, 1, 1]
- - !!python/tuple [2, 2, 1, 1, 2]
- - !!python/tuple [2, 2, 1, 2, 1]
- - !!python/tuple [2, 2, 1, 2, 2]
- - !!python/tuple [2, 2, 2, 1, 1]
- - !!python/tuple [2, 2, 2, 1, 2]
- - !!python/tuple [2, 2, 2, 2, 1]
- - !!python/tuple [2, 2, 2, 2, 2]
- - attributes:
- - "EMPSTATD"
- - "WORKEDYR"
- - "WRKLSTWK"
- num_values: 28
- grouped_name: "EMP"
- combinations:
- - !!python/tuple [0, 0, 0]
- - !!python/tuple [10, 3, 2]
- - !!python/tuple [30, 1, 1]
- - !!python/tuple [30, 2, 1]
- - !!python/tuple [30, 1, 3]
- - !!python/tuple [30, 3, 1]
- - !!python/tuple [10, 3, 3]
- - !!python/tuple [20, 3, 1]
- - !!python/tuple [20, 2, 1]
- - !!python/tuple [30, 2, 3]
- - !!python/tuple [30, 3, 3]
- - !!python/tuple [12, 3, 1]
- - !!python/tuple [20, 1, 1]
- - !!python/tuple [12, 3, 2]
- - !!python/tuple [14, 3, 2]
- - !!python/tuple [20, 3, 3]
- - !!python/tuple [30, 3, 2]
- - !!python/tuple [20, 2, 3]
- - !!python/tuple [12, 3, 3]
- - !!python/tuple [20, 1, 3]
- - !!python/tuple [10, 3, 1]
- - !!python/tuple [14, 3, 3]
- - !!python/tuple [30, 1, 2]
- - !!python/tuple [30, 2, 2]
- - !!python/tuple [15, 3, 1]
- - !!python/tuple [14, 3, 1]
- - !!python/tuple [15, 3, 3]
- - !!python/tuple [20, 1, 2]
- - attributes:
- - "ABSENT"
- - "LOOKING"
- num_values: 10
- grouped_name: "ABS+LOOK"
- combinations:
- - !!python/tuple [0, 0]
- - !!python/tuple [1, 1]
- - !!python/tuple [1, 2]
- - !!python/tuple [1, 3]
- - !!python/tuple [3, 1]
- - !!python/tuple [3, 2]
- - !!python/tuple [3, 3]
- - !!python/tuple [4, 1]
- - !!python/tuple [4, 2]
- - !!python/tuple [4, 3]
- - attributes:
- - "AVAILBLE"
- - "WRKRECAL"
- num_values: 12
- grouped_name: "AVA+RECAL"
- combinations:
- - !!python/tuple [0, 0]
- - !!python/tuple [2, 1]
- - !!python/tuple [2, 2]
- - !!python/tuple [2, 3]
- - !!python/tuple [3, 1]
- - !!python/tuple [3, 2]
- - !!python/tuple [3, 3]
- - !!python/tuple [4, 1]
- - !!python/tuple [4, 2]
- - !!python/tuple [4, 3]
- - !!python/tuple [5, 1]
- - !!python/tuple [5, 2]
- - !!python/tuple [5, 3]
-determined_attributes:
- "EMPSTAT":
- by: "EMPSTATD"
- mapping:
- 20: 2
- 30: 3
- 0: 0
- default: 1
- "LABFORCE":
- by: "EMPSTATD"
- mapping:
- 30: 1
- 0: 0
- default: 2
diff --git a/examples/DPSyn/config/data_type.py b/examples/DPSyn/config/data_type.py
deleted file mode 100644
index 23d59b8..0000000
--- a/examples/DPSyn/config/data_type.py
+++ /dev/null
@@ -1,38 +0,0 @@
-
-COLS = {
- "PUMA": "str",
- "YEAR": "uint32",
- "HHWT": "float",
- "GQ": "uint8",
- "PERWT": "float",
- "SEX": "uint8",
- "AGE": "uint8",
- "MARST": "uint8",
- "RACE": "uint8",
- "HISPAN": "uint8",
- "CITIZEN": "uint8",
- "SPEAKENG": "uint8",
- "HCOVANY": "uint8",
- "HCOVPRIV": "uint8",
- "HINSEMP": "uint8",
- "HINSCAID": "uint8",
- "HINSCARE": "uint8",
- "EDUC": "uint8",
- "EMPSTAT": "uint8",
- "EMPSTATD": "uint8",
- "LABFORCE": "uint8",
- "WRKLSTWK": "uint8",
- "ABSENT": "uint8",
- "LOOKING": "uint8",
- "AVAILBLE": "uint8",
- "WRKRECAL": "uint8",
- "WORKEDYR": "uint8",
- "INCTOT": "int32",
- "INCWAGE": "int32",
- "INCWELFR": "int32",
- "INCINVST": "int32",
- "INCEARN": "int32",
- "POVERTY": "uint32",
- "DEPARTS": "uint32",
- "ARRIVES": "uint32",
-}
diff --git a/examples/DPSyn/config/path.py b/examples/DPSyn/config/path.py
deleted file mode 100644
index 9aee3d5..0000000
--- a/examples/DPSyn/config/path.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from pathlib import Path
-
-import os
-
-ROOT_DIRECTORY = Path("")
-DATA_DIRECTORY = ROOT_DIRECTORY / "data"
-CONFIG_DIRECTORY = ROOT_DIRECTORY / "config"
-DATALOADER_DIRECTORY = ROOT_DIRECTORY / "dataloader"
-PICKLE_DIRECTORY = DATALOADER_DIRECTORY / "pkl"
-
-SUBMISSION_FORMAT = DATA_DIRECTORY / "submission_format.csv"
-INPUT = DATA_DIRECTORY / "ground_truth.csv"
-PUBLIC_INPUT = DATA_DIRECTORY / "ground_truth.csv"
-PARAMS = DATA_DIRECTORY / "parameters.json"
-CONFIG_DATA = CONFIG_DIRECTORY / "data.yaml"
-OUTPUT = ROOT_DIRECTORY / "submission.csv"
-
diff --git a/examples/DPSyn/dataloader/DataLoader.py b/examples/DPSyn/dataloader/DataLoader.py
deleted file mode 100644
index 7cf64b8..0000000
--- a/examples/DPSyn/dataloader/DataLoader.py
+++ /dev/null
@@ -1,239 +0,0 @@
-import json
-import os
-import pickle
-from typing import Tuple, Dict
-import numpy as np
-import pandas as pd
-import yaml
-from loguru import logger
-
-from config.path import CONFIG_DATA, PICKLE_DIRECTORY, DATA_DIRECTORY, INPUT
-from config.data_type import COLS
-
-import sdnist
-
-
-class DataLoader:
- def __init__(self):
- self.public_data = None
- self.private_data = None
- self.all_attrs = []
-
- self.encode_mapping = {}
- self.decode_mapping = {}
-
- self.pub_marginals = {}
- self.priv_marginals = {}
-
- self.encode_schema = {}
-
- self.general_schema = {}
- self.filter_values = {}
-
- self.config = None
-
- def load_data(self, pub_only=False):
- # load public data and get grouping mapping and filter values
-
- with open(CONFIG_DATA, 'r') as f:
- config = yaml.load(f, Loader=yaml.FullLoader)
- self.config = config
-
- # load public data
- logger.info("Loading public data")
- self.public_data, self.general_schema = sdnist.census(root="~/datasets", public=False)
- self.public_data = self.binning_attributes(config['numerical_binning'], self.public_data)
- self.public_data = self.grouping_attributes(config['grouping_attributes'], self.public_data)
- self.public_data = self.remove_determined_attributes(config['determined_attributes'], self.public_data)
- self.public_data = self.recode_remain(self.general_schema, config, self.public_data)
- # pickle.dump([self.public_data, self.encode_mapping], open(public_pickle_path, 'wb'))
-
- # load private data
- logger.info("Loading private data")
- self.private_data, self.general_schema = sdnist.census(root="~/datasets", public=True)
- self.private_data = self.binning_attributes(config['numerical_binning'], self.private_data)
- self.private_data = self.grouping_attributes(config['grouping_attributes'], self.private_data)
- self.private_data = self.remove_determined_attributes(config['determined_attributes'], self.private_data)
- self.private_data = self.recode_remain(self.general_schema, config, self.private_data, is_private=True)
- # pickle.dump([self.private_data, self.encode_mapping], open(priv_pickle_path, 'wb'))
-
- for attr, encode_mapping in self.encode_mapping.items():
- self.encode_schema[attr] = sorted(encode_mapping.values())
-
- logger.info(f"public data size {self.public_data.shape}, priv data size {self.private_data.shape}")
-
- def obtain_attrs(self):
- if not self.all_attrs:
- all_attrs = list(self.public_data.columns)
- try:
- all_attrs.remove("sim_individual_id")
- except:
- pass
- self.all_attrs = all_attrs
- return self.all_attrs
-
- def binning_attributes(self, binning_info, data):
- """
- Numerical attributes can be binned
- """
- for attr, spec_list in binning_info.items():
- if attr == "DEPARTS" or attr == "ARRIVES":
- bins = np.r_[-np.inf, [h * 100 + m for h in range(24) for m in spec_list], np.inf]
- else:
- [s, t, step] = spec_list
- bins = np.r_[-np.inf, np.arange(s, t, step), np.inf]
- data[attr] = pd.cut(data[attr], bins).cat.codes
- self.encode_mapping[attr] = {(bins[i], bins[i + 1]): i for i in range(len(bins) - 1)}
- self.decode_mapping[attr] = [i for i in range(len(bins) - 1)]
- return data
-
- def grouping_attributes(self, grouping_info, data):
- """
- Some attributes can be grouped
- """
- for grouping in grouping_info:
- attributes = grouping['attributes']
- new_attr = grouping['grouped_name']
-
- # group attribute values into tuples
- data[new_attr] = data[attributes].apply(tuple, axis=1)
-
- # map tuples to new values in new columns
- encoding = {v: i for i, v in enumerate(grouping['combinations'])}
- data[new_attr] = data[attributes].apply(tuple, axis=1)
- data[new_attr] = data[new_attr].map(encoding)
- self.encode_mapping[new_attr] = encoding
- self.decode_mapping[new_attr] = grouping['combinations']
-
- # drop grouped columns
- data = data.drop(attributes, axis=1)
- return data
-
- @staticmethod
- def remove_determined_attributes(determined_info, data):
- """
- Some dataset are determined by other attributes
- """
- for determined_attr in determined_info.keys():
- data = data.drop(determined_attr, axis=1)
- # print("remove", determined_attr)
- data = data.drop('sim_individual_id', axis=1)
- return data
-
- # recode the remaining single attributes to save storage
- def recode_remain(self, schema, config, data, is_private=False):
- encoded_attr = list(config['numerical_binning'].keys()) + [grouping['grouped_name'] for grouping in config['grouping_attributes']]
- for attr in data.columns:
- if attr in ['sim_individual_id'] or attr in encoded_attr:
- continue
- # print("encode remain:", attr)
- assert attr in schema and 'values' in schema[attr]
- if is_private and attr == 'PUMA':
- mapping = data[attr].unique()
- else:
- mapping = schema[attr]['values']
- encoding = {v: i for i, v in enumerate(mapping)}
- data[attr] = data[attr].map(encoding)
- self.encode_mapping[attr] = encoding
- self.decode_mapping[attr] = mapping
- return data
-
- def generate_all_pub_marginals(self):
- pub_marginal_pickle = PICKLE_DIRECTORY / f"pub_all_marginals.pkl"
-
- if pub_marginal_pickle is not None and os.path.isfile(pub_marginal_pickle):
- self.pub_marginals = pickle.load(open(pub_marginal_pickle, 'rb'))
- return self.pub_marginals
-
- all_attrs = list(self.public_data.columns)
- # all_attrs.remove("sim_individual_id")
- # one-way marginals except PUMA and YEAR
- for attr in all_attrs:
- if attr == 'PUMA' or attr == 'YEAR':
- continue
- self.pub_marginals[frozenset([attr])] = self.generate_one_way_marginal(self.public_data, attr)
- # two_way marginals except PUMA and YEAR
- for i, attr in enumerate(all_attrs):
- if attr == 'PUMA' or attr == 'YEAR':
- continue
- for j in range(i + 1, len(all_attrs)):
- if all_attrs[j] == 'PUMA' or all_attrs[j] == 'YEAR':
- continue
- self.pub_marginals[frozenset([all_attrs[i], all_attrs[j]])] = self.generate_two_way_marginal(
- self.public_data, all_attrs[i], all_attrs[j])
-
- if pub_marginal_pickle is not None:
- pickle.dump(self.pub_marginals, open(pub_marginal_pickle, 'wb'))
-
- return self.pub_marginals
-
- def generate_one_way_marginal(self, records: pd.DataFrame, index_attribute: list):
- marginal = records.assign(n=1).pivot_table(values='n', index=index_attribute, aggfunc=np.sum, fill_value=0)
- indices = sorted([i for i in self.encode_mapping[index_attribute].values()])
- marginal = marginal.reindex(index=indices).fillna(0).astype(np.int32)
- return marginal
-
- def generate_two_way_marginal(self, records: pd.DataFrame, index_attribute: list, column_attribute: list):
- marginal = records.assign(n=1).pivot_table(values='n', index=index_attribute, columns=column_attribute,
- aggfunc=np.sum, fill_value=0)
- indices = sorted([i for i in self.encode_mapping[index_attribute].values()])
- columns = sorted([i for i in self.encode_mapping[column_attribute].values()])
- marginal = marginal.reindex(index=indices, columns=columns).fillna(0).astype(np.int32)
- return marginal
-
- def generate_all_one_way_marginals_except_PUMA_YEAR(self, records: pd.DataFrame):
- all_attrs = self.obtain_attrs()
- marginals = {}
- for attr in all_attrs:
- if attr == 'PUMA' or attr == 'YEAR':
- continue
- marginals[frozenset([attr])] = self.generate_one_way_marginal(records, attr)
- return marginals
-
- def generate_all_two_way_marginals_except_PUMA_YEAR(self, records: pd.DataFrame):
- all_attrs = self.obtain_attrs()
- marginals = {}
- for i, attr in enumerate(all_attrs):
- if attr == 'PUMA' or attr == 'YEAR':
- continue
- for j in range(i + 1, len(all_attrs)):
- if all_attrs[j] == 'PUMA' or all_attrs[j] == 'YEAR':
- continue
- marginals[frozenset([attr, all_attrs[j]])] = self.generate_two_way_marginal(records, attr, all_attrs[j])
- return marginals
-
- def generate_marginal_by_config(self, records: pd.DataFrame, config: dict) -> Tuple[Dict, Dict]:
- marginal_sets = {}
- epss = {}
- for marginal_key, marginal_dict in config.items():
- marginals = {}
- if marginal_key == 'priv_all_one_way':
- # merge the returned marginal dictionary
- marginals.update(self.generate_all_one_way_marginals_except_PUMA_YEAR(records))
- elif marginal_key == 'priv_all_two_way':
- # merge the returned marginal dictionary
- marginals.update(self.generate_all_two_way_marginals_except_PUMA_YEAR(records))
- else:
- attrs = marginal_dict['attributes']
- if len(attrs) == 1:
- marginals[frozenset(attrs)] = self.generate_one_way_marginal(records, attrs[0])
- elif len(attrs) == 2:
- marginals[frozenset(attrs)] = self.generate_two_way_marginal(records, attrs[0], attrs[1])
- else:
- raise NotImplementedError
- epss[marginal_key] = marginal_dict['total_eps']
- marginal_sets[marginal_key] = marginals
- return marginal_sets, epss
-
- def get_marginal_grouping_info(self, cur_attrs):
- info = {}
- grouping_info = self.config['grouping_attributes']
- for attr in cur_attrs:
- for grouping in grouping_info:
- new_attr = grouping['grouped_name']
- if new_attr == attr:
- info[new_attr] = grouping['attributes']
- break
- if attr not in info:
- info[attr] = [attr]
- return info
diff --git a/examples/DPSyn/dataloader/RecordPostprocessor.py b/examples/DPSyn/dataloader/RecordPostprocessor.py
deleted file mode 100644
index 73036e3..0000000
--- a/examples/DPSyn/dataloader/RecordPostprocessor.py
+++ /dev/null
@@ -1,121 +0,0 @@
-import numpy as np
-import pandas as pd
-import yaml
-
-COLS = {
- "PUMA": "str",
- "YEAR": "uint32",
- "HHWT": "float",
- "GQ": "uint8",
- "PERWT": "float",
- "SEX": "uint8",
- "AGE": "uint8",
- "MARST": "uint8",
- "RACE": "uint8",
- "HISPAN": "uint8",
- "CITIZEN": "uint8",
- "SPEAKENG": "uint8",
- "HCOVANY": "uint8",
- "HCOVPRIV": "uint8",
- "HINSEMP": "uint8",
- "HINSCAID": "uint8",
- "HINSCARE": "uint8",
- "EDUC": "uint8",
- "EMPSTAT": "uint8",
- "EMPSTATD": "uint8",
- "LABFORCE": "uint8",
- "WRKLSTWK": "uint8",
- "ABSENT": "uint8",
- "LOOKING": "uint8",
- "AVAILBLE": "uint8",
- "WRKRECAL": "uint8",
- "WORKEDYR": "uint8",
- "INCTOT": "int32",
- "INCWAGE": "int32",
- "INCWELFR": "int32",
- "INCINVST": "int32",
- "INCEARN": "int32",
- "POVERTY": "uint32",
- "DEPARTS": "uint32",
- "ARRIVES": "uint32",
-}
-
-class RecordPostprocessor:
- def __init__(self):
- self.config = None
- pass
-
- def post_process(self, data: pd.DataFrame, config_file_path: str, grouping_mapping: dict):
- assert isinstance(data, pd.DataFrame)
- with open(config_file_path, 'r') as f:
- self.config = yaml.load(f, Loader=yaml.BaseLoader)
-
- data = self.ungrouping_attributes(data, grouping_mapping)
- data = self.unbinning_attributes(data)
- data = self.add_determined_attrs(data)
- data = self.decode_other_attributes(data, grouping_mapping)
- data = self.ensure_types(data)
- return data
-
- def unbinning_attributes(self, data: pd.DataFrame):
- binning_info = self.config['numerical_binning']
- print(binning_info)
- for att, spec_list in binning_info.items():
- if att == "DEPARTS" or att == "ARRIVES":
- bins = np.r_[-np.inf, [int(h) * 100 + int(m) for h in range(24) for m in spec_list], np.inf]
- else:
- [s, t, step] = spec_list
- bins = np.r_[-np.inf, np.arange(int(s), int(t), int(step)), np.inf]
-
- # remove np.inf
- bins[0] = bins[1] - 1
- bins[-1] = bins[-2] + 2
-
- values_map = {i: int((bins[i] + bins[i + 1]) / 2) for i in range(len(bins) - 1)}
- data[att] = data[att].map(values_map)
- return data
-
- def ungrouping_attributes(self, data: pd.DataFrame, decode_mapping: dict):
- grouping_info = self.config['grouping_attributes']
- for grouping in grouping_info:
- grouped_attr = grouping['grouped_name']
- attributes = grouping['attributes']
-
- data[grouped_attr] = [decode_mapping[grouped_attr][i] for i in data[grouped_attr]]
-
- # mapping = pd.Index(decode_mapping[grouped_attr])
- # data[grouped_attr] = mapping[data[grouped_attr]] # somehow this raises an error
-
- data[attributes] = pd.DataFrame(data[grouped_attr].tolist(), index=data.index)
- data = data.drop(grouped_attr, axis=1)
- return data
-
- def decode_other_attributes(self, data: pd.DataFrame, decode_mapping: dict):
- grouping_attr = [info["grouped_name"] for info in self.config['grouping_attributes']]
- binning_attr = [attr for attr in self.config['numerical_binning'].keys()]
- for attr, mapping in decode_mapping.items():
- if attr in grouping_attr or attr in binning_attr:
- continue
- else:
- mapping = pd.Index(mapping)
- data[attr] = mapping[data[attr]]
- return data
-
- def add_determined_attrs(self, data: pd.DataFrame):
- """
- Some dataset are determined by other attributes
- """
- determined_info = self.config['determined_attributes']
- for determined_attr in determined_info.keys():
- control_attr = determined_info[determined_attr]['by']
- mapping = determined_info[determined_attr]['mapping']
- default = determined_info[determined_attr]['default']
- # type = data[control_attr].dtype
- mapping = {int(k): int(v) for k, v in mapping.items()}
- data[determined_attr] = data.apply(lambda row: mapping.get(row[control_attr], default), axis=1)
- return data
-
- def ensure_types(self, data: pd.DataFrame):
- for col, data_type in COLS.items():
- data[col] = data[col].astype(data_type)
- return data
diff --git a/examples/DPSyn/dataloader/parameters.json b/examples/DPSyn/dataloader/parameters.json
deleted file mode 100644
index 55fa6b8..0000000
--- a/examples/DPSyn/dataloader/parameters.json
+++ /dev/null
@@ -1,490 +0,0 @@
-{
- "runs": [
- {
- "epsilon": 0.1,
- "delta": 3.4498908254380166e-11,
- "max_records": 1350000,
- "max_records_per_individual": 7
- },
- {
- "epsilon": 1.0,
- "delta": 3.4498908254380166e-11,
- "max_records": 1350000,
- "max_records_per_individual": 7
- },
- {
- "epsilon": 10.0,
- "delta": 3.4498908254380166e-11,
- "max_records": 1350000,
- "max_records_per_individual": 7
- }
- ],
- "schema": {
- "PUMA": {
- "dtype": "str",
- "values": [
- "17-1001",
- "17-104",
- "17-105",
- "17-1104",
- "17-1105",
- "17-1204",
- "17-1205",
- "17-1300",
- "17-1500",
- "17-1602",
- "17-1701",
- "17-1900",
- "17-2000",
- "17-202",
- "17-2100",
- "17-2200",
- "17-2300",
- "17-2400",
- "17-2501",
- "17-2601",
- "17-2700",
- "17-2801",
- "17-2901",
- "17-300",
- "17-3005",
- "17-3007",
- "17-3008",
- "17-3009",
- "17-3102",
- "17-3105",
- "17-3106",
- "17-3107",
- "17-3108",
- "17-3202",
- "17-3203",
- "17-3204",
- "17-3205",
- "17-3207",
- "17-3208",
- "17-3209",
- "17-3306",
- "17-3307",
- "17-3308",
- "17-3309",
- "17-3310",
- "17-3401",
- "17-3407",
- "17-3408",
- "17-3409",
- "17-3410",
- "17-3411",
- "17-3412",
- "17-3413",
- "17-3414",
- "17-3415",
- "17-3416",
- "17-3417",
- "17-3418",
- "17-3419",
- "17-3420",
- "17-3421",
- "17-3422",
- "17-3501",
- "17-3502",
- "17-3503",
- "17-3504",
- "17-3520",
- "17-3521",
- "17-3522",
- "17-3523",
- "17-3524",
- "17-3525",
- "17-3526",
- "17-3527",
- "17-3528",
- "17-3529",
- "17-3530",
- "17-3531",
- "17-3532",
- "17-3601",
- "17-3602",
- "17-3700",
- "17-401",
- "17-501",
- "17-600",
- "17-700",
- "17-800",
- "17-900",
- "39-100",
- "39-1000",
- "39-1100",
- "39-1200",
- "39-1300",
- "39-1400",
- "39-1500",
- "39-1600",
- "39-1700",
- "39-1801",
- "39-1802",
- "39-1803",
- "39-1804",
- "39-1805",
- "39-1900",
- "39-200",
- "39-2000",
- "39-2100",
- "39-2200",
- "39-2300",
- "39-2400",
- "39-2500",
- "39-2600",
- "39-2700",
- "39-2800",
- "39-2900",
- "39-300",
- "39-3000",
- "39-3100",
- "39-3200",
- "39-3300",
- "39-3400",
- "39-3500",
- "39-3600",
- "39-3700",
- "39-3800",
- "39-3900",
- "39-400",
- "39-4000",
- "39-4101",
- "39-4102",
- "39-4103",
- "39-4104",
- "39-4105",
- "39-4106",
- "39-4107",
- "39-4108",
- "39-4109",
- "39-4110",
- "39-4111",
- "39-4200",
- "39-4300",
- "39-4400",
- "39-4500",
- "39-4601",
- "39-4602",
- "39-4603",
- "39-4604",
- "39-4700",
- "39-4800",
- "39-4900",
- "39-500",
- "39-5000",
- "39-5100",
- "39-5200",
- "39-5301",
- "39-5302",
- "39-5401",
- "39-5402",
- "39-5403",
- "39-5501",
- "39-5502",
- "39-5503",
- "39-5504",
- "39-5505",
- "39-5506",
- "39-5507",
- "39-5600",
- "39-5700",
- "39-600",
- "39-700",
- "39-801",
- "39-802",
- "39-901",
- "39-902",
- "39-903",
- "39-904",
- "39-905",
- "39-906",
- "39-907",
- "39-908",
- "39-909",
- "39-910"
- ]
- },
- "YEAR": {
- "dtype": "uint32",
- "values": [
- 2012,
- 2013,
- 2014,
- 2015,
- 2016,
- 2017,
- 2018
- ]
- },
- "HHWT": {
- "dtype": "float"
- },
- "GQ": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6
- ],
- "dtype": "uint8"
- },
- "PERWT": {
- "dtype": "float"
- },
- "SEX": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "AGE": {
- "min": 0,
- "max": 135,
- "dtype": "uint8"
- },
- "MARST": {
- "values": [
- 1,
- 2,
- 3,
- 4,
- 5,
- 6
- ],
- "dtype": "uint8"
- },
- "RACE": {
- "values": [
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "dtype": "uint8"
- },
- "HISPAN": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 9
- ],
- "dtype": "uint8"
- },
- "CITIZEN": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6
- ],
- "dtype": "uint8"
- },
- "SPEAKENG": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8
- ],
- "dtype": "uint8"
- },
- "HCOVANY": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "HCOVPRIV": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "HINSEMP": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "HINSCAID": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "HINSCARE": {
- "values": [
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "EDUC": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11
- ],
- "dtype": "uint8"
- },
- "EMPSTAT": {
- "values": [
- 0,
- 1,
- 2,
- 3
- ],
- "dtype": "uint8"
- },
- "EMPSTATD": {
- "values": [
- 0,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 20,
- 21,
- 22,
- 30,
- 31,
- 32,
- 33,
- 34
- ],
- "dtype": "uint8"
- },
- "LABFORCE": {
- "values": [
- 0,
- 1,
- 2
- ],
- "dtype": "uint8"
- },
- "WRKLSTWK": {
- "values": [
- 0,
- 1,
- 2,
- 3
- ],
- "dtype": "uint8"
- },
- "ABSENT": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4
- ],
- "dtype": "uint8"
- },
- "LOOKING": {
- "values": [
- 0,
- 1,
- 2,
- 3
- ],
- "dtype": "uint8"
- },
- "AVAILBLE": {
- "values": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5
- ],
- "dtype": "uint8"
- },
- "WRKRECAL": {
- "values": [
- 0,
- 1,
- 2,
- 3
- ],
- "dtype": "uint8"
- },
- "WORKEDYR": {
- "values": [
- 0,
- 1,
- 2,
- 3
- ],
- "dtype": "uint8"
- },
- "INCTOT": {
- "dtype": "int32"
- },
- "INCWAGE": {
- "dtype": "int32"
- },
- "INCWELFR": {
- "dtype": "int32"
- },
- "INCINVST": {
- "dtype": "int32"
- },
- "INCEARN": {
- "dtype": "int32"
- },
- "POVERTY": {
- "min": 0,
- "max": 501,
- "dtype": "uint32"
- },
- "DEPARTS": {
- "min": 0,
- "max": 2359,
- "dtype": "uint32"
- },
- "ARRIVES": {
- "min": 0,
- "max": 2359,
- "dtype": "uint32"
- }
- }
-}
\ No newline at end of file
diff --git a/examples/DPSyn/dataloader/pkl/.gitkeep b/examples/DPSyn/dataloader/pkl/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/examples/DPSyn/dataloader/read_csv_kwargs.json b/examples/DPSyn/dataloader/read_csv_kwargs.json
deleted file mode 100644
index c0d0c67..0000000
--- a/examples/DPSyn/dataloader/read_csv_kwargs.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "dtype": {
- "PUMA": "str",
- "YEAR": "uint32",
- "HHWT": "float",
- "GQ": "uint8",
- "PERWT": "float",
- "SEX": "uint8",
- "AGE": "uint8",
- "MARST": "uint8",
- "RACE": "uint8",
- "HISPAN": "uint8",
- "CITIZEN": "uint8",
- "SPEAKENG": "uint8",
- "HCOVANY": "uint8",
- "HCOVPRIV": "uint8",
- "HINSEMP": "uint8",
- "HINSCAID": "uint8",
- "HINSCARE": "uint8",
- "EDUC": "uint8",
- "EMPSTAT": "uint8",
- "EMPSTATD": "uint8",
- "LABFORCE": "uint8",
- "WRKLSTWK": "uint8",
- "ABSENT": "uint8",
- "LOOKING": "uint8",
- "AVAILBLE": "uint8",
- "WRKRECAL": "uint8",
- "WORKEDYR": "uint8",
- "INCTOT": "int32",
- "INCWAGE": "int32",
- "INCWELFR": "int32",
- "INCINVST": "int32",
- "INCEARN": "int32",
- "POVERTY": "uint32",
- "DEPARTS": "uint32",
- "ARRIVES": "uint32"
- },
- "skipinitialspace": true
-}
diff --git a/examples/DPSyn/dataloader/submission_format.csv b/examples/DPSyn/dataloader/submission_format.csv
deleted file mode 100644
index 7682eeb..0000000
--- a/examples/DPSyn/dataloader/submission_format.csv
+++ /dev/null
@@ -1,16 +0,0 @@
-epsilon,PUMA,YEAR,HHWT,GQ,PERWT,SEX,AGE,MARST,RACE,HISPAN,CITIZEN,SPEAKENG,HCOVANY,HCOVPRIV,HINSEMP,HINSCAID,HINSCARE,EDUC,EMPSTAT,EMPSTATD,LABFORCE,WRKLSTWK,ABSENT,LOOKING,AVAILBLE,WRKRECAL,WORKEDYR,INCTOT,INCWAGE,INCWELFR,INCINVST,INCEARN,POVERTY,DEPARTS,ARRIVES,sim_individual_id
-0.1,39-1900,2015,301.0,2,151.3,1,102,2,3,2,2,7,1,2,2,2,1,5,0,10,1,1,1,3,3,0,0,10882,22317,0,0,16966,48,474,1082,0
-0.1,39-801,2015,364.0,6,60.9,1,50,4,7,3,0,2,1,1,1,1,1,6,1,12,0,3,1,1,0,1,0,7875,8273,0,0,34490,427,775,34,1
-0.1,17-3602,2015,20.1,3,37.4,2,53,2,4,9,4,1,2,2,2,2,2,3,1,34,2,3,3,0,5,3,0,14763,9496,0,0,52936,409,2264,763,2
-0.1,39-3800,2016,15.2,6,18.1,1,70,1,8,0,3,7,2,1,1,1,1,7,2,11,0,2,4,1,1,0,3,59655,29289,0,0,12054,47,502,1751,3
-0.1,17-3205,2014,89.5,5,218.2,1,100,6,3,0,4,6,1,2,1,1,1,9,1,31,0,2,0,3,4,3,3,71437,8602,0,0,15848,170,540,1059,4
-1.0,17-2000,2018,34.2,5,212.4,2,44,6,9,4,5,3,2,2,1,2,2,6,3,21,2,1,0,0,0,2,1,15,13042,0,0,10905,197,1479,1434,0
-1.0,39-4110,2017,25.1,2,31.4,2,58,6,8,0,3,0,2,1,2,2,2,6,1,11,0,0,0,3,0,2,0,112669,15881,0,0,1008,223,1661,1153,1
-1.0,17-3413,2015,59.4,5,27.7,2,122,1,6,4,3,1,2,2,1,1,2,0,0,31,2,1,4,2,3,3,2,7463,37255,0,0,49743,147,1734,1843,2
-1.0,39-5503,2018,276.0,0,112.6,1,41,3,7,3,1,8,2,2,1,2,1,11,0,13,2,2,0,0,2,2,3,56253,58205,0,0,15551,160,627,586,3
-1.0,39-2800,2015,228.8,3,86.9,2,98,1,2,9,1,1,2,1,2,1,1,3,0,12,0,1,4,3,3,3,3,40897,38289,0,0,11047,175,459,954,4
-10.0,39-300,2017,30.8,5,89.1,2,108,3,6,2,2,1,1,2,1,2,1,0,0,31,0,3,2,3,2,3,0,1337,156367,0,0,19043,45,2146,1768,0
-10.0,17-3205,2016,55.9,4,84.9,2,115,5,5,0,2,1,1,2,1,2,2,2,3,33,1,3,1,2,2,1,1,11682,56648,0,0,4407,245,1500,1705,1
-10.0,17-3007,2014,29.6,4,8.5,1,56,4,4,0,5,2,1,1,2,2,2,6,2,14,2,0,1,2,5,0,1,26808,929,0,0,1141,325,1077,2311,2
-10.0,17-3413,2015,24.3,4,61.1,2,108,4,3,3,4,1,2,2,2,1,1,7,2,11,1,2,1,0,1,0,1,54233,35719,0,0,15775,57,633,512,3
-10.0,17-3202,2017,9.9,0,107.9,1,128,5,7,4,5,6,1,2,2,2,1,4,1,21,0,1,3,0,0,1,1,116635,5783,0,0,519,473,550,1635,4
diff --git a/examples/DPSyn/lib_dpsyn/consistent.py b/examples/DPSyn/lib_dpsyn/consistent.py
deleted file mode 100644
index 24081e1..0000000
--- a/examples/DPSyn/lib_dpsyn/consistent.py
+++ /dev/null
@@ -1,150 +0,0 @@
-import copy
-from loguru import logger
-
-import numpy as np
-from lib_dpsyn.view import View
-
-
-class Consistenter:
- class SubsetWithDependency:
- def __init__(self, attributes_set):
- self.attributes_set = attributes_set
- # a set of tuples this object depends on
- self.dependency = set()
-
- def __init__(self, views, num_categories):
- self.views = views
- self.num_categories = num_categories
- self.iterations = 30
-
- def compute_dependency(self):
- subsets_with_dependency = {}
- ret_subsets = {}
-
- for key, view in self.views.items():
- new_subset = self.SubsetWithDependency(view.attributes_set)
- subsets_temp = copy.deepcopy(subsets_with_dependency)
-
- for subset_key, subset_value in subsets_temp.items():
- attributes_intersection = subset_value.attributes_set & view.attributes_set
-
- if attributes_intersection:
- if tuple(attributes_intersection) not in subsets_with_dependency:
- intersection_subset = self.SubsetWithDependency(attributes_intersection)
- subsets_with_dependency[tuple(attributes_intersection)] = intersection_subset
-
- if not tuple(attributes_intersection) == subset_key:
- subsets_with_dependency[subset_key].dependency.add(tuple(attributes_intersection))
- new_subset.dependency.add(tuple(attributes_intersection))
-
- subsets_with_dependency[tuple(view.attributes_set)] = new_subset
-
- for subset_key, subset_value in subsets_with_dependency.items():
- if len(subset_key) == 1:
- subset_value.dependency = set()
-
- ret_subsets[subset_key] = subset_value
-
- return subsets_with_dependency
-
- def consist_views(self):
- def find_subset_without_dependency():
- for key, subset in subsets_with_dependency_temp.items():
- if not subset.dependency:
- return key, subset
-
- return None, None
-
- def find_views_containing_target(target):
- result = []
-
- for key, view in self.views.items():
- if target <= view.attributes_set:
- result.append(view)
-
- return result
-
- # current strategy: if two views do not agree on the levels: v1: 4*2, v2: 2*4, then consist on 2*2
- def consist_on_subset(target):
- target_views = find_views_containing_target(target)
-
- common_view_indicator = np.zeros(self.num_categories.shape[0])
- for index in target:
- common_view_indicator[index] = 1
-
- common_view = View(common_view_indicator, self.num_categories)
- common_view.initialize_consist_parameters(len(target_views))
-
- for index, view in enumerate(target_views):
- common_view.project_from_bigger_view(view, index)
-
- common_view.calculate_delta()
- # if np.sum(np.absolute(common_view.delta)) > 1000:
- # print(common_view.attr_one_hot)
- # print(np.sum(np.absolute(common_view.delta)))
- if np.sum(np.absolute(common_view.delta)) > 1e-3:
- for index, view in enumerate(target_views):
- view.update_view(common_view, index)
-
- def remove_subset_from_dependency(target):
- for _, subset in subsets_with_dependency_temp.items():
- if tuple(target.attributes_set) in subset.dependency:
- subset.dependency.remove(tuple(target.attributes_set))
-
- # calculate necessary variables
- for key, view in self.views.items():
- view.calculate_tuple_key()
- view.generate_attributes_index_set()
- view.sum = np.sum(view.count)
-
- # calculate the dependency relationship
- subsets_with_dependency = self.compute_dependency()
- logger.debug("dependency computed")
-
- # ripple steps needs several iterations
- # for i in range(self.iterations):
- non_negativity = True
- iterations = 0
-
- while non_negativity and iterations < self.iterations:
- # first make sure summation are the same
- consist_on_subset(set())
-
- for key, view in self.views.items():
- view.sum = np.sum(view.count)
-
- subsets_with_dependency_temp = copy.deepcopy(subsets_with_dependency)
-
- while len(subsets_with_dependency_temp) > 0:
- key, subset = find_subset_without_dependency()
-
- if not subset:
- break
-
- consist_on_subset(subset.attributes_set)
- remove_subset_from_dependency(subset)
- subsets_with_dependency_temp.pop(key, None)
-
- logger.debug("consist finish")
-
- nonneg_view_count = 0
-
- for key, view in self.views.items():
- if (view.count < 0.0).any():
- view.non_negativity()
- view.sum = np.sum(view.count)
- else:
- nonneg_view_count += 1
-
- if nonneg_view_count == len(self.views):
- logger.info("finish in %s round" % (iterations,))
- non_negativity = False
-
- iterations += 1
-
- logger.debug("non-negativity finish")
-
- # calculate normalized count
- for key, view in self.views.items():
- view.sum = np.sum(view.count)
- view.normalize_count = view.count if view.sum <= 0 else view.count / view.sum
diff --git a/examples/DPSyn/lib_dpsyn/record_synthesizer.py b/examples/DPSyn/lib_dpsyn/record_synthesizer.py
deleted file mode 100644
index 0364cc4..0000000
--- a/examples/DPSyn/lib_dpsyn/record_synthesizer.py
+++ /dev/null
@@ -1,242 +0,0 @@
-from loguru import logger
-from numpy import linalg as LA
-import copy
-
-import numpy as np
-import pandas as pd
-
-
-class RecordSynthesizer:
- records = None
- df = None
- error_tracker = None
-
- rounding_method = 'deterministic'
-
- under_cell_indices = None
- zero_cell_indices = None
- over_cell_indices = None
- records_throw_indices = None
-
- add_amount = 0
- add_amount_zero = 0
- reduce_amount = 0
-
- actual_marginal = None
- synthesize_marginal = None
- alpha = 1.0
-
- encode_records = None
- encode_records_sort_index = None
-
- def __init__(self, attrs, domains, num_records):
- self.attrs = attrs
- self.domains = domains
- self.num_records = num_records
-
- def update_alpha(self, iteration):
- self.alpha = 1.0 * 0.84 ** (iteration // 20)
-
- def update_order(self, iteration, views, iterate_keys):
-
- self.error_tracker.insert(loc=0, column=f"{iteration}-before", value=0)
-
- for key_i, key in enumerate(iterate_keys):
- self.track_error(views[key], key_i)
-
- sort_error_tracker = self.error_tracker.sort_values(by=f"{iteration}-before", ascending=False)
-
- self.error_tracker.insert(loc=0, column=f"{iteration}-after", value=0)
- return list(sort_error_tracker.index)
-
- def update_records(self, original_view, iteration):
- view = copy.deepcopy(original_view)
-
- if iteration % 2 == 0:
- self.complete_partial_ratio(view, 0.5)
- else:
- self.complete_partial_ratio(view, 1.0)
-
- def initialize_records(self, iterate_keys, method="random", singleton_views=None):
- self.records = np.empty([self.num_records, len(self.attrs)], dtype=np.uint32)
-
- for attr_i, attr in enumerate(self.attrs):
- if method == "random":
- self.records[:, attr_i] = np.random.randint(0, self.domains[attr_i], size=self.num_records)
-
- elif method == "singleton":
- self.records[:, attr_i] = self.generate_singleton_records(singleton_views[attr])
-
- self.df = pd.DataFrame(self.records, columns=self.attrs)
- self.error_tracker = pd.DataFrame(index=iterate_keys)
-
- def generate_singleton_records(self, singleton):
- record = np.empty(self.num_records, dtype=np.uint32)
- dist_cumsum = np.cumsum(singleton.count)
- start = 0
-
- for index, value in enumerate(dist_cumsum):
- end = int(round(value * self.num_records))
- record[start: end] = index
- start = end
-
- np.random.shuffle(record)
-
- return record
-
- def update_records_prepare(self, view):
- alpha = self.alpha
-
- # deal with under cells (synthesize_marginal < actual_marginal) where synthesize_marginal != 0
- self.under_cell_indices = np.where((self.synthesize_marginal < self.actual_marginal) & (self.synthesize_marginal != 0))[0]
-
- under_rate = (self.actual_marginal[self.under_cell_indices] - self.synthesize_marginal[self.under_cell_indices]) / self.synthesize_marginal[self.under_cell_indices]
- ratio_add = np.minimum(under_rate, np.full(self.under_cell_indices.shape[0], alpha))
- self.add_amount = self._rounding(ratio_add * self.synthesize_marginal[self.under_cell_indices] * self.num_records)
-
- # deal with the case synthesize_marginal == 0 and actual_marginal != 0
- self.zero_cell_indices = np.where((self.synthesize_marginal == 0) & (self.actual_marginal != 0))[0]
- self.add_amount_zero = self._rounding(alpha * self.actual_marginal[self.zero_cell_indices] * self.num_records)
-
- # determine the number of records to be removed
- self.over_cell_indices = np.where(self.synthesize_marginal > self.actual_marginal)[0]
- num_add_total = np.sum(self.add_amount) + np.sum(self.add_amount_zero)
-
- beta = self.find_optimal_beta(num_add_total, self.over_cell_indices)
- over_rate = (self.synthesize_marginal[self.over_cell_indices] - self.actual_marginal[self.over_cell_indices]) / self.synthesize_marginal[self.over_cell_indices]
- ratio_reduce = np.minimum(over_rate, np.full(self.over_cell_indices.shape[0], beta))
- self.reduce_amount = self._rounding(ratio_reduce * self.synthesize_marginal[self.over_cell_indices] * self.num_records).astype(int)
-
- # logger.debug("alpha: %s | beta: %s" % (alpha, beta))
- # logger.debug("num_boost: %s | num_reduce: %s" % (num_add_total, np.sum(self.reduce_amount)))
-
- # convert each record from multiple attributes to one attribute
- self.encode_records = np.matmul(self.records[:, view.attributes_index], view.encode_num)
- self.encode_records_sort_index = np.argsort(self.encode_records)
- self.encode_records = self.encode_records[self.encode_records_sort_index]
-
- def determine_throw_indices(self):
- valid_indices = np.nonzero(self.reduce_amount)[0]
- valid_cell_over_indices = self.over_cell_indices[valid_indices]
- valid_cell_num_reduce = self.reduce_amount[valid_indices]
- valid_data_over_index_left = np.searchsorted(self.encode_records, valid_cell_over_indices, side="left")
- valid_data_over_index_right = np.searchsorted(self.encode_records, valid_cell_over_indices, side="right")
-
- valid_num_reduce = np.sum(valid_cell_num_reduce)
- self.records_throw_indices = np.zeros(valid_num_reduce, dtype=np.uint32)
- throw_pointer = 0
-
- for i, cell_index in enumerate(valid_cell_over_indices):
- match_records_indices = self.encode_records_sort_index[valid_data_over_index_left[i]: valid_data_over_index_right[i]]
- throw_indices = np.random.choice(match_records_indices, valid_cell_num_reduce[i], replace=False)
-
- self.records_throw_indices[throw_pointer: throw_pointer + throw_indices.size] = throw_indices
- throw_pointer += throw_indices.size
-
- np.random.shuffle(self.records_throw_indices)
-
- def handle_zero_cells(self, view):
- # overwrite / partial when synthesize_marginal == 0
- if self.zero_cell_indices.size != 0:
- for index, cell_index in enumerate(self.zero_cell_indices):
- num_partial = int(self.add_amount_zero[index])
-
- if num_partial != 0:
- for i in range(view.view_num_attr):
- self.records[self.records_throw_indices[: num_partial], view.attributes_index[i]] = \
- view.tuple_key[cell_index, i]
-
- self.records_throw_indices = self.records_throw_indices[num_partial:]
-
- def complete_partial_ratio(self, view, complete_ratio):
- num_complete = np.rint(complete_ratio * self.add_amount).astype(int)
- num_partial = np.rint((1 - complete_ratio) * self.add_amount).astype(int)
-
- valid_indices = np.nonzero(num_complete + num_partial)
- num_complete = num_complete[valid_indices]
- num_partial = num_partial[valid_indices]
-
- valid_cell_under_indices = self.under_cell_indices[valid_indices]
- valid_data_under_index_left = np.searchsorted(self.encode_records, valid_cell_under_indices, side="left")
- valid_data_under_index_right = np.searchsorted(self.encode_records, valid_cell_under_indices, side="right")
-
- for valid_index, cell_index in enumerate(valid_cell_under_indices):
- match_records_indices = self.encode_records_sort_index[valid_data_under_index_left[valid_index]: valid_data_under_index_right[valid_index]]
-
- np.random.shuffle(match_records_indices)
-
- if self.records_throw_indices.shape[0] >= (num_complete[valid_index] + num_partial[valid_index]):
- # complete update code
- if num_complete[valid_index] != 0:
- self.records[self.records_throw_indices[: num_complete[valid_index]]] = self.records[
- match_records_indices[: num_complete[valid_index]]]
-
- # partial update code
- if num_partial[valid_index] != 0:
- self.records[np.ix_(
- self.records_throw_indices[num_complete[valid_index]: (num_complete[valid_index] + num_partial[valid_index])],
- view.attributes_index)] = view.tuple_key[cell_index]
-
- # update records_throw_indices
- self.records_throw_indices = self.records_throw_indices[num_complete[valid_index] + num_partial[valid_index]:]
-
- else:
- # todo: simply apply complete operation here, do not know whether it is make sense
- self.records[self.records_throw_indices] = self.records[match_records_indices[: self.records_throw_indices.size]]
-
- def find_optimal_beta(self, num_add_total, cell_over_indices):
- actual_marginal_under = self.actual_marginal[cell_over_indices]
- synthesize_marginal_under = self.synthesize_marginal[cell_over_indices]
-
- lower_bound = 0.0
- upper_bound = 1.0
- beta = 0.0
- current_num = 0.0
- iteration = 0
-
- while abs(num_add_total - current_num) >= 1.0:
- beta = (upper_bound + lower_bound) / 2.0
- current_num = np.sum(
- np.minimum((synthesize_marginal_under - actual_marginal_under) / synthesize_marginal_under,
- np.full(cell_over_indices.shape[0], beta)) * synthesize_marginal_under * self.records.shape[0])
-
- if current_num < num_add_total:
- lower_bound = beta
- elif current_num > num_add_total:
- upper_bound = beta
- else:
- return beta
-
- iteration += 1
- if iteration > 50:
- # logger.warning("cannot find the optimal beta")
- break
-
- return beta
-
- def track_error(self, view, key_i):
- self.actual_marginal = view.count
- count = view.count_records_general(self.records)
- self.synthesize_marginal = count / np.sum(count)
-
- l1_error = LA.norm(self.actual_marginal - self.synthesize_marginal, 1)
- self.error_tracker.iloc[key_i, 0] = l1_error
-
- # logger.info("the l1 error before updating is %s" % (l1_error,))
-
- def _rounding(self, vector):
- if self.rounding_method == 'stochastic':
- ret_vector = np.zeros(vector.size)
- rand = np.random.rand(vector.size)
-
- integer = np.floor(vector)
- decimal = vector - integer
-
- ret_vector[rand > decimal] = np.floor(decimal[rand > decimal])
- ret_vector[rand < decimal] = np.ceil(decimal[rand < decimal])
- ret_vector += integer
- return ret_vector
- elif self.rounding_method == 'deterministic':
- return np.round(vector)
- else:
- raise NotImplementedError(self.rounding_method)
diff --git a/examples/DPSyn/lib_dpsyn/view.py b/examples/DPSyn/lib_dpsyn/view.py
deleted file mode 100644
index 14746e1..0000000
--- a/examples/DPSyn/lib_dpsyn/view.py
+++ /dev/null
@@ -1,221 +0,0 @@
-import numpy as np
-
-
-class View:
- def __init__(self, attr_one_hot: np.array, domain_size_list: np.array):
- self.attr_one_hot = attr_one_hot
- self.domain_size_list = domain_size_list
-
- self.domain_size = np.product(self.domain_size_list[np.nonzero(self.attr_one_hot)[0]])
- self.total_num_attr = len(self.attr_one_hot)
- self.view_num_attr = np.count_nonzero(self.attr_one_hot)
-
- self.encode_num = np.zeros(self.view_num_attr, dtype=np.uint32)
- self.cum_mul = np.zeros(self.view_num_attr, dtype=np.uint32)
- self.attributes_index = np.nonzero(self.attr_one_hot)[0]
-
- self.count = np.zeros(self.domain_size)
- self.sum = 0
- self.calculate_encode_num(self.domain_size_list)
-
- self.attributes_set = set()
- self.tuple_key = np.array([0], dtype=np.uint32)
-
- self.count_matrix = None
- self.summations = None
- self.weights = []
- self.delta = 0
- self.weight_coeff = 1
-
- ########################################### general functions ####################################
- def calculate_encode_num(self, domain_size_list):
- if self.view_num_attr != 0:
- categories_index = self.attributes_index
-
- categories_num = domain_size_list[categories_index]
- categories_num = np.roll(categories_num, 1)
- categories_num[0] = 1
- self.cum_mul = np.cumprod(categories_num)
-
- categories_num = domain_size_list[categories_index]
- categories_num = np.roll(categories_num, self.view_num_attr - 1)
- categories_num[-1] = 1
- categories_num = np.flip(categories_num)
- self.encode_num = np.flip(np.cumprod(categories_num))
-
- def calculate_tuple_key(self):
- self.tuple_key = np.zeros([self.domain_size, self.view_num_attr], dtype=np.uint32)
-
- if self.view_num_attr != 0:
- for i in range(self.attributes_index.shape[0]):
- index = self.attributes_index[i]
- categories = np.arange(self.domain_size_list[index])
- column_key = np.tile(np.repeat(categories, self.encode_num[i]), self.cum_mul[i])
-
- self.tuple_key[:, i] = column_key
- else:
- self.tuple_key = np.array([0], dtype=np.uint32)
- self.domain_size = 1
-
- def count_records(self, records):
- encode_records = np.matmul(records[:, self.attributes_index], self.encode_num)
- encode_key, count = np.unique(encode_records, return_counts=True)
-
- indices = np.where(np.isin(np.arange(self.domain_size), encode_key))[0]
- self.count[indices] = count
-
- def calculate_count_matrix(self):
- shape = []
-
- for attri in self.attributes_index:
- shape.append(self.domain_size_list[attri])
-
- self.count_matrix = np.copy(self.count).reshape(tuple(shape))
-
- return self.count_matrix
-
- def generate_attributes_index_set(self):
- self.attributes_set = set(self.attributes_index)
-
- ################################### functions for outside invoke #########################
- def calculate_encode_num_general(self, attributes_index):
- categories_index = attributes_index
-
- categories_num = self.domain_size_list[categories_index]
- categories_num = np.roll(categories_num, attributes_index.size - 1)
- categories_num[-1] = 1
- categories_num = np.flip(categories_num)
- encode_num = np.flip(np.cumprod(categories_num))
-
- return encode_num
-
- def count_records_general(self, records):
- count = np.zeros(self.domain_size)
-
- encode_records = np.matmul(records[:, self.attributes_index], self.encode_num)
- encode_key, value_count = np.unique(encode_records, return_counts=True)
-
- indices = np.where(np.isin(np.arange(self.domain_size), encode_key))[0]
- count[indices] = value_count
-
- return count
-
- def calculate_count_matrix_general(self, count):
- shape = []
-
- for attri in self.attributes_index:
- shape.append(self.domain_size_list[attri])
-
- return np.copy(count).reshape(tuple(shape))
-
- def calculate_tuple_key_general(self, unique_value_list):
- self.tuple_key = np.zeros([self.domain_size, self.view_num_attr], dtype=np.uint32)
-
- if self.view_num_attr != 0:
- for i in range(self.attributes_index.shape[0]):
- categories = unique_value_list[i]
- column_key = np.tile(np.repeat(categories, self.encode_num[i]), self.cum_mul[i])
-
- self.tuple_key[:, i] = column_key
- else:
- self.tuple_key = np.array([0], dtype=np.uint32)
- self.domain_size = 1
-
- def project_from_bigger_view_general(self, bigger_view):
- encode_num = np.zeros(self.total_num_attr, dtype=np.uint32)
- encode_num[self.attributes_index] = self.encode_num
- encode_num = encode_num[bigger_view.attributes_index]
-
- encode_records = np.matmul(bigger_view.tuple_key, encode_num)
-
- for i in range(self.domain_size):
- key_index = np.where(encode_records == i)[0]
- self.count[i] = np.sum(bigger_view.count[key_index])
-
- ######################################## functions for consistency #######################
- ############ used in commom view #############
- def initialize_consist_parameters(self, num_target_views):
- self.summations = np.zeros([self.domain_size, num_target_views])
- self.weights = np.zeros(num_target_views)
-
- def calculate_delta(self):
- target = np.matmul(self.summations, self.weights) / np.sum(self.weights)
- self.delta = - (self.summations - target.reshape(len(target), 1))
-
- def project_from_bigger_view(self, bigger_view, index):
- encode_num = np.zeros(self.total_num_attr, dtype=np.uint32)
- encode_num[self.attributes_index] = self.encode_num
- encode_num = encode_num[bigger_view.attributes_index]
-
- encode_records = np.matmul(bigger_view.tuple_key, encode_num)
-
- self.weights[index] = bigger_view.weight_coeff / np.product(self.domain_size_list[np.setdiff1d(bigger_view.attributes_index, self.attributes_index)])
-
- for i in range(self.domain_size):
- key_index = np.where(encode_records == i)[0]
- self.summations[i, index] = np.sum(bigger_view.count[key_index])
-
- ############### used in views to be consisted ###############
- def update_view(self, common_view, index):
- encode_num = np.zeros(self.total_num_attr, dtype=np.uint32)
- encode_num[common_view.attributes_index] = common_view.encode_num
- encode_num = encode_num[self.attributes_index]
-
- encode_records = np.matmul(self.tuple_key, encode_num)
-
- for i in range(common_view.domain_size):
- key_index = np.where(encode_records == i)[0]
- self.count[key_index] += common_view.delta[i, index] / len(key_index)
-
- def non_negativity(self):
- count = np.copy(self.count)
- self.norm_cut(count)
- # self.norm_sub(count)
- self.count = count
-
- @staticmethod
- def norm_sub(count):
- while (np.fabs(sum(count) - 1) > 1e-6) or (count < 0).any():
- count[count < 0] = 0
- total = sum(count)
- mask = count > 0
- if sum(mask) == 0:
- count[:] = 1.0 / len(count)
- break
- diff = (1 - total) / sum(mask)
- count[mask] += diff
- return count
-
- @staticmethod
- def norm_cut(count):
- # set all negative value to 0.0
- negative_indices = np.where(count < 0.0)[0]
- negative_total = abs(np.sum(count[negative_indices]))
- count[negative_indices] = 0.0
-
- # find all positive value
- positive_indices = np.where(count > 0.0)[0]
-
- if positive_indices.size != 0:
- positive_sort_indices = np.argsort(count[positive_indices])
- sort_cumsum = np.cumsum(count[positive_indices[positive_sort_indices]])
-
- # set the smallest positive value to 0.0 to preserve the total density
- threshold_indices = np.where(sort_cumsum <= negative_total)[0]
-
- if threshold_indices.size == 0:
- count[positive_indices[positive_sort_indices[0]]] = sort_cumsum[0] - negative_total
- else:
- count[positive_indices[positive_sort_indices[threshold_indices]]] = 0.0
- next_index = threshold_indices[-1] + 1
-
- if next_index < positive_sort_indices.size:
- count[positive_indices[positive_sort_indices[next_index]]] = sort_cumsum[next_index] - negative_total
- else:
- count[:] = 0.0
-
- return count
-
-
-if __name__ == "__main__":
- view = View([1, 1, 0, 0], [3, 3, 0, 0])
diff --git a/examples/DPSyn/main.py b/examples/DPSyn/main.py
deleted file mode 100644
index 4d8857a..0000000
--- a/examples/DPSyn/main.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import argparse
-import numpy as np
-import yaml
-from loguru import logger
-
-from dataloader.DataLoader import *
-from dataloader.RecordPostprocessor import RecordPostprocessor
-from method.sample_parallel import Sample
-from config.path import *
-
-import sdnist
-
-
-# Warning
-# This version is modified so as to pretrain on the private data
-# and train on the public data (unlike the original challenge)
-# The goal is to use the visualization tools of the public dataset.
-
-
-def main():
- with open(CONFIG_DATA, 'r') as f:
- config = yaml.load(f, Loader=yaml.BaseLoader)
-
- # dataloader initialization
- dataloader = DataLoader()
- dataloader.load_data()
-
- # sample
- eps, delta, sensitivity = 1, 2.5e-4, 7
- logger.info(f'working on eps={eps}, delta={delta}, and sensitivity={sensitivity}')
- synthesizer = Sample(dataloader, eps, delta, sensitivity)
- synthetic_data = synthesizer.synthesize()
-
- # preprocess
- postprocessor = RecordPostprocessor()
- synthetic_data = postprocessor.post_process(synthetic_data, args.config, dataloader.decode_mapping)
- logger.info("post-processed synthetic data")
- synthetic_data.to_csv("DP_synth.csv") #output saved to working directory
-
- public_data, schema = sdnist.census(root="~/datasets", public=True)
- score = sdnist.score(public_data, synthetic_data, schema)
- print(score)
- score.html(browser=True)
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser()
-
- parser.add_argument("--config", type=str, default="./config/data.yaml",
- help="specify the path of config file in yaml")
-
- args = parser.parse_args()
- main()
-
diff --git a/examples/DPSyn/method/dpsyn.py b/examples/DPSyn/method/dpsyn.py
deleted file mode 100644
index 96f9580..0000000
--- a/examples/DPSyn/method/dpsyn.py
+++ /dev/null
@@ -1,422 +0,0 @@
-import copy
-import multiprocessing as mp
-from typing import List, Tuple, Dict, KeysView
-
-import numpy as np
-import pandas as pd
-from loguru import logger
-from numpy import linalg as LA
-
-from lib_dpsyn.consistent import Consistenter
-from lib_dpsyn.record_synthesizer import RecordSynthesizer
-from lib_dpsyn.view import View
-from method.synthesizer import Synthesizer
-
-
-class DPSyn(Synthesizer):
- synthesized_df = None
- update_iterations = 60
-
- attrs_view_dict = {}
- onehot_view_dict = {}
-
- attr_list = []
- domain_list = []
- attr_index_map = {}
-
- Attrs = List[str]
- Domains = np.ndarray
- Marginals = Dict[Tuple[str], np.array]
- Clusters = Dict[Tuple[str], List[Tuple[str]]]
-
- d = None
-
- def obtain_consistent_marginals(self, priv_marginal_config, priv_split_method):
- # marginals are specified by a dict from attribute tuples to frequency (pandas) tables
- pub_marginals = self.data.generate_all_pub_marginals()
- noisy_marginals = self.get_noisy_marginals(priv_marginal_config, priv_split_method)
-
- num_synthesize_records = np.mean([np.sum(x.values) for _, x in noisy_marginals.items()]).round().astype(np.int)
- noisy_puma_year = noisy_marginals[frozenset(['PUMA', 'YEAR'])]
- del noisy_marginals[frozenset(['PUMA', 'YEAR'])]
-
- self.attr_list = self.data.obtain_attrs()
- self.domain_list = np.array([len(self.data.encode_schema[att]) for att in self.attr_list])
- self.attr_index_map = {att: att_i for att_i, att in enumerate(self.attr_list)}
-
- # views are wrappers of marginals with additional functions for consistency
- pub_onehot_view_dict, pub_attr_view_dict = self.construct_views(pub_marginals)
- noisy_onehot_view_dict, noisy_attr_view_dict = self.construct_views(noisy_marginals)
-
- # all_views is one-hot to view dict, views_dict is attribute to view dict
- # they have different format to satisfy the needs of consistenter and synthesiser
- self.onehot_view_dict, self.attrs_view_dict = self.normalize_views(
- pub_onehot_view_dict,
- pub_attr_view_dict,
- noisy_attr_view_dict,
- self.attr_index_map,
- num_synthesize_records)
-
- consistenter = Consistenter(self.onehot_view_dict, self.domain_list)
- consistenter.consist_views()
-
- # consistenter uses unnormalized counts; after consistency, synthesizer uses normalized counts
- for _, view in self.onehot_view_dict.items():
- view.count /= sum(view.count)
-
- return noisy_puma_year, noisy_marginals
-
-
- def synthesize(self, fixed_n=0) -> pd.DataFrame:
- noisy_puma_year = self.obtain_consistent_marginals()
-
- # find clusters for synthesize; a cluster is a set of marginals closely connected
- # here we do not cluster and use all marginals as a single cluster
- clusters = self.cluster(self.attrs_view_dict)
-
- # target_marginals = self.data.generate_all_two_way_marginals_except_PUMA_YEAR(self.data.private_data)
- # pub_marginals = self.data.generate_all_pub_marginals()
- # self.calculate_l1_errors_v2(pub_marginals, self.attrs_view_dict, target_marginals, self.data.private_data)
-
- self.synthesize_records_PUMA_YEAR(noisy_puma_year, clusters, fixed_n)
- # self.synthesize_records_numbers(noisy_puma_year, clusters, fixed_n)
-
- return self.synthesized_df
-
- # synthesize for each possible number
- # then for each puma-year, we just duplicate the appropriate synthesized data
- def synthesize_records_numbers(self, puma_year: pd.DataFrame, clusters: Clusters, fixed_n: int):
- interval = 100
- puma_year = puma_year.round(interval).astype(np.int)
- details = False
- cell_count_max = puma_year.max().max()
- cell_count_min = puma_year.min().min()
- cell_count_min = cell_count_max - 100
-
- singleton_views = self.obtain_singleton_views(self.attrs_view_dict)
-
- for cluster_attrs, list_marginal_attrs in clusters.items():
- attrs_index_map = {attrs: index for index, attrs in enumerate(list_marginal_attrs)}
-
- pool = mp.Pool(mp.cpu_count())
- # pool = mp.Pool(1)
- manager = mp.Manager()
- self.d = manager.list([])
-
- counts = range(cell_count_min, cell_count_max, interval)
- for count_i, cell_count in enumerate(counts):
- logger.info(f"working on puma-year: {count_i + 1}/{len(counts)}")
- pool.apply_async(self.syn_puma_year, args=(
- count_i, 0, cell_count, attrs_index_map, singleton_views, list_marginal_attrs, details),
- callback=self.log_result)
- pool.close()
- pool.join()
-
- syn_df_list = []
- for puma, puma_row in puma_year.iterrows():
- for year_i, cell_count in enumerate(puma_row):
- for df in self.d:
- if df.shape[0] == cell_count:
- tmp = copy.deepcopy(df)
- tmp['PUMA'] = puma
- tmp['YEAR'] = year_i
- syn_df_list.append(tmp)
- self.synthesized_df = pd.concat(syn_df_list, ignore_index=True)
-
- # synthesize for each combination of puma-year because the final scoring is on puma-year
- def synthesize_records_PUMA_YEAR(self, puma_year: pd.DataFrame, clusters: Clusters, fixed_n: int):
- if fixed_n:
- puma_year = pd.DataFrame([[fixed_n]])
- details = True
- else:
- puma_year = puma_year.round().astype(np.int)
- details = False
-
- for cluster_attrs, list_marginal_attrs in clusters.items():
- logger.info("synthesizing for %s" % (cluster_attrs,))
-
- attrs_index_map = {attrs: index for index, attrs in enumerate(list_marginal_attrs)}
-
- singleton_views = self.obtain_singleton_views(self.attrs_view_dict)
-
- if fixed_n:
- for puma, puma_row in puma_year.iterrows():
- for year_i, cell_count in enumerate(puma_row):
- self.synthesized_df = self.syn_puma_year(puma, year_i, cell_count, attrs_index_map,
- singleton_views, list_marginal_attrs, details)
- else:
- pool = mp.Pool(mp.cpu_count())
- # pool = mp.Pool(1)
- manager = mp.Manager()
- self.d = manager.list([])
- for puma, puma_row in puma_year.iterrows():
- for year_i, cell_count in enumerate(puma_row):
- logger.info(f"working on puma-year: {puma + 1}/{len(puma_year)}-{year_i + 1}/{len(puma_row)}")
- pool.apply_async(self.syn_puma_year, args=(
- puma, puma_year, year_i, puma_row, cell_count, attrs_index_map, singleton_views,
- list_marginal_attrs, details), callback=self.log_result)
- pool.close()
- pool.join()
- self.synthesized_df = pd.concat(self.d, ignore_index=True)
- logger.info(f'finished with a list of {len(self.d)} dataframes')
- logger.info(f'the final dataframe size is {self.synthesized_df.shape}')
-
- def syn_puma_year(self, puma, year, cell_count, attrs_index_map, singleton_views, list_marginal_attrs, details):
- cur_syn_df = None
- synthesizer = RecordSynthesizer(self.attr_list, self.domain_list, cell_count)
- synthesizer.initialize_records(list_marginal_attrs, singleton_views=singleton_views)
-
- for update_iteration in range(self.update_iterations + 1):
-
- synthesizer.alpha = 1.0 * 0.84 ** (update_iteration // 20)
- error_sorted_attrs_list = synthesizer.update_order(update_iteration, self.attrs_view_dict,
- list_marginal_attrs)
-
- for cur_attrs in error_sorted_attrs_list:
- attrs_i = attrs_index_map[cur_attrs]
- view = self.attrs_view_dict[cur_attrs]
-
- synthesizer.track_error(view, attrs_i)
- synthesizer.update_records_prepare(view)
- synthesizer.determine_throw_indices()
- synthesizer.handle_zero_cells(view)
- synthesizer.update_records(view, update_iteration)
- synthesizer.track_error(view, attrs_i)
-
- if update_iteration % 20 == 0 and details:
- tmp_df = synthesizer.df.copy()
- tmp_df['iteration'] = update_iteration
- if cur_syn_df is None:
- cur_syn_df = tmp_df
- else:
- cur_syn_df = cur_syn_df.append(tmp_df, ignore_index=True)
- logger.info(update_iteration)
-
- if update_iteration == self.update_iterations:
- # target_marginals = self.data.generate_all_two_way_marginals_except_PUMA_YEAR(self.data.private_data)
- # T_M, T_S, M_S = self.calculate_l1_errors(synthesizer.records, target_marginals, self.attrs_view_dict)
- # logger.success(f'L1 errors of 2-way: T_M = {T_M}, T_S = {T_S}, M_S = {M_S}')
-
- # target_marginals = self.data.generate_all_one_way_marginals_except_PUMA_YEAR(self.data.private_data)
- # T_M, T_S, M_S = self.calculate_l1_errors(synthesizer.records, target_marginals, self.attrs_view_dict)
- # logger.success(f'L1 errors of 1-way: T_M = {T_M}, T_S = {T_S}, M_S = {M_S}')
- pass
- if cur_syn_df is None:
- cur_syn_df = synthesizer.df
- else:
- cur_syn_df.append(synthesizer.df)
- cur_syn_df.loc[:, 'PUMA'] = puma
- cur_syn_df.loc[:, 'YEAR'] = year
- return cur_syn_df
-
- @staticmethod
- def calculate_l1_errors(records, target_marginals, attrs_view_dict):
- l1_T_Ms = []
- l1_T_Ss = []
- l1_M_Ss = []
-
- for cur_attrs, target_marginal_pd in target_marginals.items():
- view = attrs_view_dict[cur_attrs]
- syn_marginal = view.count_records_general(records)
- target_marginal = target_marginal_pd.values.flatten()
-
- T = target_marginal / np.sum(target_marginal)
- M = view.count
- S = syn_marginal / np.sum(syn_marginal)
-
- l1_T_Ms.append(LA.norm(T - M, 1))
- l1_T_Ss.append(LA.norm(T - S, 1))
- l1_M_Ss.append(LA.norm(M - S, 1))
-
- return np.mean(l1_T_Ms), np.mean(l1_T_Ss), np.mean(l1_M_Ss)
-
- @staticmethod
- def normalize_views(pub_onehot_view_dict: Dict, pub_attr_view_dict, noisy_view_dict, attr_index_map, num_synthesize_records) -> Tuple[Dict, Dict]:
- pub_weight = 0.00
- noisy_weight = 1 - pub_weight
-
- for key, view in pub_onehot_view_dict.items():
- if noisy_view_dict:
- view.weight_coeff = 0.01
- # need to first calculate (num_synthesize_records / np.sum(view.count)), otherwise have numerical problems
- view.count = view.count * (num_synthesize_records / np.sum(view.count))
- else:
- if not np.sum(view.count) == np.sum(list(pub_onehot_view_dict.values())[0].count):
- raise ValueError(
- f'view sizes do not match; maybe a data reading problem (current key: {key}, sum: {np.sum(view.count)}')
- view.count = view.count.astype(np.float)
-
- views_dict = pub_attr_view_dict
- onehot_view_dict = pub_onehot_view_dict
- for view_att, view in noisy_view_dict.items():
- if view_att in views_dict:
- views_dict[view_att].count = pub_weight * pub_attr_view_dict[view_att].count + noisy_weight * view.count
- views_dict[view_att].weight_coeff = pub_weight * pub_attr_view_dict[
- view_att].weight_coeff + noisy_weight * view.weight_coeff
- else:
- views_dict[view_att] = view
- view_onehot = DPSyn.one_hot(view_att, attr_index_map)
- onehot_view_dict[tuple(view_onehot)] = view
- return onehot_view_dict, views_dict
-
- @staticmethod
- def obtain_singleton_views(attrs_view_dict):
- singleton_views = {}
- for cur_attrs, view in attrs_view_dict.items():
- # puma and year won't be there because they only appear together (size=2)
- if len(cur_attrs) == 1:
- singleton_views[cur_attrs] = view
- return singleton_views
-
- def construct_views(self, marginals: Marginals) -> Tuple[Dict, Dict]:
- onehot_view_dict = {}
- attr_view_dict = {}
-
- for marginal_att, marginal_value in marginals.items():
- view_onehot = DPSyn.one_hot(marginal_att, self.attr_index_map)
- view = View(view_onehot, self.domain_list)
- view.count = marginal_value.values.flatten()
-
- onehot_view_dict[tuple(view_onehot)] = view
- attr_view_dict[marginal_att] = view
-
- if not len(view.count) == view.domain_size:
- raise Exception('no match')
-
- return onehot_view_dict, attr_view_dict
-
- def log_result(self, result):
- self.d.append(result)
-
- @staticmethod
- def build_attr_set(attrs: KeysView[Tuple[str]]) -> Tuple[str]:
- attrs_set = set()
-
- for attr in attrs:
- attrs_set.update(attr)
-
- return tuple(attrs_set)
-
- # simple clustering: just build the data structure; not doing any clustering
- def cluster(self, marginals: Marginals) -> Clusters:
- clusters = {}
- keys = []
- for marginal_attrs, _ in marginals.items():
- keys.append(marginal_attrs)
-
- clusters[DPSyn.build_attr_set(marginals.keys())] = keys
- return clusters
-
- @staticmethod
- def one_hot(cur_att, attr_index_map):
- cur_view_key = [0] * len(attr_index_map)
- for attr in cur_att:
- cur_view_key[attr_index_map[attr]] = 1
- return cur_view_key
-
- # synthesize cluster by cluster: the general function, not used for now
- # (we have a graph where nodes represent attributes and edges represent marginals,
- # it helps in terms of running time and accuracy if we do it cluster by cluster)
- def synthesize_records(self, attrs: Attrs, domains: Domains, clusters: Clusters, num_synthesize_records: int):
- for cluster_attrs, list_marginal_attrs in clusters.items():
- logger.info("synthesizing for %s" % (cluster_attrs,))
-
- # singleton_views = {attr: self.attr_view_dict[frozenset([attr])] for attr in attrs}
- singleton_views = {}
- for cur_attrs, view in self.attrs_view_dict.items():
- if len(cur_attrs) == 1:
- singleton_views[cur_attrs] = view
-
- synthesizer = RecordSynthesizer(attrs, domains, num_synthesize_records)
- synthesizer.initialize_records(list_marginal_attrs, singleton_views=singleton_views)
-
- attrs_index_map = {attrs: index for index, attrs in enumerate(list_marginal_attrs)}
-
- for update_iteration in range(self.update_iterations):
- logger.info("update round: %d" % (update_iteration,))
-
- synthesizer.update_alpha(update_iteration)
- sorted_error_attrs = synthesizer.update_order(update_iteration, self.attrs_view_dict,
- list_marginal_attrs)
-
- for attrs in sorted_error_attrs:
- attrs_i = attrs_index_map[attrs]
- synthesizer.update_records_prepare(self.attrs_view_dict[attrs])
- synthesizer.update_records(self.attrs_view_dict[attrs], attrs_i)
-
- self.synthesized_df.loc[:, cluster_attrs] = synthesizer.df.loc[:, cluster_attrs]
-
- def calculate_l1_errors_v2(self, M0, M1, M2, Te):
-
- l1_0_1 = []
- l1_1_2 = []
- l1_0_2 = []
- l1_t_0 = []
- l1_t_1 = []
- l1_t_2 = []
-
- count = 0
- total = len(M1)
- for cur_attrs, m1 in M1.items():
- if len(cur_attrs) == 1:
- continue
-
- count += 1
- # logger.info(f'working on {count}/{total}: {cur_attrs}')
-
- m0 = M0[cur_attrs].values.flatten()
- m1 = m1.count
- m2 = M2[cur_attrs].values.flatten()
-
- m0 = m0 / np.sum(m0)
- m1 = m1 / np.sum(m1)
- m2 = m2 / np.sum(m2)
-
- l1_0_1.append(LA.norm(m0 - m1, 1))
- l1_1_2.append(LA.norm(m1 - m2, 1))
- l1_0_2.append(LA.norm(m0 - m2, 1))
-
- tmp_l1_t_0 = []
- tmp_l1_t_1 = []
- tmp_l1_t_2 = []
-
- cur_attrs_list = [M0[cur_attrs].index.name, M0[cur_attrs].columns.name]
- indices = sorted([i for i in self.data.encode_mapping[cur_attrs_list[0]].values()])
- columns = sorted([i for i in self.data.encode_mapping[cur_attrs_list[1]].values()])
- att_list = ['PUMA', 'YEAR', ] + cur_attrs_list
- cur_Te = Te[att_list]
- puma_year_cur_Te = cur_Te.groupby(['PUMA', 'YEAR'])
- for puma_year, one_Te in puma_year_cur_Te:
- tmp = one_Te.assign(n=1).pivot_table(values='n', index=cur_attrs_list[0], columns=cur_attrs_list[1], aggfunc=np.sum, fill_value=0)
- marginal = tmp.reindex(index=indices, columns=columns).fillna(0).astype(np.int32).values.flatten()
- marginal = marginal / np.sum(marginal)
-
- tmp_l1_t_0.append(LA.norm(marginal - m0, 1))
- tmp_l1_t_1.append(LA.norm(marginal - m1, 1))
- tmp_l1_t_2.append(LA.norm(marginal - m2, 1))
-
- # print(tmp_l1_t_0)
- # print(tmp_l1_t_1)
- # print(tmp_l1_t_2)
- l1_t_0.append(np.mean(tmp_l1_t_0))
- l1_t_1.append(np.mean(tmp_l1_t_1))
- l1_t_2.append(np.mean(tmp_l1_t_2))
-
- # logger.success(f't_0 = {np.mean(tmp_l1_t_0)}, t_1 = {np.mean(tmp_l1_t_1)}, t_2 = {np.mean(tmp_l1_t_2)}')
- logger.success(f'0_1 = {np.mean(l1_0_1)}, 0_2 = {np.mean(l1_0_2)}, 1_2 = {np.mean(l1_1_2)}, t_0 = {np.mean(l1_t_0)}, t_1 = {np.mean(l1_t_1)}, t_2 = {np.mean(l1_t_2)}')
- exit()
- return
-
- def internal_synthesize(self, noisy_puma_year, fixed_n=0) -> pd.DataFrame:
- # find clusters for synthesize; a cluster is a set of marginals closely connected
- # here we do not cluster and use all marginals as a single cluster
- clusters = self.cluster(self.attrs_view_dict)
-
- # target_marginals = self.data.generate_all_two_way_marginals_except_PUMA_YEAR(self.data.private_data)
- # pub_marginals = self.data.generate_all_pub_marginals()
- # self.calculate_l1_errors_v2(pub_marginals, self.attrs_view_dict, target_marginals, self.data.private_data)
-
- self.synthesize_records_PUMA_YEAR(noisy_puma_year, clusters, fixed_n)
- # self.synthesize_records_numbers(noisy_puma_year, clusters, fixed_n)
-
- return self.synthesized_df
\ No newline at end of file
diff --git a/examples/DPSyn/method/sample_parallel.py b/examples/DPSyn/method/sample_parallel.py
deleted file mode 100644
index dcad0f2..0000000
--- a/examples/DPSyn/method/sample_parallel.py
+++ /dev/null
@@ -1,247 +0,0 @@
-import pandas as pd
-import numpy as np
-from loguru import logger
-import multiprocessing
-
-from method.dpsyn import DPSyn
-from lib_dpsyn.view import View
-
-
-class Sample(DPSyn):
-
- def synthesize(self) -> pd.DataFrame:
- '''
- decide budget distribution strategy
- '''
- eps_0 = self.sensitivity / 1400
- eps_1 = self.sensitivity / 50
- eps_2 = self.sensitivity / 35
- eps_3 = self.sensitivity / 25
-
- priv_marginal_config = {}
- priv_split_method = {}
- if self.eps < eps_2:
- # get only PUMA-YEAR(lap)
- logger.info("get only PUMA-YEAR(lap), no total count estimate")
- priv_marginal_config['priv_PUMA_YEAR'] = {'total_eps': self.eps, 'attributes': ['PUMA', 'YEAR']}
- priv_split_method['priv_PUMA_YEAR'] = 'lap'
- sample_data, scoring = 'pub', 'pub'
- else:
- # first try to use eps_0 to get total count of samples
- noisy_total_count = self.data.private_data.shape[0] + np.random.laplace(scale=self.sensitivity / eps_0)
- tau_1 = 1500 * self.sensitivity / noisy_total_count
- tau_2 = 6 * tau_1
- if self.eps < eps_0 + eps_1 + tau_1:
- # get only PUMA-YEAR(lap)
- logger.info(
- f"get only PUMA-YEAR(lap), total count estimate {noisy_total_count}, tau_1 {tau_1}, tau_2 {tau_2}")
- priv_marginal_config['priv_PUMA_YEAR'] = {'total_eps': self.eps - eps_0, 'attributes': ['PUMA', 'YEAR']}
- priv_split_method['priv_PUMA_YEAR'] = 'lap'
- sample_data, scoring = 'pub', 'pub'
- elif self.eps < eps_0 + eps_1 + tau_2:
- # get PUMA_YEAR(lap) + one way (lap)
- logger.info(
- f"get only PUMA-YEAR(lap)+ one way (lap), total count estimate {noisy_total_count}, tau_1 {tau_1}, tau_2 {tau_2}")
- x = self.eps - eps_0 - eps_1 - tau_1
- y = np.min([eps_3, eps_1 + x / 2])
- priv_marginal_config['priv_PUMA_YEAR'] = {'total_eps': y,
- 'attributes': ['PUMA', 'YEAR']}
- priv_marginal_config['priv_all_one_way'] = {'total_eps': self.eps - eps_0 - y}
- priv_split_method['priv_PUMA_YEAR'] = 'lap'
- priv_split_method['priv_all_one_way'] = 'lap'
- sample_data, scoring = 'dpsyn', '1way'
- else:
- # get PUMA_YEAR(lap) + two way (zcdp)
- logger.info(
- f"get only PUMA-YEAR(lap)+ two way (zcdp), total count estimate {noisy_total_count}, tau_1 {tau_1}, tau_2 {tau_2}")
- x = self.eps - eps_0 - eps_1 - tau_1
- y = np.min([eps_3, eps_1 + x / 2])
- priv_marginal_config['priv_PUMA_YEAR'] = {'total_eps': y,
- 'attributes': ['PUMA', 'YEAR']}
- priv_marginal_config['priv_all_two_way'] = {'total_eps': self.eps - eps_0 - y}
- priv_split_method['priv_PUMA_YEAR'] = 'lap'
- priv_split_method['priv_all_two_way'] = 'gauss'
- sample_data, scoring = 'dpsyn', '2way'
-
- num_processes = 5
- ''' obtain DP marginals (only place that access priv data other than noisy_total_count) '''
- noisy_puma_year, noisy_marginals = self.obtain_consistent_marginals(priv_marginal_config, priv_split_method)
-
- '''
- generate data
- 1. when eps is sufficiently large (eps>=0.2), call the parent class (DPSyn)'s method with fixed_n=10000
- 2. when eps is small (e.g. eps<0.2), sample from pub
- self.obtain_consistent_marginals() already got the noisy marginals and stored them in self.attrs_view_dict
- self.obtain_consistent_marginals() also built other data structures
- '''
- if sample_data == 'dpsyn':
- logger.info("DPsyn generate candidate samples")
- init_data = super().internal_synthesize(noisy_puma_year, fixed_n=10000)
- init_data = init_data.drop('iteration', axis=1)
- init_data = init_data.values
- else:
- logger.info(f'eps {self.eps}, sampling from pub data')
- init_data = self.data.public_data.sample(n=int(10000)).values
-
- attrs = self.data.obtain_attrs()
-
- '''
- calculate weights based on number of attributes in marginals
- '''
- weights = {}
- # generate weights for marginals
- for cur_attrs in self.attrs_view_dict.keys():
- attrs_info = self.data.get_marginal_grouping_info(cur_attrs)
- weight = 1
- for attr, sub_attrs in attrs_info.items():
- weight *= len(sub_attrs)
- weights[cur_attrs] = weight
-
- '''
- decide which marginals will be used in scoring in sampling
- '''
- if scoring is None or scoring == 'pub':
- logger.info("using pub 2-way as scoring marginals for sampling...")
- scoring_marginals = self.data.generate_all_two_way_marginals_except_PUMA_YEAR(self.data.public_data)
- elif scoring == '1way':
- # 1 way marginals are not consistent
- logger.info("using noisy 1-way as scoring marginals for sampling...")
- # noisy_marginals has only 1-ways
- scoring_marginals = {}
- for key, view in self.attrs_view_dict.items():
- if key in noisy_marginals:
- scoring_marginals[key] = view
- elif scoring == '2way':
- # 2-way marginals are consistent
- logger.info("using consistent 2-way as scoring marginals for sampling...")
- # noisy_marginals has only 2-ways
- scoring_marginals = {}
- for key, view in self.attrs_view_dict.items():
- if key in noisy_marginals:
- scoring_marginals[key] = view
- else:
- raise NotImplementedError
-
- '''
- only generate datasets for PUMA-YEAR with different size in 100s
- '''
- if self.eps < self.sensitivity / 35:
- # if eps is too small, round puma year to cloest 50
- rounded_puma_year = (np.round(noisy_puma_year / 10) * 10).astype(int)
- else:
- rounded_puma_year = noisy_puma_year.round(-2).astype(np.int)
- rounded_puma_year[rounded_puma_year < 300] = 300
- logger.info(f'sampling for sizes {np.unique(rounded_puma_year)}')
-
- ''' sample for the largest PUMA-YEAR size'''
- n = np.max(np.unique(rounded_puma_year))
- splited_data = np.split(init_data, num_processes)
- grouped_params = zip(splited_data, [scoring_marginals] * num_processes, [weights] * num_processes,
- [int(n / num_processes)] * num_processes, [int(n / num_processes / 3)] * num_processes,
- [self.attrs_view_dict] * num_processes)
- with multiprocessing.Pool(processes=num_processes) as pool:
- sub_set = pool.imap(self.map_sample, grouped_params)
- sample_data = list(sub_set)
- total_data = np.concatenate(sample_data, axis=0)
- logger.info("largest PUMA-YEAR sampling finish")
-
- ''' parallel sampling for each unique PUMA-YEAR sizes'''
- syn_data_count = {}
- num_sizes = len(np.unique(rounded_puma_year))
- grouped_params = zip([np.copy(total_data)] * num_sizes, [scoring_marginals] * num_sizes, [weights] * num_sizes,
- np.unique(rounded_puma_year), [int(n / 20)] * num_sizes,
- [self.attrs_view_dict] * num_sizes)
- with multiprocessing.Pool(processes=num_processes) as pool:
- sub_set = pool.imap(self.map_sample, grouped_params)
- sample_data = list(sub_set)
- for d in sample_data:
- syn_data_count[d.shape[0]] = d
-
- ''' assign samples to each PUMA-YEAR '''
- syn_df_list = []
- for puma, puma_row in rounded_puma_year.iterrows():
- for year_i, cell_count in enumerate(puma_row):
- # logger.info(f'=========== PUMA: {puma} YEAR: {year_i}, size:{cell_count} =================')
- tmp = np.copy(syn_data_count[cell_count])
- tmp = pd.DataFrame(tmp, columns=attrs)
- tmp['PUMA'] = puma
- tmp['YEAR'] = year_i
- syn_df_list.append(tmp)
- syn_pd = pd.concat(syn_df_list, ignore_index=True)
- return syn_pd
-
- '''
- parallel version of sampling
- '''
- @staticmethod
- def map_sample(grounped) -> np.ndarray:
- assert len(grounped) == 6
- init_data, target_marginals, weights, n, T, attrs_view_dict= grounped
- if n == init_data.shape[0]:
- return init_data
- ''' split candidate records into two parts, keep replacing records in D with R '''
- D = np.copy(init_data[:n, :])
- R = np.copy(init_data[n:, :])
- early_stopping_threshold = 0.0001
-
- pre_l1_error = len(target_marginals) * 2
- for i in range(T):
- D_scores = np.zeros(D.shape[0])
- R_scores = np.zeros(R.shape[0])
- l1_error = 0
- for cur_attrs, target_marginal in target_marginals.items():
- view = attrs_view_dict[cur_attrs]
- syn_marginal = view.count_records_general(D)
- if isinstance(target_marginal, pd.DataFrame):
- target_marginal = np.copy(target_marginal.values.flatten())
- elif isinstance(target_marginal, View):
- target_marginal = target_marginal.count
- target_marginal = target_marginal / np.sum(target_marginal) * np.sum(syn_marginal)
- l1_error += Sample._simple_l1(syn_marginal, target_marginal)
-
- under_cell_indices = np.where(syn_marginal < target_marginal - 1)[0]
- over_cell_indices = np.where(syn_marginal > target_marginal + 1)[0]
-
- # compute D_score and R_score
- for data, scores in zip([D, R], [D_scores, R_scores]):
- # for cell_indices in [over_cell_indices, under_cell_indices]:
- encode_records = np.matmul(data[:, view.attributes_index], view.encode_num)
-
- scores[np.in1d(encode_records, over_cell_indices)] += weights[cur_attrs]
- scores[np.in1d(encode_records, under_cell_indices)] -= weights[cur_attrs]
-
- # reverse R_score
- R_scores = -1 * R_scores
-
- D_scores_sort_index = np.argsort(D_scores)
- R_scores_sort_index = np.argsort(R_scores)
- ''' add randomness if multiple highest'''
- d_i = Sample._sampled_largest_if_tie(D_scores, D_scores_sort_index)
- r_i = Sample._sampled_largest_if_tie(R_scores, R_scores_sort_index)
-
- tmp = np.copy(R[R_scores_sort_index[-r_i], :])
- R[R_scores_sort_index[-r_i], :] = np.copy(D[D_scores_sort_index[-d_i], :])
- D[D_scores_sort_index[-d_i], :] = tmp
-
- ''' check early stop '''
- if pre_l1_error - l1_error < early_stopping_threshold:
- logger.info(f' ==== EARLY STOP at round {i + 1}/{T}, threshold: {early_stopping_threshold} ')
- break
- else:
- pre_l1_error = l1_error
- return D
-
- @staticmethod
- def _simple_l1(m1, m2):
- normalize_m1 = m1 / np.sum(m1)
- normalize_m2 = m2 / np.sum(m2)
- return np.sum(np.abs(normalize_m1 - normalize_m2))
-
- @staticmethod
- def _sampled_largest_if_tie(scores, scores_sort_index):
- i = 1
- while i < len(scores) and scores[scores_sort_index[-i]] == scores[scores_sort_index[-i - 1]]:
- i += 1
- # logger.info(f"i {i}")
- i = np.random.randint(low=1, high=i + 1)
- return i
\ No newline at end of file
diff --git a/examples/DPSyn/method/synthesizer.py b/examples/DPSyn/method/synthesizer.py
deleted file mode 100644
index 221cd25..0000000
--- a/examples/DPSyn/method/synthesizer.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import abc
-
-import numpy as np
-import pandas as pd
-from loguru import logger
-
-from dataloader.DataLoader import DataLoader
-from utils import advanced_composition
-from typing import Dict, Tuple
-
-
-class Synthesizer(object):
- __metaclass__ = abc.ABCMeta
- Marginals = Dict[Tuple[str], np.array]
-
- def __init__(self, data: DataLoader, eps: float, delta: float, sensitivity: int):
- self.data = data
- self.eps = eps
- self.delta = delta
- self.sensitivity = sensitivity
-
- @abc.abstractmethod
- def synthesize(self, fixed_n: int) -> pd.DataFrame:
- pass
-
- # make sure the synthetic data size does not exceed the max allowed size
- # currently not used
- def synthesize_cutoff(self, submit_data: pd.DataFrame) -> pd.DataFrame:
- if submit_data.shape > 0:
- submit_data.sample()
- return submit_data
-
- def anonymize(self, priv_marginal_sets: Dict, epss: Dict, priv_split_method: Dict) -> Marginals:
- noisy_marginals = {}
- for set_key, marginals in priv_marginal_sets.items():
- eps = epss[set_key]
- # noise_type, noise_param = advanced_composition.get_noise(eps, self.delta, self.sensitivity, len(marginals))
- noise_type = priv_split_method[set_key]
- if noise_type == 'lap':
- noise_param = 1 / advanced_composition.lap_comp(eps, self.delta, self.sensitivity, len(marginals))
- for marginal_att, marginal in marginals.items():
- marginal += np.random.laplace(scale=noise_param, size=marginal.shape)
- noisy_marginals[marginal_att] = marginal
- else:
- noise_param = advanced_composition.gauss_zcdp(eps, self.delta, self.sensitivity, len(marginals))
- for marginal_att, marginal in marginals.items():
- noise = np.random.normal(scale=noise_param, size=marginal.shape)
- marginal += noise
- noisy_marginals[marginal_att] = marginal
- logger.info(f"marginal {set_key} use eps={eps}, noise type:{noise_type}, noise parameter={noise_param}, sensitivity:{self.sensitivity}")
- return noisy_marginals
-
- def get_noisy_marginals(self, priv_marginal_config, priv_split_method):
- ''' THIS IS THE ONLY PLACE ACCESS PRIVATE DATA (other than calculate noisy_totaly_count)'''
- priv_marginal_sets, epss = self.data.generate_marginal_by_config(self.data.private_data, priv_marginal_config)
- ''' Add DP noise to the private marginals with pre-defined privacy allocation strategy '''
- noisy_marginals = self.anonymize(priv_marginal_sets, epss, priv_split_method)
- del priv_marginal_sets
- return noisy_marginals
diff --git a/examples/DPSyn/proof.pdf b/examples/DPSyn/proof.pdf
deleted file mode 100644
index 3e6275b..0000000
Binary files a/examples/DPSyn/proof.pdf and /dev/null differ
diff --git a/examples/DPSyn/readme.md b/examples/DPSyn/readme.md
deleted file mode 100644
index 00a44b1..0000000
--- a/examples/DPSyn/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# DPSyn
-
-### Overview
-This is the original code we submitted for the Sprint 2.
-The code can be run if put to the benchmark folder of the [runtime repo](https://github.com/drivendataorg/deid2-runtime/tree/sprint-2).
-The competition description is at [drivendata](https://www.drivendata.org/competitions/75/deid2-sprint-2-prescreened/page/285/),
-and the data can be downloaded [here](https://www.drivendata.org/competitions/75/deid2-sprint-2-prescreened/data/).
-We will refactor the code for public use and publish the polished version.
-
-### Description of the code
-* ``main.py`` is the entry of our algorithm.
-
-* ``config/data.yaml`` is the configuration file with public dataset path, target dataset paths
-and binning/grouping attributes strategies.
-
-* ``dataloader/public.csv`` is the public data used in the open/pre-screened arena (IL and OH data).
-
-* ``dataloader/Dataloader.py`` is the dataloader used to load and preprocess both public and private (target) dataset.
-It also contains the methods of generating 1-way/2-way marginals.
-
-* ``dataloader/RecordPostprocessor.py`` is for post-processing synthetic dataset to have the same attributes
-as input dataset.
-
-* ``method/sample_parallel.py`` is one of the key components in our algorithm.
-Details can be found in our pdf document.
-
-* ``method/dpsyn.py`` is another key component in our algorithm.
-It generates synthetic data (for sampling) based on the noisy 1-way or 2-way marginals,
-when we have sufficient privacy budget.
-
-* ``method/sythesizer.py`` is the base class. It contains functions of generating privacy-preserved
-marginals.
-
-* ``lib_dysyn/`` contains the classes of enforcing consistency on marginals and synthesize data.
-
-* ``utils/advanced_composition.py`` contains functions to compute noise variance
-given privacy budget, sensitivity and number of queries.
-
-* ``proof.pdf`` contains the detailed description of the code and the formal proof.
\ No newline at end of file
diff --git a/examples/DPSyn/utils/advanced_composition.py b/examples/DPSyn/utils/advanced_composition.py
deleted file mode 100644
index e991e9f..0000000
--- a/examples/DPSyn/utils/advanced_composition.py
+++ /dev/null
@@ -1,164 +0,0 @@
-import math
-
-import numpy as np
-from scipy.optimize import fsolve
-
-
-def lap_comp(epsilon, delta, sensitivity, k):
- return epsilon * 1.0 / k / sensitivity
-
-
-def lap_adv_comp(epsilon, delta, sensitivity, k):
- def func(x_0):
- eps_0 = x_0[0]
- return math.sqrt(2 * k * math.log(1 / delta)) * eps_0 + k * (math.exp(eps_0) - 1) * eps_0 - epsilon
-
- result = fsolve(func, np.array([0.0]))
-
- return result[0] / sensitivity
-
-
-def gauss_adv_comp(epsilon, delta, sensitivity, k):
- def gauss(delta_0):
- dlt = delta - delta_0 * k
-
- def eps_func(x_0):
- eps_0 = x_0[0]
- return math.sqrt(2 * k * math.log(1 / dlt)) * eps_0 + k * (math.exp(eps_0) - 1) * eps_0 - epsilon
-
- epsilon_0 = fsolve(eps_func, np.array([0.0]))[0]
- sigma = sensitivity * np.sqrt(2 * math.log(1.25 / delta_0)) / epsilon_0
- return sigma
-
- l, h = 1e-30, delta * 1.0 / k / 1.1
- min_delta_0 = my_minimize(gauss, l, h)
- return gauss(min_delta_0)
-
-
-def my_minimize(func, l, h):
- vfunc = np.vectorize(func)
- cur_l, cur_h = l, h
- n = 20000
- for i in range(10):
- xs = np.linspace(cur_l, cur_h, n)
- vs = vfunc(xs)
- vs_index = np.argsort(vs)
- cur_l_index, cur_h_index = vs_index[0], vs_index[1]
- cur_l, cur_h = xs[cur_l_index], xs[cur_h_index]
-
- return (cur_l + cur_h) / 2
-
-
-def gauss_renyi(epsilon, delta, sensitivity, k):
- def renyi(low):
- epsilon0 = max(1e-20, epsilon - np.log(1.0 / delta) * 1.0 / (low - 1))
- sigma = np.sqrt(k * low * sensitivity ** 2 * 1.0 / 2 / epsilon0)
- return sigma
-
- l, h = 1.00001, 100000
- min_low = my_minimize(renyi, l, h)
- min_sigma = renyi(min_low)
-
- return min_sigma
-
-
-def gauss_zcdp(epsilon, delta, sensitivity, k):
- tmp_var = 2 * k * sensitivity ** 2 * math.log(1 / delta)
-
- sigma = (math.sqrt(tmp_var) + math.sqrt(tmp_var + 2 * k * sensitivity ** 2 * epsilon)) / (2 * epsilon)
-
- return sigma
-
-
-# zcdp and zcdp2 and rdp perform the same
-def gauss_zcdp2(epsilon, delta, sensitivity, k):
- my_log = math.log(1 / delta)
-
- sigma = sensitivity * math.sqrt(k / 2) / (math.sqrt(epsilon + my_log) - math.sqrt(my_log))
-
- return sigma
-
-
-def lap_zcdp_comp(epsilon, delta, sensitivity, k):
- return math.sqrt(2.0 * (math.sqrt(k) * sensitivity / epsilon) ** 2)
-
-
-def get_noise(eps, delta, sensitivity, num_composition):
- lap_param = lap_comp(eps, delta, sensitivity, num_composition)
- lap_naive_var = 2 * (1.0 / lap_param ** 2)
-
- gauss_param = gauss_zcdp(eps, delta, sensitivity, num_composition)
- gauss_var_zcdp = gauss_param ** 2
- if lap_naive_var < gauss_var_zcdp:
- return 'lap', 1 / lap_param
- else:
- return 'gauss', gauss_param
-
-
-# print(gauss_zcdp(0.88, 3e-11, 7, 22) ** 2)
-# print(2 * (1.0 / lap_comp(0.88, 3e-11, 7, 22) ** 2))
-#
-# print(gauss_zcdp(10, 3e-11, 7, 233) ** 1)
-# print(2 * (1.0 / lap_comp(10, 3e-11, 7, 233) ** 2))
-
-'''
-# when 2 * k ** 0.5 > (math.log(1/delta) + epsilon) ** 0.5 + (math.log(1/delta)) ** 0.5, zcdp gives better accuracy
-
-total_epss = [0.001, 0.002]
-total_epss = [0.3, 1, 8]
-total_epss = [0.252, 0.87, 7.28]
-total_epss = [0.01]
-sensitivitys = [1]
-n = 30000
-# total_delta = 1.0 / n ** 2
-total_delta = 1e-15
-ks = [1, 5, 10, 15, 20, 30, 50, 100]
-
-alpha = 0.05
-domain_size = 100
-
-for total_eps in total_epss:
- for sensitivity in sensitivitys:
- print(total_eps)
- for k in ks:
- lap_param = lap_comp(total_eps, total_delta, sensitivity, k)
- lap_naive_var = 2 * (1.0 / lap_param ** 2)
- print('& $%.1E$' % lap_naive_var, end='\t')
-
- print('\\\\')
- for k in ks:
- lap_param = lap_adv_comp(total_eps, total_delta, sensitivity, k)
- lap_var = 2 * (1.0 / lap_param ** 2)
- print('& $%.1E$' % lap_var, end='\t')
-
- print('\\\\')
- for k in ks:
- gauss_param = gauss_adv_comp(total_eps, total_delta, sensitivity, k)
- gauss_var_adv = gauss_param ** 2
- print('& $%.1E$' % gauss_var_adv, end='\t')
-
- # gauss_param = gauss_renyi(total_eps, total_delta, sensitivity, k)
- # gauss_var = gauss_param ** 2
-
- print('\\\\')
- for k in ks:
- gauss_param = gauss_zcdp(total_eps, total_delta, sensitivity, k)
- gauss_var_zcdp = gauss_param ** 2
- print('& $%.1E$' % gauss_var_zcdp, end='\t')
-
- # gauss_param3 = gauss_zcdp2(total_eps, total_delta, sensitivity, k)
- # gauss_var_zcdp3 = gauss_param3 ** 2
-
- # print(
- # f'${total_eps}, ${sensitivity}$, ${math.sqrt(lap_naive_var)}$, ${math.sqrt(lap_var)}$, ${math.sqrt(gauss_var_adv)}$, ${math.sqrt(gauss_var_zcdp)}$')
-
- norm_scale = gauss_param
- lap_scale = 1.0 / lap_param
- norm_mean = 0
- laplace_mean = 0
-
- # norm_threshold = 4.0 * norm.ppf(1 - alpha / domain_size, norm_mean, norm_scale)
- # lap_threshold = 4.0 * laplace.ppf(1 - alpha / domain_size, laplace_mean, lap_scale)
- # print(norm_threshold, lap_threshold)
- print('\\\\')
-'''
\ No newline at end of file
diff --git a/examples/Minutemen/LICENSE.txt b/examples/Minutemen/LICENSE.txt
deleted file mode 100644
index 261eeb9..0000000
--- a/examples/Minutemen/LICENSE.txt
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/examples/Minutemen/README.md b/examples/Minutemen/README.md
deleted file mode 100644
index 1114d22..0000000
--- a/examples/Minutemen/README.md
+++ /dev/null
@@ -1,329 +0,0 @@
-# nist-synthetic-data-2021
-Source code for the second place submission in the third round of the 2021 NIST differential privacy temporal map challenge.
-
-The contest-submission folder contains the code submitted during the contest, and only works on the contest dataset. A writeup about the solution can be found in this folder: [AdaptiveGrid.pdf](https://github.com/ryan112358/nist-synthetic-data-2021/blob/main/contest-submission/AdaptiveGrid.pdf). The extensions folder contains a new mechanism, inspired by the solution to the competition, that works on arbitrary discrete datasets. Several benchmark datasets can be found in the extensions/datasets folder.
-
-## Setting up
-
-The following setup instructions apply to Linux and OSX. This code has not been tested on Windows, although it should run with a modified setup procedure.
-First, make sure you have Python>=3.6 installed, and create a virtual environment as follows:
-
-```
-$ mkdir $HOME/venvs
-$ python3 -m venv pgm
-$ source ~/venvs/pgm/bin/activate
-$ pip install -r requirements.txt
-```
-
-This code depends on [Private-PGM](https://github.com/ryan112358/private-pgm). Private-PGM can be set up using the following commands:
-```
-$ cd $HOME
-$ git clone git@github.com:ryan112358/private-pgm.git
-$ echo 'export PYTHONPATH="PYTHONPATH:$HOME/private-pgm/src/"' >> ~/.bashrc
-$ source ~/.bashrc
-$ cd private-pgm/test
-$ nosetests
-........................................
-----------------------------------------------------------------------
-Ran 40 tests in 5.009s
-
-OK
-```
-
-## Assumptions and Limitations
-
-Here is a list of assumptions and limitations we are imposing:
-
-* The input dataset must be discrete --- i.e., all columns must be categorical. Numerical columns must be discretized into a small number of bins. We expect the input dataset to be specified as a mbi.Dataset object (from Private-PGM). This object expects each attribute to take values from the set {0, 1, …, n_i}. We include a collection of eight already preprocessed datasets alongside the released code in the extensions/datasets folder. We also provide utilities for preprocessing arbitrary datasets into the required format, which we describe how to use in the next section.
-* We do not support “id” columns. Other columns with high-cardinality domains should be discared. The domain size for each column should be finite and reasonably small (definitely less than 1000, smaller than 100 preferred).
-* Our mechanism satisfies unbounded differential privacy (add/remove one individual) and we assume a single individual only affects one row of the dataset. If these assumptions are not satisfies, the privacy parameters must be modified accordingly.
-
-## Preprocessing the Data
-
-If you would like to run our mechanism on your own dataset, this section shows you how to do that. If you would like to run the mechanism on one of our datasets, feel free to skip to the next section. As mentioned in the previous section, our mechanism expects the data for each column be come from the set {0, 1, ..., n_i}. This section shows how to transform an arbitrary dataset into one of this form, and how to reverse this transformation as well.
-
-Our script, `transform.py` can discretize and undiscretize your data. To use it, we first need to get the schema of the data using `schemagen`. Schemagen was written by Maia Hansen and the original repo can be accessed [here](https://github.com/hd23408/nist-schemagen). For convenience, we have included a copy of the script in our repo. It is located in `extensions/schemagen.py`. We have also provided a copy of the undiscretized version of the adult dataset so that users can test the script first before using it on their own dataset. To run schemagen on the adult dataset, use this command:
-
-```
-python schemagen.py /path_to_repo/nist_synthetic-data-2021/extensions/datasets/raw/adult.csv --max_categorical 40
-```
-
-The README in [here](https://github.com/hd23408/nist-schemagen) provides detailed descriptions of each argument. In the example above, we specify the path to the dataframe and the maximum number of categorical features for any column. Users may want to play around with the flags of the script to see what works for their use case. Note that if the dataset contains an id column, you can use the `--skip_columns` argument and include any columns you don't want to be privatized making sure that they are seperated with commas.
-
-By default, the script will place `parameters.json` and `column_datatypes.json` into the current directory. If you want to specify a different output directory, use the `--output_dir` argument. Additionally, for `numeric` column types, the default number of bins is 10. If you want custom binning, it is straighforward to open the `parameters.json` file in your favorite text editor and edit the `bins` field for each column.
-
-To discretize your data and place the result into a folder `PATH_TO_OUTPUT`,
-run:
-
-```
-python transform.py --transform discretize --df
-PATH_TO_REPO/nist_synthetic-data-2021/extensions/datasets/raw/adult.csv
---schema parameters.json --output_dir PATH_TO_OUTPUT
-```
-
-Note that if you use `--transform discretize`, the script will also write a
-`domain.json` file to `OUTPUT_DIR`. This file will be necessary to run PGM.
-
-The arguments for `transform.py` are:
-
-```
-usage: transform.py [-h] [--output_dir OUTPUT_DIR] --transform TRANSFORM --df
- DF --schema SCHEMA
-
-Pre and post processing functions for the Adagrid mechanism
-
-optional arguments:
- -h, --help show this help message and exit
- --output_dir OUTPUT_DIR
- output directory for transformed data and domain if
- using `discretize` (default: .)
-
-required arguments:
- --transform TRANSFORM
- either discretize or undo_discretize (default: None)
- --df DF path to dataset (default: None)
- --schema SCHEMA path to schema file from schemagen (default: None)
-```
-
-And that's all there is to it!
-
-## Running the Mechanism
-
-After setting up Private-PGM, we can generate synthetic data using the following command
-
-```
-$ cd extensions/
-$ python adaptive_grid.py --dataset datasets/adult.zip --domain datasets/adult-domain.json --save adult-synthetic.csv
-
-Measuring ('native-country',), L2 sensitivity 1.000000
-Measuring ('fnlwgt',), L2 sensitivity 1.000000
-Measuring ('relationship',), L2 sensitivity 1.000000
-Measuring ('capital-gain',), L2 sensitivity 1.000000
-Measuring ('hours-per-week',), L2 sensitivity 1.000000
-Measuring ('income>50K',), L2 sensitivity 1.000000
-Measuring ('workclass',), L2 sensitivity 1.000000
-Measuring ('sex',), L2 sensitivity 1.000000
-Measuring ('marital-status',), L2 sensitivity 1.000000
-Measuring ('capital-loss',), L2 sensitivity 1.000000
-Measuring ('occupation',), L2 sensitivity 1.000000
-Measuring ('age',), L2 sensitivity 1.000000
-Measuring ('race',), L2 sensitivity 1.000000
-Measuring ('education-num',), L2 sensitivity 1.000000
-
-Measuring ('age', 'marital-status'), L2 sensitivity 1.000000
-Measuring ('age', 'hours-per-week'), L2 sensitivity 1.000000
-Measuring ('age', 'fnlwgt'), L2 sensitivity 1.000000
-Measuring ('age', 'capital-gain'), L2 sensitivity 1.000000
-Measuring ('age', 'capital-loss'), L2 sensitivity 1.000000
-Measuring ('workclass', 'occupation'), L2 sensitivity 1.000000
-Measuring ('fnlwgt', 'native-country'), L2 sensitivity 1.000000
-Measuring ('fnlwgt', 'race'), L2 sensitivity 1.000000
-Measuring ('education-num', 'occupation'), L2 sensitivity 1.000000
-Measuring ('marital-status', 'relationship'), L2 sensitivity 1.000000
-Measuring ('occupation', 'hours-per-week'), L2 sensitivity 1.000000
-Measuring ('relationship', 'sex'), L2 sensitivity 1.000000
-Measuring ('relationship', 'income>50K'), L2 sensitivity 1.000000
-
-Post-processing with Private-PGM, will take some time...
-```
-
-As we can see, the mechanism measured queries about all 1-way marginals, and a subset of 13 2-way marginals. This produces an output adult-synthetic.csv that we can radily view
-
-```
-$ head adult-synthetic.csv
-age,workclass,fnlwgt,education-num,marital-status,occupation,relationship,race,sex,capital-gain,capital-loss,hours-per-week,native-country,income>50K
-14,0,13,3,3,9,3,0,0,0,0,46,0,0
-10,0,11,12,2,4,5,0,0,0,0,39,0,0
-15,0,9,9,0,3,2,0,1,0,45,19,0,0
-8,1,16,8,2,10,1,0,0,0,0,19,20,0
-32,0,4,13,0,8,2,0,1,0,0,59,0,1
-4,0,21,9,2,9,1,0,1,0,0,39,0,0
-21,0,10,8,1,7,3,0,0,0,0,39,0,0
-31,8,12,6,0,14,2,0,1,0,0,34,0,1
-21,0,14,13,1,4,3,3,0,0,0,44,0,0
-```
-
-We can undo the discretization function we applied earlier:
-
-```
-python transform.py --transform undo_discretize --df adult-synthetic.csv
---schema parameters.json --output_dir .
-```
-
-## The target option
-
-By default, this mechanism will try to preserve all 2-way marginals. If one column has increased importance, we can specify that with the **targets** column. With this option specified, we will instead try to preserve higher order marginals involving the targets. If we specify ```--targets="income>50K"``` then the mechanism will try to preserve 3-way marginals involving the income column. We can pass in multiple targets if desired, although scalability will suffer if the list is longer than a few columns.
-
-```
-$ python adaptive_grid.py --dataset datasets/adult.zip --domain datasets/adult-domain.json --targets="income>50K" --save adult-synthetic-target.csv
-
-Measuring ('income>50K',), L2 sensitivity 1.000000
-Measuring ('marital-status',), L2 sensitivity 1.000000
-Measuring ('age',), L2 sensitivity 1.000000
-Measuring ('race',), L2 sensitivity 1.000000
-Measuring ('capital-gain',), L2 sensitivity 1.000000
-Measuring ('workclass',), L2 sensitivity 1.000000
-Measuring ('relationship',), L2 sensitivity 1.000000
-Measuring ('education-num',), L2 sensitivity 1.000000
-Measuring ('hours-per-week',), L2 sensitivity 1.000000
-Measuring ('capital-loss',), L2 sensitivity 1.000000
-Measuring ('fnlwgt',), L2 sensitivity 1.000000
-Measuring ('occupation',), L2 sensitivity 1.000000
-Measuring ('native-country',), L2 sensitivity 1.000000
-Measuring ('sex',), L2 sensitivity 1.000000
-
-Measuring ('marital-status', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('race', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('relationship', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('capital-loss', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('fnlwgt', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('native-country', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('workclass', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('occupation', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('hours-per-week', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('education-num', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('capital-gain', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('sex', 'income>50K'), L2 sensitivity 1.000000
-
-Measuring ('age', 'marital-status', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'hours-per-week', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'fnlwgt', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'native-country', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'capital-gain', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'capital-loss', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('age', 'race', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('workclass', 'occupation', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('education-num', 'occupation', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('marital-status', 'relationship', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('occupation', 'hours-per-week', 'income>50K'), L2 sensitivity 1.000000
-Measuring ('relationship', 'sex', 'income>50K'), L2 sensitivity 1.000000
-
-Post-processing with Private-PGM, will take some time...
-```
-
-As we can see, the mechanism now measured a lot more things about marginals involving the target column. In particular, it measured all 2-way marginals involving income, and 12 3-way marginals involving income.
-
-## Evaluating the synthetic data
-
-We can score our synthetic data using the score.py function, as follows:
-
-```
-$ python score.py --synthetic adult-synthetic.csv
-relationship sex 0.003655
- income>50K 0.003675
-marital-status relationship 0.007279
-sex income>50K 0.008364
-marital-status income>50K 0.011373
- ...
-age education-num 0.139112
-occupation relationship 0.151089
-age hours-per-week 0.157170
-occupation sex 0.159074
-age fnlwgt 0.207127
-Length: 91, dtype: float64
-Average Error: 0.05595402713661589
-```
-
-The error is calculated as an total variation distance between true and synthetic marginals, averaged over all 2-way marginals. We can see both the breakdown (which marginals are estimated well and which are not), and the overall error. We can also specify a list of targets, which modifies the evaluation criteria to include the target columns in all evalaution marginals.
-
-```
-$ python score.py --synthetic adult-synthetic-target.csv --targets "income>50K"
-relationship sex income>50K 0.005139
-marital-status relationship income>50K 0.011445
-workclass race income>50K 0.024426
-sex capital-loss income>50K 0.027927
-marital-status sex income>50K 0.028029
- ...
-occupation relationship income>50K 0.140740
-age education-num income>50K 0.151325
-occupation sex income>50K 0.161418
-age hours-per-week income>50K 0.163691
- fnlwgt income>50K 0.174420
-Length: 78, dtype: float64
-Average Error: 0.06613134555274515
-```
-
-**NOTE**: By specifying targets in adaptive_grid.py, we can expect the synthetic data to score better when passing --targets to score.py. If we score adult-synthetic.csv with the target option enabled, the score is 0.1038, almost 2X worse than the 0.0661 we achieved.
-
-We can compare the score we obtain from our differentially private mechanism with that of a simple non-private baseline which samples n records with replacement from the original dataset. We can run this baseline using resample.py and score it using the same score function.
-
-```
-$ python resample.py --dataset datasets/adult.csv --save resample.csv
-$ python score.py --synthetic resample.csv
-sex income>50K 0.001679
-relationship sex 0.002191
-race income>50K 0.002211
-relationship income>50K 0.002764
-capital-loss income>50K 0.003030
- ...
-age education-num 0.042545
- occupation 0.046599
-fnlwgt hours-per-week 0.048462
-age hours-per-week 0.063142
- fnlwgt 0.069919
-Length: 91, dtype: float64
-Average Error: 0.014676838660295519
-```
-
-
-## Full configuration options
-
-The default configuration options are shown below. In general, the dataset, domain, epsilon, delta, targets, and save options should be specified. For other options, the defaults settings should work fine in most cases. Interested users can try modifying them if desired.
-
-```
-$ cd extensions/
-$ python adaptive_grid.py --help
-usage: adaptive_grid.py [-h] [--dataset DATASET] [--domain DOMAIN] [--epsilon EPSILON]
- [--delta DELTA] [--targets TARGETS [TARGETS ...]] [--pgm_iters PGM_ITERS]
- [--warm_start WARM_START] [--metric {L1,L2}] [--threshold THRESHOLD]
- [--split_strategy SPLIT_STRATEGY [SPLIT_STRATEGY ...]] [--save SAVE]
-
-A generalization of the Adaptive Grid Mechanism that won 2nd place in the 2020 NIST temporal map
-challenge
-
-optional arguments:
- -h, --help show this help message and exit
- --dataset DATASET dataset to use (default: datasets/adult.zip)
- --domain DOMAIN dataset to use (default: datasets/adult-domain.json)
- --epsilon EPSILON privacy parameter (default: 1.0)
- --delta DELTA privacy parameter (default: 1e-10)
- --targets TARGETS [TARGETS ...]
- target columns to preserve (default: [])
- --pgm_iters PGM_ITERS
- number of iterations (default: 2500)
- --warm_start WARM_START
- warm start PGM (default: True)
- --metric {L1,L2} loss function metric to use (default: L2)
- --threshold THRESHOLD
- adagrid treshold parameter (default: 5.0)
- --split_strategy SPLIT_STRATEGY [SPLIT_STRATEGY ...]
- budget split for 3 steps (default: [0.1, 0.1, 0.8])
- --save SAVE path to save synthetic data (default: out.csv)
-
-$ python score.py --help
-usage: score.py [-h] [--dataset DATASET] [--domain DOMAIN]
- [--synthetic SYNTHETIC] [--targets TARGETS [TARGETS ...]]
- [--save SAVE]
-
-A script to score the quality of synthetic data
-
-optional arguments:
- -h, --help show this help message and exit
- --dataset DATASET dataset to use (default: datasets/adult.zip)
- --domain DOMAIN domain of dataset (default: datasets/adult-
- domain.json)
- --synthetic SYNTHETIC
- synthetic dataset to use (default: out.csv)
- --targets TARGETS [TARGETS ...]
- target columns to define evaluation criteria (default:
- [])
- --save SAVE path to save error report (default: error.csv)
-```
-
-Notes about other options:
-* The metric options corresponds to the loss function used to resolve inconsistencies in noisy marginals. The L2 loss function is more natural with Gaussian noise, which is what we use, and also has better smoothness properties, making optimization simpler. We don't recommend changing this, but feel free to try to see if it makes a difference in your use case.
-* The `pgm_iters` specifies how many iterations to run the proximal gradient algorithm underlying Private-PGM. Increasing this value may improve error slightly, at the cost of increased runtime. Decreasing this value too aggressively could destroy performance.
-* The warm_start option is activated during the second invocation of Private-PGM after step 3. If it is turned on, then the parameters from in the previous invocation will be used to initialize the proximal algorithm.
-* The threshold option is used to determine whether to measure a cell in a marginal at finer granularity. If a cell in a marginal had noisy count below threshold\*sigma, then no future measurements will be made at finer granularity. The mechanism seems fairly robust to the choice of threshold, and even setting it to -inf should be fine (no threshold). Feel free to modify it and see how it impact performance on your problem, but expect the default to provide reasonable behavior.
-* the split_strategy option specifies how much of the privacy budget to devote to the three steps of the algorithm. By default 10% is used on step 1 (measuring 1 way marginals), 10% is used on step 2 (selecting higher order marginals), and 80% is used on step 3 (measuring higher order marginals). Since the first two steps are coarse-grained aggregations, they are more robust to noise than step 3. Again, feel free to change this, but expect the default to work reasonably well.
diff --git a/examples/Minutemen/adaptive_grid.py b/examples/Minutemen/adaptive_grid.py
deleted file mode 100644
index 906aace..0000000
--- a/examples/Minutemen/adaptive_grid.py
+++ /dev/null
@@ -1,173 +0,0 @@
-import numpy as np
-import pandas as pd
-import json
-from util import discretize, undo_discretize, downward_closure
-from mbi import FactoredInference, Factor
-from scipy import sparse
-from autodp import privacy_calibrator
-from functools import partial
-from pathlib import Path
-import typer
-from multiprocessing import Pool
-from math import ceil
-
-import sdnist
-
-
-def get_permutation_matrix(cl1, cl2, domain):
- # permutation matrix that maps datavector of cl1 factor to datavector of cl2 factor
- assert set(cl1) == set(cl2)
- n = domain.size(cl1)
- fac = Factor(domain.project(cl1),np.arange(n))
- new = fac.transpose(cl2)
- data = np.ones(n)
- row_ind = fac.datavector()
- col_ind = new.datavector()
- return sparse.csr_matrix((data, (row_ind, col_ind)), shape=(n,n))
-
-def get_aggregate(cl, matrices, domain):
- children = [r for r in matrices if set(r) < set(cl) and len(r)+1 == len(cl)]
- ans = [sparse.csr_matrix((0,domain.size(cl)))]
- for c in children:
- coef = 1.0 / np.sqrt(len(children))
- a = tuple(set(cl)-set(c))
- cl2 = a + c
- Qc = matrices[c]
- P = get_permutation_matrix(cl, cl2, domain)
- T = np.ones(domain.size(a))
- Q = sparse.kron(T, Qc) @ P
- ans.append(coef*Q)
- return sparse.vstack(ans)
-
-def get_identity(cl, post_plausibility, domain):
- # determine which cells in the cl marginal *could* have a count above threshold,
- # based on previous measurements
- children = [r for r in post_plausibility if set(r) < set(cl) and len(r)+1 == len(cl)]
- plausibility = Factor.ones(domain.project(cl))
- for c in children:
- plausibility *= post_plausibility[c]
-
- row_ind = col_ind = np.nonzero(plausibility.datavector())[0]
- data = np.ones_like(row_ind)
- n = domain.size(cl)
- Q = sparse.csr_matrix((data, (row_ind, col_ind)), (n,n))
- return Q
-
-
-def adagrid(data, epsilon, delta, threshold, cliques, iters=2500, clip=200):
- # Calibrate noise using Gaussian differential privacy
- # We have an adaptive composistion of K=len(cliques) Gaussian mechanisms,
- # each applied to a quantity with L2 sensitivty of 1
- # Requried noise is thus sqrt(K) * sigma(epsilon, delta) * 200
- # the 200 can be reduced if clipping is done
- noise = privacy_calibrator.gaussian_mech(epsilon, delta)['sigma']*clip*np.sqrt(len(cliques))
- domain = data.domain
- threshold = noise*threshold
- measurements = []
- post_plausibility = {}
- matrices = {}
-
- for k in [1,2,3,4]:
- split = [cl for cl in cliques if len(cl) == k]
- print()
- for cl in split:
- I = sparse.eye(domain.size(cl))
- Q1 = get_identity(cl, post_plausibility, domain) # get fine-granularity measurements
- Q2 = get_aggregate(cl, matrices, domain) @ (I - Q1) #get remaining aggregate measurements
- Q1 = Q1[Q1.getnnz(1)>0] # remove all-zero rows
- Q = sparse.vstack([Q1,Q2])
- Q.T = sparse.csr_matrix(Q.T) # a trick to improve efficiency of Private-PGM
- # Q has sensitivity 1 by construction
- print('Measuring %s, L2 sensitivity %.6f' % (cl, Q.power(2).sum(axis=0).max()))
- #########################################
- ### This code uses the sensitive data ###
- #########################################
- mu = data.project(cl).datavector()
- y = Q @ mu + np.random.normal(loc=0, scale=noise, size=Q.shape[0])
- #########################################
- est = Q1.T @ y[:Q1.shape[0]]
-
- post_plausibility[cl] = Factor(domain.project(cl), est >= threshold)
- matrices[cl] = Q
- measurements.append((Q, y, 1.0, cl))
-
- print('Post-processing with Private-PGM, will take some time...')
- elim_order = ['trip_seconds', 'payment_type', 'trip_miles', 'trip_total', 'tips', 'fare', 'company_id', 'dropoff_community_area', 'pickup_community_area', 'shift']
- engine = FactoredInference(domain,elim_order=elim_order,log=False,iters=iters,warm_start=True)
-
- small = [M for M in measurements if len(M[-1]) == 1]
- engine.estimate(small)
-
- return engine.estimate(measurements, total=engine.model.total)
-
-def assign_taxi_ids(priv):
- gt = pd.read_csv('public_taxiid.zip')
- pair = ['pickup_community_area','shift']
- sizes = priv.groupby(pair).size().unstack().fillna(0).astype(int).stack()
-
- def assign_identifier(g):
- num = sizes[g.name]
- if num == 0:
- return pd.DataFrame(columns=g.columns)
- g = g.sample(frac=1) # shuffle
- reps = ceil(num/g.shape[0])
- g = pd.concat([g]*reps, ignore_index=True).iloc[:num] # grab correct number of rows
- g['key'] = np.arange(g.shape[0]) # assign key for later join operation
- return g
- gt2 = gt.groupby(pair).apply(assign_identifier).reset_index(drop=True)
- priv2 = priv.groupby(pair).apply(assign_identifier).reset_index(drop=True)
- ans = priv2.merge(gt2, how='left', on=pair+['key']).drop(columns=['key'])
- ans['taxi_id'] = ans.taxi_id.astype('category').cat.codes
- cumct = ans.groupby('taxi_id').cumcount()
- num = (cumct >= 200).sum()
- #new_ids = np.repeat(np.arange(ceil(num/200.0))+ans.taxi_id.max()+1, 200)[:num]
- ans.loc[cumct >= 200,'taxi_id'] = np.arange(num)+ans.taxi_id.max()+1
- return ans
-
-def run_mechanism(df, schema, run):
- epsilon, delta = run['epsilon'], run['delta']
- iters = int(344*epsilon+256)
- threshold = 5
- copies = 8
-
- if epsilon <= 1:
- clip = 150
- else:
- clip = 200
-
- data = discretize(df, schema, clip)
-
- cliques = [('pickup_community_area', 'shift', 'fare', 'trip_total'),
- ('pickup_community_area', 'shift', 'trip_total', 'trip_seconds'),
- ('pickup_community_area', 'shift', 'dropoff_community_area', 'fare'),
- ('pickup_community_area', 'shift', 'payment_type', 'trip_total'),
- ('pickup_community_area', 'shift', 'fare', 'trip_miles'),
- ('pickup_community_area', 'shift', 'company_id'),
- ('pickup_community_area', 'shift', 'tips', 'trip_total')]
-
- cliques = downward_closure(cliques)
- cliques += [('pickup_community_area', 'dropoff_community_area')]*(copies - 1)
-
- model = adagrid(data,epsilon,delta,threshold,cliques,iters,clip)
-
- synth = model.synthetic_data()
- submit = undo_discretize(synth, schema)
- # submit = assign_taxi_ids(submit)
- submit["taxi_id"] = 0
- cols = ['taxi_id', 'shift', 'company_id', 'pickup_community_area', 'dropoff_community_area', 'payment_type', 'fare', 'tips', 'trip_total', 'trip_seconds', 'trip_miles']
- submit = submit[cols]
- return submit
-
-
-def main():
- df, schema = sdnist.taxi()
-
- del schema["trip_day_of_week"]
- del schema["trip_hour_of_day"]
- run = {"epsilon": 1, "delta": 2.5e-4}
- synthetic_df = run_mechanism(df, schema, run)
-
- print(sdnist.score(df, synthetic_df, challenge="taxi"))
-
-if __name__ == '__main__':
- typer.run(main)
\ No newline at end of file
diff --git a/examples/Minutemen/util.py b/examples/Minutemen/util.py
deleted file mode 100644
index 48fe25c..0000000
--- a/examples/Minutemen/util.py
+++ /dev/null
@@ -1,117 +0,0 @@
-import numpy as np
-import pandas as pd
-from mbi import Domain, Dataset
-import itertools
-
-def powerset(iterable):
- s = list(iterable)
- return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(1,len(s)+1))
-
-def downward_closure(cliques):
- ans = set()
- for proj in cliques:
- ans.update(powerset(proj))
- return list(sorted(ans, key=len))
-
-BINS = {
- "fare": np.r_[-1, np.arange(0, 100, step=10), 9900],
- "tips": np.r_[-1, np.arange(0, 100, step=10), 407],
- "trip_total": np.r_[-1, np.arange(0, 100, step=10), 9900],
- "trip_seconds": np.r_[-1, np.arange(0, 2000, step=200), 86400],
- "trip_miles": np.r_[-1, np.arange(0, 100, step=10), 1428] }
-
-def discretize(df, schema, clip=None):
- weights = None
- if clip is not None:
- # each individual now only contributes "clip" records
- # achieved by reweighting records, rather than resampling them
- weights = df.taxi_id.value_counts()
- weights = np.minimum(clip/weights, 1.0)
- weights = np.array(df.taxi_id.map(weights).values)
-
- new = df.copy()
- domain = { }
- for col in schema:
- info = schema[col]
- #print(col)
- if col in BINS:
- new[col] = pd.cut(df[col], BINS[col], right=False).cat.codes
- domain[col] = len(BINS[col]) - 1
- elif 'values' in info:
- new[col] = df[col].astype(pd.CategoricalDtype(info['values'])).cat.codes
- domain[col] = len(info['values'])
- else:
- new[col] = df[col] - info['min']
- domain[col] = info['max'] - info['min'] + 1
-
- domain = Domain.fromdict(domain)
- return Dataset(new, domain, weights)
-
-def undo_discretize(dataset, schema):
- df = dataset.df
- new = df.copy()
-
- for col in dataset.domain:
- info = schema[col]
- if col in BINS:
- low = BINS[col][:-1];
- high = BINS[col][1:]
- low[0] = low[1]-2
- high[-1] = high[-2]+2
- mid = (low + high) / 2
- new[col] = mid[df[col].values]
- elif 'values' in info:
- mapping = np.array(info['values'])
- new[col] = mapping[df[col].values]
- else:
- new[col] = df[col] + info['min']
-
- #if 'max' in info:
- # new[col] = np.minimum(new[col], info['max'])
- #if 'min' in info:
- # new[col] = np.maximum(new[col], info['min'])
-
- dtypes = { col : schema[col]['dtype'] for col in schema }
-
- return new.astype(dtypes)
-
-
-def score(real, synth):
- # Replicate the NIST scoring metric
- # Calculates score for *every* 2-way marginal instead of a sample of them
- # performs scoring using the mbi.Dataset representation, which is different from raw data format
- # scores should match exactly
- # to score raw dataset, call score(discretize(real, schema), discretize(synth, schema))
- assert real.domain == synth.domain
- dom = real.domain
- proj = ('pickup_community_area','shift')
- newdom = dom.project(dom.invert(proj))
- keys = dom.project(proj)
- pairs = list(itertools.combinations(newdom.attrs, 2))
-
- idx = np.argsort(real.project('pickup_community_area').datavector())
-
- overall = 0
- breakdown = {}
- breakdown2 = np.zeros(dom.size('pickup_community_area'))
-
- for pair in pairs:
- #print(pair)
- proj = ('pickup_community_area','shift') + pair
- X = real.project(proj).datavector(flatten=False)
- Y = synth.project(proj).datavector(flatten=False)
- X /= X.sum(axis=(2,3), keepdims=True)
- Y /= Y.sum(axis=(2,3), keepdims=True)
-
- err = np.nan_to_num( np.abs(X-Y).sum(axis=(2,3)), nan=2.0)
- breakdown[pair] = err.mean()
- breakdown2 += err.mean(axis=1)
- overall += err.mean()
-
- score = overall / len(pairs)
-
- nist_score = ((2.0 - score) / 2.0) * 1_000
- breakdown2 /= len(pairs)
-
- return nist_score, pd.Series(breakdown), (2.0 - breakdown2[idx]) / 2.0
-
diff --git a/examples/bayesnet/bayesnet.ipynb b/examples/bayesnet/bayesnet.ipynb
deleted file mode 100644
index 7aa3655..0000000
--- a/examples/bayesnet/bayesnet.ipynb
+++ /dev/null
@@ -1,1484 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "c68aab23",
- "metadata": {},
- "outputs": [],
- "source": [
- "import itertools\n",
- "import functools\n",
- "\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "\n",
- "import networkx as nx\n",
- "import pydot\n",
- "from networkx.drawing.nx_pydot import graphviz_layout\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "from tqdm import tqdm\n",
- "\n",
- "import sdnist"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "7b6eff8c",
- "metadata": {},
- "source": [
- "## 1. Load both the public & the private dataset"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "78af8a1e",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 88.0 | \n",
- " 1 | \n",
- " 61.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 118 | \n",
- " 902 | \n",
- " 909 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 61.0 | \n",
- " 1 | \n",
- " 85.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 18000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 18000 | \n",
- " 262 | \n",
- " 732 | \n",
- " 744 | \n",
- " 33 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 54.0 | \n",
- " 1 | \n",
- " 54.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 118 | \n",
- " 642 | \n",
- " 654 | \n",
- " 401 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 106.0 | \n",
- " 1 | \n",
- " 69.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3800 | \n",
- " 3800 | \n",
- " 0 | \n",
- " 0 | \n",
- " 3800 | \n",
- " 262 | \n",
- " 0 | \n",
- " 0 | \n",
- " 470 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 31.0 | \n",
- " 1 | \n",
- " 56.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 501 | \n",
- " 0 | \n",
- " 0 | \n",
- " 702 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1035196 | \n",
- " 39-4300 | \n",
- " 2018 | \n",
- " 103.0 | \n",
- " 1 | \n",
- " 90.0 | \n",
- " 2 | \n",
- " 37 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 36000 | \n",
- " 36000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 36000 | \n",
- " 231 | \n",
- " 1605 | \n",
- " 1624 | \n",
- " 556291 | \n",
- "
\n",
- " \n",
- " 1035197 | \n",
- " 39-4106 | \n",
- " 2018 | \n",
- " 207.0 | \n",
- " 1 | \n",
- " 207.0 | \n",
- " 2 | \n",
- " 41 | \n",
- " 6 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 52800 | \n",
- " 52000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 52000 | \n",
- " 361 | \n",
- " 1005 | \n",
- " 1019 | \n",
- " 1139708 | \n",
- "
\n",
- " \n",
- " 1035198 | \n",
- " 17-2200 | \n",
- " 2018 | \n",
- " 73.0 | \n",
- " 1 | \n",
- " 58.0 | \n",
- " 2 | \n",
- " 46 | \n",
- " 4 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 2 | \n",
- " 25800 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 200 | \n",
- " 0 | \n",
- " 0 | \n",
- " 346052 | \n",
- "
\n",
- " \n",
- " 1035199 | \n",
- " 17-2300 | \n",
- " 2018 | \n",
- " 47.0 | \n",
- " 1 | \n",
- " 47.0 | \n",
- " 2 | \n",
- " 46 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 5000 | \n",
- " 5000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 5000 | \n",
- " 399 | \n",
- " 732 | \n",
- " 754 | \n",
- " 40265 | \n",
- "
\n",
- " \n",
- " 1035200 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 86.0 | \n",
- " 1 | \n",
- " 86.0 | \n",
- " 2 | \n",
- " 75 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 9600 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 501 | \n",
- " 0 | \n",
- " 0 | \n",
- " 811103 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1035201 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "0 17-1001 2012 88.0 1 61.0 1 21 6 1 0 ... \n",
- "1 17-1001 2012 61.0 1 85.0 1 21 6 1 0 ... \n",
- "2 17-1001 2012 54.0 1 54.0 1 21 6 1 0 ... \n",
- "3 17-1001 2012 106.0 1 69.0 1 21 6 1 0 ... \n",
- "4 17-1001 2012 31.0 1 56.0 1 21 6 1 0 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "1035196 39-4300 2018 103.0 1 90.0 2 37 1 9 0 ... \n",
- "1035197 39-4106 2018 207.0 1 207.0 2 41 6 9 0 ... \n",
- "1035198 17-2200 2018 73.0 1 58.0 2 46 4 9 0 ... \n",
- "1035199 17-2300 2018 47.0 1 47.0 2 46 1 9 0 ... \n",
- "1035200 39-910 2018 86.0 1 86.0 2 75 1 9 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "0 3 14000 14000 0 0 14000 118 \n",
- "1 3 18000 0 0 0 18000 262 \n",
- "2 3 14000 14000 0 0 14000 118 \n",
- "3 3 3800 3800 0 0 3800 262 \n",
- "4 3 14000 14000 0 0 14000 501 \n",
- "... ... ... ... ... ... ... ... \n",
- "1035196 3 36000 36000 0 0 36000 231 \n",
- "1035197 3 52800 52000 0 0 52000 361 \n",
- "1035198 2 25800 0 0 0 0 200 \n",
- "1035199 3 5000 5000 0 0 5000 399 \n",
- "1035200 1 9600 0 0 0 0 501 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "0 902 909 12 \n",
- "1 732 744 33 \n",
- "2 642 654 401 \n",
- "3 0 0 470 \n",
- "4 0 0 702 \n",
- "... ... ... ... \n",
- "1035196 1605 1624 556291 \n",
- "1035197 1005 1019 1139708 \n",
- "1035198 0 0 346052 \n",
- "1035199 732 754 40265 \n",
- "1035200 0 0 811103 \n",
- "\n",
- "[1035201 rows x 36 columns]"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "public, public_schema = sdnist.census(public=True)\n",
- "private, private_schema = sdnist.census(public=False)\n",
- "public"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "f3c1f7ee",
- "metadata": {},
- "outputs": [],
- "source": [
- "BINS = sdnist.kmarginal.CensusKMarginalScore.BINS\n",
- "\n",
- "public_bin = sdnist.utils.discretize(public, public_schema, BINS)\n",
- "private_bin = sdnist.utils.discretize(private, private_schema, BINS)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c577a79b",
- "metadata": {},
- "source": [
- "## 2. First order bayesian network ($k=1$)\n",
- "\n",
- "As described in *PrivBayes: Private Data Release via Bayesian Networks* (http://dimacs.rutgers.edu/~graham/pubs/papers/PrivBayes.pdf), except that we compute the tree structure on a public dataset.\n",
- "\n",
- "\n",
- "### 2.1 Building the Chow-Liu tree structure from the public dataset\n",
- "\n",
- "We represent the joint distribution as a first order bayesian network. The dependency tree is constructed from the public dataset."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "4a0b51af",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 34/34 [00:19<00:00, 1.78it/s]\n"
- ]
- }
- ],
- "source": [
- "COLS = list(public_schema.keys())\n",
- "n = len(public_bin)\n",
- "\n",
- "def mutual_information(df, col_a, col_b):\n",
- " ab = df.groupby([*col_a, col_b]).size().unstack(col_b, fill_value=0).to_numpy() / n\n",
- " a = ab.sum(axis=0, keepdims=True)\n",
- " b = ab.sum(axis=1, keepdims=True)\n",
- " \n",
- " llr = np.zeros_like(ab)\n",
- " np.log(ab / (a * b), where=ab > 0, out=llr)\n",
- " return np.sum(ab * llr)\n",
- "\n",
- "def greedy_bayes(df, root: str = \"PUMA\", order=1):\n",
- " # Graph : for vizualization purposes\n",
- " graph = nx.DiGraph()\n",
- " graph.add_node(root)\n",
- " \n",
- " # Conditional distribution in topological order\n",
- " cond = [(root,)]\n",
- "\n",
- " # Greedy algorithm\n",
- " remaining = set(COLS)\n",
- " remaining.remove(root)\n",
- " \n",
- " mutual_information_memoize = functools.cache(functools.partial(mutual_information, df))\n",
- " \n",
- " for i in tqdm(range(len(COLS)-1)):\n",
- " max_col = None\n",
- " max_parents = None\n",
- " max_mi = 0\n",
- " \n",
- " for col in remaining:\n",
- " for parents in itertools.combinations(graph.nodes, r=min(len(graph.nodes), order)):\n",
- " mi = mutual_information_memoize(parents, col)\n",
- " \n",
- " if mi > max_mi:\n",
- " max_mi = mi\n",
- " max_col = col\n",
- " max_parents = parents\n",
- " \n",
- " graph.add_node(max_col)\n",
- " graph.add_edges_from(((p, max_col) for p in max_parents), weight=max_mi)\n",
- " \n",
- " cond.append((*max_parents, max_col))\n",
- " \n",
- " remaining.remove(max_col) \n",
- " \n",
- " return graph, cond\n",
- " \n",
- "graph, cond = greedy_bayes(public, order=1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "de465b99",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Text(0.5, 1.0, 'First order bayesian network over the public dataset')"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(dpi=100)\n",
- "pos = graphviz_layout(graph, prog=\"neato\")\n",
- "width = [w ** .5 * 2 for w in nx.get_edge_attributes(graph, \"weight\").values()]\n",
- "nx.draw(graph, pos=pos, with_labels=True, font_size=8, width=width, edge_color=\"grey\")\n",
- "plt.title(\"First order bayesian network over the public dataset\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "5768ba16",
- "metadata": {},
- "source": [
- "### 2.2 Computing the conditional distributions from the private dataset\n",
- "\n",
- "We compute the conditional distribution on the private dataset using noisy histograms, for each edge of the tree and starting from the root column (PUMA)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "3dc8d6ea",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 34/34 [00:01<00:00, 29.55it/s]\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "eps = 1\n",
- "noise_scale = len(COLS) / (n * eps) * 7 # 7 accounts for repeated rows\n",
- "\n",
- "def compute_marginal_distribution(df, column, noise_scale: float = 0):\n",
- " marginal = df.groupby(column).size() / n\n",
- " # Only place where the data is accessed\n",
- " if noise_scale > 0:\n",
- " marginal += np.random.laplace(scale=noise_scale, size=marginal.size)\n",
- " marginal = marginal.clip(lower=0)\n",
- " return marginal / marginal.sum(axis=0)\n",
- "\n",
- "def compute_conditional_distribution(df, column, parents, noise_scale: float = 0):\n",
- " joint = (df.groupby([column] + parents).size() / n)\n",
- " joint = joint.unstack(column, fill_value=0)\n",
- "\n",
- " # Only place where the data is accessed\n",
- " if noise_scale > 0:\n",
- " joint += np.random.laplace(scale=noise_scale, size=joint.shape)\n",
- " joint = joint.clip(lower=0)\n",
- " \n",
- " return joint.div(joint.sum(axis=1), axis=\"rows\")\n",
- "\n",
- "def compute_bayesnet(df, cond, noise_scale: float = noise_scale):\n",
- " bayesnet = {}\n",
- " \n",
- " node = cond[0]\n",
- " *parents, root = node\n",
- " \n",
- " bayesnet[node] = compute_marginal_distribution(df, root, noise_scale)\n",
- " \n",
- " \n",
- " for node in tqdm(cond[1:]):\n",
- " *parents, column = node\n",
- " bayesnet[node] = compute_conditional_distribution(df, column, parents, noise_scale)\n",
- " \n",
- " return bayesnet\n",
- " \n",
- "bayesnet = compute_bayesnet(private_bin, cond, noise_scale=noise_scale)\n",
- "\n",
- "# Example: marital status as a function of the age\n",
- "plt.imshow(bayesnet[(\"AGE\", \"MARST\")].to_numpy())\n",
- "plt.xlabel(\"MARST\")\n",
- "plt.ylabel(\"AGE (binned)\")\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "dfc0f576",
- "metadata": {},
- "source": [
- "For instance, we plotted the marital status distribution as a function of the age.\n",
- "\n",
- "### 2.3 Generating sample from the estimated joint probability distribution"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "0b172932",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 34/34 [00:07<00:00, 4.39it/s]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 64 | \n",
- " 0 | \n",
- " 8 | \n",
- " 1 | \n",
- " 11 | \n",
- " 0 | \n",
- " 9 | \n",
- " 0 | \n",
- " 5 | \n",
- " 4 | \n",
- " ... | \n",
- " 3 | \n",
- " 19 | \n",
- " 19 | \n",
- " 1 | \n",
- " 1 | \n",
- " 19 | \n",
- " 26 | \n",
- " 18 | \n",
- " 89 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 150 | \n",
- " 0 | \n",
- " 15 | \n",
- " 1 | \n",
- " 26 | \n",
- " 1 | \n",
- " 13 | \n",
- " 4 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 5 | \n",
- " 6 | \n",
- " 45 | \n",
- " 54 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 175 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " 8 | \n",
- " 3 | \n",
- " 8 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 8 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- " 8 | \n",
- " 17 | \n",
- " 41 | \n",
- " 41 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 21 | \n",
- " 0 | \n",
- " 7 | \n",
- " 1 | \n",
- " 14 | \n",
- " 1 | \n",
- " 11 | \n",
- " 4 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 5 | \n",
- " 16 | \n",
- " 30 | \n",
- " 31 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 114 | \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 10 | \n",
- " 0 | \n",
- " 3 | \n",
- " 4 | \n",
- " ... | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 14 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1348359 | \n",
- " 116 | \n",
- " 1 | \n",
- " 9 | \n",
- " 1 | \n",
- " 6 | \n",
- " 0 | \n",
- " 7 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 5 | \n",
- " 7 | \n",
- " 17 | \n",
- " 19 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348360 | \n",
- " 29 | \n",
- " 0 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 0 | \n",
- " 8 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 8 | \n",
- " 8 | \n",
- " 1 | \n",
- " 1 | \n",
- " 8 | \n",
- " 18 | \n",
- " 29 | \n",
- " 33 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348361 | \n",
- " 54 | \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 9 | \n",
- " 9 | \n",
- " 1 | \n",
- " 1 | \n",
- " 9 | \n",
- " 26 | \n",
- " 56 | \n",
- " 75 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348362 | \n",
- " 164 | \n",
- " 0 | \n",
- " 5 | \n",
- " 1 | \n",
- " 5 | \n",
- " 0 | \n",
- " 2 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348363 | \n",
- " 30 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 0 | \n",
- " 2 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 8 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 19 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1348364 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "0 64 0 8 1 11 0 9 0 5 4 ... \n",
- "1 150 0 15 1 26 1 13 4 0 0 ... \n",
- "2 175 2 8 1 9 0 8 3 8 0 ... \n",
- "3 21 0 7 1 14 1 11 4 0 0 ... \n",
- "4 114 3 2 1 2 0 10 0 3 4 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "1348359 116 1 9 1 6 0 7 5 0 0 ... \n",
- "1348360 29 0 3 1 3 0 8 0 0 0 ... \n",
- "1348361 54 4 3 1 3 1 5 0 0 0 ... \n",
- "1348362 164 0 5 1 5 0 2 5 0 0 ... \n",
- "1348363 30 2 3 1 3 0 2 5 0 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "0 3 19 19 1 1 19 26 \n",
- "1 3 5 1 1 1 5 6 \n",
- "2 3 8 4 1 1 8 17 \n",
- "3 3 5 5 1 1 5 16 \n",
- "4 3 6 1 1 1 1 14 \n",
- "... ... ... ... ... ... ... ... \n",
- "1348359 3 5 5 1 1 5 7 \n",
- "1348360 3 8 8 1 1 8 18 \n",
- "1348361 3 9 9 1 1 9 26 \n",
- "1348362 1 3 1 1 1 1 6 \n",
- "1348363 1 8 1 1 1 1 19 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "0 18 89 0 \n",
- "1 45 54 0 \n",
- "2 41 41 0 \n",
- "3 30 31 0 \n",
- "4 1 1 0 \n",
- "... ... ... ... \n",
- "1348359 17 19 0 \n",
- "1348360 29 33 0 \n",
- "1348361 56 75 0 \n",
- "1348362 1 1 0 \n",
- "1348363 1 1 0 \n",
- "\n",
- "[1348364 rows x 36 columns]"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "def generate_sample(columns, cond, bayesnet, size=10):\n",
- " synthetic = pd.DataFrame(0, columns=columns, index=np.arange(size))\n",
- " \n",
- " # Sample the first column as i.i.d variables on the root node.\n",
- " node = cond[0]\n",
- " *parents, root = node\n",
- " dist = bayesnet[node]\n",
- " synthetic[root] = dist.index[np.random.choice(a=len(dist), size=size, replace=True, p=dist.to_numpy())]\n",
- " \n",
- " # Conditional distributions\n",
- " for node in tqdm(cond[1:]):\n",
- " *parents, column = node\n",
- " dist = bayesnet[node]\n",
- "\n",
- " if len(parents) == 1:\n",
- " cumsum = dist.loc[synthetic[parents[0]]].to_numpy().cumsum(axis=1)\n",
- " else:\n",
- " raise NotImplementedError\n",
- " \n",
- " u = np.random.rand(size)\n",
- " k = (u[:, None] > cumsum).sum(axis=1)\n",
- " synthetic[column] = dist.columns[k]\n",
- " \n",
- " return synthetic\n",
- "\n",
- "synthetic_bin = generate_sample(public_bin.columns, cond, bayesnet, size=len(private))\n",
- "\n",
- "# Display the synthetic dataset\n",
- "synthetic_bin"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "d2855d57",
- "metadata": {},
- "source": [
- "### 2.4 Compute the final score"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "817bd734",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 36-3304 | \n",
- " 2012 | \n",
- " 140.0 | \n",
- " 1 | \n",
- " 200.0 | \n",
- " 1 | \n",
- " 60.0 | \n",
- " 1 | \n",
- " 6 | \n",
- " 4 | \n",
- " ... | \n",
- " 3 | \n",
- " 90000.0 | \n",
- " 90000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 90000.0 | \n",
- " 500.0 | \n",
- " 415.0 | \n",
- " 2200.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 42-1300 | \n",
- " 2012 | \n",
- " 280.0 | \n",
- " 1 | \n",
- " 500.0 | \n",
- " 2 | \n",
- " 80.0 | \n",
- " 5 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 20000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 20000.0 | \n",
- " 100.0 | \n",
- " 1100.0 | \n",
- " 1315.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 42-2500 | \n",
- " 2014 | \n",
- " 140.0 | \n",
- " 1 | \n",
- " 160.0 | \n",
- " 1 | \n",
- " 55.0 | \n",
- " 4 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 35000.0 | \n",
- " 15000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 35000.0 | \n",
- " 320.0 | \n",
- " 1000.0 | \n",
- " 1000.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 36-2002 | \n",
- " 2012 | \n",
- " 120.0 | \n",
- " 1 | \n",
- " 260.0 | \n",
- " 2 | \n",
- " 70.0 | \n",
- " 5 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 20000.0 | \n",
- " 20000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 20000.0 | \n",
- " 300.0 | \n",
- " 715.0 | \n",
- " 730.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 36-4017 | \n",
- " 2015 | \n",
- " 20.0 | \n",
- " 1 | \n",
- " 20.0 | \n",
- " 1 | \n",
- " 65.0 | \n",
- " 1 | \n",
- " 4 | \n",
- " 4 | \n",
- " ... | \n",
- " 3 | \n",
- " 25000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 260.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1348359 | \n",
- " 36-402 | \n",
- " 2013 | \n",
- " 160.0 | \n",
- " 1 | \n",
- " 100.0 | \n",
- " 1 | \n",
- " 50.0 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 20000.0 | \n",
- " 20000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 20000.0 | \n",
- " 120.0 | \n",
- " 400.0 | \n",
- " 430.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348360 | \n",
- " 36-2500 | \n",
- " 2012 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 55.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 35000.0 | \n",
- " 35000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 35000.0 | \n",
- " 340.0 | \n",
- " 700.0 | \n",
- " 800.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348361 | \n",
- " 36-3206 | \n",
- " 2016 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 40.0 | \n",
- " 2 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 40000.0 | \n",
- " 40000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 40000.0 | \n",
- " 500.0 | \n",
- " 1345.0 | \n",
- " 1830.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348362 | \n",
- " 42-1900 | \n",
- " 2012 | \n",
- " 80.0 | \n",
- " 1 | \n",
- " 80.0 | \n",
- " 1 | \n",
- " 25.0 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 10000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 100.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1348363 | \n",
- " 36-2600 | \n",
- " 2014 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 25.0 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 35000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 360.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1348364 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "0 36-3304 2012 140.0 1 200.0 1 60.0 1 6 4 ... \n",
- "1 42-1300 2012 280.0 1 500.0 2 80.0 5 1 0 ... \n",
- "2 42-2500 2014 140.0 1 160.0 1 55.0 4 9 0 ... \n",
- "3 36-2002 2012 120.0 1 260.0 2 70.0 5 1 0 ... \n",
- "4 36-4017 2015 20.0 1 20.0 1 65.0 1 4 4 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "1348359 36-402 2013 160.0 1 100.0 1 50.0 6 1 0 ... \n",
- "1348360 36-2500 2012 40.0 1 40.0 1 55.0 1 1 0 ... \n",
- "1348361 36-3206 2016 40.0 1 40.0 2 40.0 1 1 0 ... \n",
- "1348362 42-1900 2012 80.0 1 80.0 1 25.0 6 1 0 ... \n",
- "1348363 36-2600 2014 40.0 1 40.0 1 25.0 6 1 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "0 3 90000.0 90000.0 0.0 0.0 90000.0 500.0 \n",
- "1 3 20000.0 0.0 0.0 0.0 20000.0 100.0 \n",
- "2 3 35000.0 15000.0 0.0 0.0 35000.0 320.0 \n",
- "3 3 20000.0 20000.0 0.0 0.0 20000.0 300.0 \n",
- "4 3 25000.0 0.0 0.0 0.0 0.0 260.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "1348359 3 20000.0 20000.0 0.0 0.0 20000.0 120.0 \n",
- "1348360 3 35000.0 35000.0 0.0 0.0 35000.0 340.0 \n",
- "1348361 3 40000.0 40000.0 0.0 0.0 40000.0 500.0 \n",
- "1348362 1 10000.0 0.0 0.0 0.0 0.0 100.0 \n",
- "1348363 1 35000.0 0.0 0.0 0.0 0.0 360.0 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "0 415.0 2200.0 0 \n",
- "1 1100.0 1315.0 0 \n",
- "2 1000.0 1000.0 0 \n",
- "3 715.0 730.0 0 \n",
- "4 0.0 0.0 0 \n",
- "... ... ... ... \n",
- "1348359 400.0 430.0 0 \n",
- "1348360 700.0 800.0 0 \n",
- "1348361 1345.0 1830.0 0 \n",
- "1348362 0.0 0.0 0 \n",
- "1348363 0.0 0.0 0 \n",
- "\n",
- "[1348364 rows x 36 columns]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Unbin data\n",
- "synthetic = sdnist.utils.undo_discretize(synthetic_bin, private_schema, BINS)\n",
- "synthetic"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "6eac1e6d",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [00:10<00:00, 4.78it/s]\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Compute score\n",
- "score = sdnist.score(private, synthetic, schema=private_schema, challenge=\"census\")\n",
- "\n",
- "plt.figure(figsize=(6, 2))\n",
- "score.boxplot()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "3eec75b9",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/bayesnet/longitudinal_bayesnet.ipynb b/examples/bayesnet/longitudinal_bayesnet.ipynb
deleted file mode 100644
index 23611ed..0000000
--- a/examples/bayesnet/longitudinal_bayesnet.ipynb
+++ /dev/null
@@ -1,1221 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "1064cd81",
- "metadata": {},
- "outputs": [],
- "source": [
- "import itertools\n",
- "import functools\n",
- "\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "\n",
- "import networkx as nx\n",
- "import pydot\n",
- "from networkx.drawing.nx_pydot import graphviz_layout\n",
- "import matplotlib.pyplot as plt\n",
- "import matplotlib.colors as mcolors\n",
- "\n",
- "from tqdm import tqdm\n",
- "\n",
- "import sdnist"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "efb27cb3",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import importlib\n",
- "importlib.reload(sdnist)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1f29c592",
- "metadata": {},
- "source": [
- "## 1. Load both the public & the private dataset"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "8391a015",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 88.0 | \n",
- " 1 | \n",
- " 61.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 118 | \n",
- " 902 | \n",
- " 909 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 61.0 | \n",
- " 1 | \n",
- " 85.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 18000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 18000 | \n",
- " 262 | \n",
- " 732 | \n",
- " 744 | \n",
- " 33 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 54.0 | \n",
- " 1 | \n",
- " 54.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 118 | \n",
- " 642 | \n",
- " 654 | \n",
- " 401 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 106.0 | \n",
- " 1 | \n",
- " 69.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3800 | \n",
- " 3800 | \n",
- " 0 | \n",
- " 0 | \n",
- " 3800 | \n",
- " 262 | \n",
- " 0 | \n",
- " 0 | \n",
- " 470 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 31.0 | \n",
- " 1 | \n",
- " 56.0 | \n",
- " 1 | \n",
- " 21 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 14000 | \n",
- " 14000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 14000 | \n",
- " 501 | \n",
- " 0 | \n",
- " 0 | \n",
- " 702 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1035196 | \n",
- " 39-4300 | \n",
- " 2018 | \n",
- " 103.0 | \n",
- " 1 | \n",
- " 90.0 | \n",
- " 2 | \n",
- " 37 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 36000 | \n",
- " 36000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 36000 | \n",
- " 231 | \n",
- " 1605 | \n",
- " 1624 | \n",
- " 556291 | \n",
- "
\n",
- " \n",
- " 1035197 | \n",
- " 39-4106 | \n",
- " 2018 | \n",
- " 207.0 | \n",
- " 1 | \n",
- " 207.0 | \n",
- " 2 | \n",
- " 41 | \n",
- " 6 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 52800 | \n",
- " 52000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 52000 | \n",
- " 361 | \n",
- " 1005 | \n",
- " 1019 | \n",
- " 1139708 | \n",
- "
\n",
- " \n",
- " 1035198 | \n",
- " 17-2200 | \n",
- " 2018 | \n",
- " 73.0 | \n",
- " 1 | \n",
- " 58.0 | \n",
- " 2 | \n",
- " 46 | \n",
- " 4 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 2 | \n",
- " 25800 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 200 | \n",
- " 0 | \n",
- " 0 | \n",
- " 346052 | \n",
- "
\n",
- " \n",
- " 1035199 | \n",
- " 17-2300 | \n",
- " 2018 | \n",
- " 47.0 | \n",
- " 1 | \n",
- " 47.0 | \n",
- " 2 | \n",
- " 46 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 5000 | \n",
- " 5000 | \n",
- " 0 | \n",
- " 0 | \n",
- " 5000 | \n",
- " 399 | \n",
- " 732 | \n",
- " 754 | \n",
- " 40265 | \n",
- "
\n",
- " \n",
- " 1035200 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 86.0 | \n",
- " 1 | \n",
- " 86.0 | \n",
- " 2 | \n",
- " 75 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 9600 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 501 | \n",
- " 0 | \n",
- " 0 | \n",
- " 811103 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1035201 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "0 17-1001 2012 88.0 1 61.0 1 21 6 1 0 ... \n",
- "1 17-1001 2012 61.0 1 85.0 1 21 6 1 0 ... \n",
- "2 17-1001 2012 54.0 1 54.0 1 21 6 1 0 ... \n",
- "3 17-1001 2012 106.0 1 69.0 1 21 6 1 0 ... \n",
- "4 17-1001 2012 31.0 1 56.0 1 21 6 1 0 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "1035196 39-4300 2018 103.0 1 90.0 2 37 1 9 0 ... \n",
- "1035197 39-4106 2018 207.0 1 207.0 2 41 6 9 0 ... \n",
- "1035198 17-2200 2018 73.0 1 58.0 2 46 4 9 0 ... \n",
- "1035199 17-2300 2018 47.0 1 47.0 2 46 1 9 0 ... \n",
- "1035200 39-910 2018 86.0 1 86.0 2 75 1 9 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "0 3 14000 14000 0 0 14000 118 \n",
- "1 3 18000 0 0 0 18000 262 \n",
- "2 3 14000 14000 0 0 14000 118 \n",
- "3 3 3800 3800 0 0 3800 262 \n",
- "4 3 14000 14000 0 0 14000 501 \n",
- "... ... ... ... ... ... ... ... \n",
- "1035196 3 36000 36000 0 0 36000 231 \n",
- "1035197 3 52800 52000 0 0 52000 361 \n",
- "1035198 2 25800 0 0 0 0 200 \n",
- "1035199 3 5000 5000 0 0 5000 399 \n",
- "1035200 1 9600 0 0 0 0 501 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "0 902 909 12 \n",
- "1 732 744 33 \n",
- "2 642 654 401 \n",
- "3 0 0 470 \n",
- "4 0 0 702 \n",
- "... ... ... ... \n",
- "1035196 1605 1624 556291 \n",
- "1035197 1005 1019 1139708 \n",
- "1035198 0 0 346052 \n",
- "1035199 732 754 40265 \n",
- "1035200 0 0 811103 \n",
- "\n",
- "[1035201 rows x 36 columns]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "public, schema = sdnist.census(public=True)\n",
- "\n",
- "public"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "58a5e3cd",
- "metadata": {},
- "source": [
- "## 2. Subsampling \n",
- "\n",
- "As a warm-up, we compute the score of subsampled dataset.\n",
- "\n",
- "### 2.1 Naive subsampling"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "c4b385b7",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- " 8%|███▌ | 25/300 [00:00<00:02, 116.53it/s]/opt/homebrew/Caskroom/miniforge/base/envs/py39/lib/python3.9/site-packages/pandas/core/indexes/multi.py:3554: RuntimeWarning: The values in the array are unorderable. Pass `sort=False` to suppress this warning.\n",
- " result = lib.fast_unique_multiple([self._values, rvals], sort=sort)\n",
- "100%|██████████████████████████████████████████| 300/300 [00:02<00:00, 104.17it/s]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "135.37621976379612"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Randomly select rows\n",
- "synthetic = public.sample(frac=0.02)\n",
- "\n",
- "# Compute longitudinal score\n",
- "score = sdnist.kmarginal.CensusLongitudinalKMarginalScore(public, synthetic)\n",
- "score.compute_score()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "04c67f01",
- "metadata": {},
- "source": [
- "### 2.2 User-level subsampling"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "5f9900a5",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████████████████████████████████████| 300/300 [00:02<00:00, 104.15it/s]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "948.6686829496338"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Build flat dataset\n",
- "public_flat = sdnist.utils.unstack(public)\n",
- "\n",
- "# Randomly sample individuals\n",
- "synthetic_flat = public_flat.sample(frac=0.1)\n",
- "\n",
- "# Reset into original format\n",
- "synthetic = sdnist.utils.stack(synthetic_flat)\n",
- "\n",
- "# Compute score\n",
- "score = sdnist.kmarginal.CensusLongitudinalKMarginalScore(public, synthetic)\n",
- "score.compute_score()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "16cfe8f4",
- "metadata": {},
- "source": [
- "## 3. First order bayesian network ($k=1$)\n",
- "\n",
- "As described in *PrivBayes: Private Data Release via Bayesian Networks* (http://dimacs.rutgers.edu/~graham/pubs/papers/PrivBayes.pdf), except that we compute the tree structure on a public dataset.\n",
- "\n",
- "\n",
- "### 3.1 Building the Chow-Liu tree structure from the public dataset\n",
- "\n",
- "We represent the joint distribution as a first order bayesian network. The dependency tree is constructed from the public dataset.\n",
- "\n",
- "We only allow a column to depend on the current or the previous year."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "5502e6cb",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|███████████████████████████████████████████| 237/237 [00:44<00:00, 5.30it/s]\n"
- ]
- }
- ],
- "source": [
- "public_bin = sdnist.utils.discretize(public, sdnist.kmarginal.CensusKMarginalScore.BINS)\n",
- "public_flat = sdnist.utils.unstack(public_bin)\n",
- "n = len(public_flat)\n",
- "\n",
- "def mutual_information(df, col_a, col_b):\n",
- " ab = df.groupby([*col_a, col_b]).size().unstack(col_b, fill_value=0).to_numpy() / n\n",
- " a = ab.sum(axis=0, keepdims=True)\n",
- " b = ab.sum(axis=1, keepdims=True)\n",
- " \n",
- " llr = np.zeros_like(ab)\n",
- " np.log(ab / (a * b), where=ab > 0, out=llr)\n",
- " return np.sum(ab * llr)\n",
- "\n",
- "def greedy_bayes(df, root = (\"PUMA\", 2012), order=1):\n",
- " # Graph : for vizualization purposes\n",
- " graph = nx.DiGraph()\n",
- " graph.add_node(root)\n",
- " \n",
- " # Conditional distribution in topological order\n",
- " cond = [(root,)]\n",
- "\n",
- " # Greedy algorithm\n",
- " remaining = list(sorted(df.columns, key=lambda c: c[1]))\n",
- " remaining.remove(root)\n",
- " \n",
- " mutual_information_memoize = functools.cache(functools.partial(mutual_information, df))\n",
- " \n",
- " for i in tqdm(range(len(df.columns)-1)):\n",
- " max_col = None\n",
- " max_parents = None\n",
- " max_mi = 0\n",
- " \n",
- " for col in remaining:\n",
- " # col[1] : YEAR\n",
- " if col[1] != remaining[0][1]:\n",
- " continue\n",
- " \n",
- " for parents in itertools.combinations(graph.nodes, r=min(len(graph.nodes), order)):\n",
- " if parents[0][1] < col[1] - 1:\n",
- " continue\n",
- " \n",
- " mi = mutual_information_memoize(parents, col)\n",
- " \n",
- " if mi > max_mi:\n",
- " max_mi = mi\n",
- " max_col = col\n",
- " max_parents = parents\n",
- " \n",
- " graph.add_node(max_col)\n",
- " graph.add_edges_from(((p, max_col) for p in max_parents), weight=max_mi)\n",
- " \n",
- " cond.append((*max_parents, max_col))\n",
- " \n",
- " remaining.remove(max_col) \n",
- " \n",
- " return graph, cond\n",
- " \n",
- "graph, cond = greedy_bayes(public_flat, order=1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "d7de594a",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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4Ep25hzgzvce52DhcT49tLqxhtlmYf78+bzyyise7VtERK48CtdERERERLqQ6667jnfffbdxqWZhYSFHajJbdO/u3EOsSd/KD0bf2aLxFj8bVquVu+66i9dff73NPZ+PLdLe7Fp6STZuww1AuF9I49en9lx7a+5z9AztxrqMbSy+62Xenvt7/nPHi6w4tqGxhjXczt13382///1vHA7HReldRESuDDrQQERERESkCwkNDeV3v/sdt956Ky6XC5vNxox+k+HIhe/9/dpXKakuZd67P2q89ptpjwENy0L/uvldAB4cfQc+3t6Y/W0AzJ8/n1/+8pcefy8AXvEBza5tOLGDHyz5BXarDzaLlednPtlsTFpxJgHefphNDfMNvK1emEymxqWhXrH+eHt7M2fOHF5++eVm94uIiJxiMgyj5RssiIiIiIjIFcdZXEvuc1vAg58MfIdFETqnt+cKnoO7zkXO/27CqHN5rKbJbiXmpyMxe1k8VlNERK5cWhYqIiIiItLFWUN98EkJ81xBE/iPjb3wOA8we1vwGxbl0Zp+w6IUrImISIspXBMREREREYJv6InJ2zOBkv/YWLzi/D1SqyUCruqG2c8zO96Y/W0ETOnmkVoiItI1KFwTERERERGswT6E3NSr3XVsMX4ETk9of0OtYPH3IuSmZI/UCrk5GYufzSO1RESka1C4JiIiIiIiAPgOjiR4dhKY2na/LdqP8O+kdsiSSntqOEGzerarRvCNSdj7eXB5rIiIdAk60EBERERERJqoPVpKyQeHcZXUtfgev9ExBM1IxOyhpaVtVb27gNJFR3FXO1t8j9nXSvBNyfgOCL+InYmIyJVK4ZqIiIiIiDTjrnNRtSmHyk05uIpqzz7IbMKeGob/+Di8uwde2gbPw1VRT/nnGVTvzMdwuM85zmQz4zskksBpPbD4e13CDkVE5EqicE1ERERERM7JcBs4C6qpz6rEWVwLbgOzjxVbrB9e8QGY7Z45SOBicFc7qNlfTH12Bc68agyHG5PNjDXKF6/4AOz9wjp1/yIicnlQuCYiIiIiIiIiItJGOtBARERERERERESkjRSuiYiIiIiIiIiItJHCNRERERERERERkTZSuCYiIiIiIiIiItJGCtdERERERERERETaSOGaiIiIiIiIiIhIGylcExERERERERERaSOFayIiIiIiIiIiIm2kcE1ERERERERERKSNFK6JiIiIiIiIiIi0kcI1ERERERERERGRNlK4JiIiIiIiIiIi0kYK10RERERERERERNpI4ZqIiIiIiIiIiEgbKVwTERERERERERFpI4VrIiIiIiIiIiIibaRwTUREREREREREpI0UromIiIiIiIiIiLSRwjUREREREREREZE2UrgmIiIiIiIiIiLSRgrXRERERERERERE2kjhmoiIiIiIiIiISBspXBMREREREREREWkjhWsiIiIiIiIiIiJtpHBNRERERERERESkjRSuiYiIiIiIiIiItJHCNRERERERERERkTZSuCYiIiIiIiIiItJGCtdERERERERERETaSOGaiIiIiIiIiIhIGylcExERERERERERaSOFayIiIiIiIiIiIm2kcE1ERERERERERKSNFK6JiIiIiIiIiIi0kcI1ERERERERERGRNlK4JiIiIiIiIiIi0kYK10RERERERERERNpI4ZqIiIiIiIiIiEgbKVwTERERERERERFpI4VrIiIiIiIiIiIibaRwTUREREREREREpI0UromIiIiIiIiIiLSRwjUREREREREREZE2UrgmIiIiIiIiIiLSRgrXRERERERERERE2kjhmoiIiIiIiIiISBspXBMREREREREREWkjhWsiIiIiIiIiIiJtpHBNRERERERERESkjRSuiYiIiIiIiIiItJHCNRERERERERERkTZSuCYiIiIiIiIiItJGCtdERERERERERETaSOGaiIiIiIiIiIhIGylcExERERERERERaSOFayIiIiIiIiIiIm2kcE1ERERERERERKSNFK6JiIiIiIiIiIi0kcI1ERERERERERGRNlK4JiIiIiIiIiIi0kYK10RERERERERERNpI4ZqIiIiIiIiIiEgbKVwTERERERERERFpI4VrIiIiIiIiIiIibaRwTUREREREREREpI0UromIiIiIiIiIiLSRwjUREREREREREZE2UrgmIiIiIiIiIiLSRgrXRERERERERERE2kjhmoiIiIiIiIiISBspXBMREREREREREWkjhWsiIiIiIiIiIiJtpHBNRERERERERESkjRSuiYiIiIiIiIiItJHCNRERERERERERkTZSuCYiIiIiIiIiItJGCtdERERERERERETa6P8Dq6c5d8N52AoAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "colors = list(mcolors.TABLEAU_COLORS.values())\n",
- "\n",
- "plt.figure(dpi=200)\n",
- "pos = graphviz_layout(graph, prog=\"neato\")\n",
- "width = [w ** .5 for w in nx.get_edge_attributes(graph, \"weight\").values()]\n",
- "nx.draw(graph, pos=pos, width=width, edge_color=\"grey\", node_color=[colors[n[1]-2012] for n in graph.nodes],\n",
- " node_size=50)\n",
- "nx.draw_networkx_labels(graph, pos, labels={n:n[0] for n in nx.nodes(graph)}, font_size=3);"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "5e15c345",
- "metadata": {},
- "source": [
- "### 3.2 Computing the conditional distributions"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "0ccbbf00",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████████████████████████████████████| 237/237 [00:01<00:00, 204.69it/s]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAD8CAYAAAB3lxGOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACFsklEQVR4nO29e7hlx1Uf+Kt9zr23X3q0npYlWW/JkmxLlm3ZhKcnGINDYiAh2CHEmSExZMyXgQCJmXwZMxkyIRDib4AAEx6xyYDBYDsx4BgcwzBJsC3L6P1oPVqSJVnW+9FSd997z9k1f+xatX+1alXtfW53u4/QXd93v3v23rWrVtWuWrXWr1atct57bNM2bdNLl5rjzcA2bdM2HV/aFgLbtE0vcdoWAtu0TS9x2hYC27RNL3HaFgLbtE0vcdoWAtu0TS9xOmZCwDn3zc65fc65e5xz7z1W5WzTNm3TkZE7Fn4CzrkJgLsAvAXAQwA+D+Cd3vvbj3ph27RN23REdKw0gWsB3OO93++93wDwWwDefozK2qZt2qYjoOkxyvdsAA/S9UMA3lhKvOPkHX7t8F749fVjxM42bdM2HcDTT3jvT9f3j5UQcMa9xO5wzr0bwLsBYMf0RPyNP3srbvy/X4NTf/3z8K0HfBsSNv1veXcy6TKcz5N7fj7v03sPOJe+r5+VTKHSM+t+LZ9FyIUmK5XLz45WmZw/581lNZNw3Q6XKfk4+vyLtnHpmZX3UBlHm45HvziK9F/87z5g3T9W5sBDAM6l63MAfIkTeO//nff+9d7716/MJrjxl16Dp6/0ePT7ru0SuMCab7vf8hee+dan9ycTwDWdgHBNLwD6AkkYWDIK/bOtfDwrz6FymPQg1MQ8He3OVerYUSBsod28rw9ynd+Q4CjlZbUb8/6VoEX4PVq0SN8aoGMlBD4P4BLn3AXOuVUA7wDw8doLp3zgszhhf4NDZwCH3/Y6uCatiL7W2oFJnEaEAgmS/r7RKa1rTWMbW8pIymry+4t2nNIg2grPtYGTtFtF2I3lgetZ04As3mrC5Uj5GsqnpqUN3RuT/5h0x0C4HRMh4L2fAfgBAH8I4A4AH/be31Z8wQHwHmf8wmdw5udnePBbHJpLLgjPOhZ96ztBICq9U6yTaRCYUGU0uSAZM4h0R9KD2XrXEiwykIQvVq9FgxG+rY9tlqsG5phOr4UPp5cBRnwNCtsjFZTCD6c366/SCZ+LagBD7Voqe5E8S2ZL6d2h/C2qCUJLyFboWGEC8N5/AsAnxqXuZ8Idv38dXnnXRXji/Q1O/c6d8Bsbva0vNJnAOT9KG3CNg5+r69bADSLjbWcHt/ySmqXZTk6EkoE9xPf1dfoRGd8YVH0lD+HR6nQFO1W3R3Em8x4xoZ/bs2HJpKmZLlk+bcq/hdd436cr0diBp8via+kLrZpQ9DWnrfXBGobA5Yf2jbhWCV8YqqPRT7vvLd/Rfm0pPAZdaAA0E8A5zO/ej1P/+oPY99OvxuT00+AmkziLu8bBhYbwbT9jye9Y4TBQO5CxExh+PoefzbqPmnSGtrvXztNOoGdGoXaeayMtfTyfduyIUwiRMHCTSf5cU0kFLsz8brqSz/jOdfdDeW51tfubTADvAw+UT9N/j8SUsmbjwJubFuYUbfLoAa5nc6uzjxKMTcqTFijOdXVKtB1VHy38LY2pmdiCPuTv1tbKWIWUo4Wp931/5rbXdRzCjpgX3S4FWgoh4Ns2XREA0G5s4vKfeAC3/8Q5OPxNr00Gifcefj4Ps7qHn22mQkLUfm0CcCeWzsCDT2ZsvtYfUT4Q0AsD68NI/giCybd5pwr18LNNe7bR5SaNVhYMfnPDFGR+cyNqVn4j/J7NgGbSC08tGKXdgN4c03WVurQ2P4M2vDZBgGRSGK3il2blpM0VyDmkXVgD0LeZoI9p265tk/QlbUvnKxOJTEhDWpduG9bEhBfpexVaCiEAQA2+jq3Zlx/F+b/j8OSrVvDsd17Td0DCB7Sdn3TE7IOH2buZ9M94EJdmiKyxDdV0rCpK9UvuDeXDdRlj+1t5F9MNqdpt1KT6dlMzoHPZt4ikB5w1O6pBWiyLy4x5KEGe8W8NZHWvVH/LZtdpS9e63jUzqURWW415RyaOEXjD8ggBQDVS1zFX//B67HmwxfPnNHjmb16TmADJ+j9rCqRVmLNTqcwabQW8KZWnJfMiQJImVrFH2Y1GPWoDYGxajGhrzrM2E4/RHtKCh/mrDfSt0pBKXuPnaJGVf+wLI1bQsGxCAMiZ9x4nfuiz2PNQi6e+9RAml1wANJ3a7lvfrxqQOVCc2dj3wKIxM6ylTmag3AIzky53yPblWaY4eEd+1pq6afFZyoPV2bFlLDJYtfZTUtNLtFUBG/kZ6SdhvbtVquEBQ+Vy+hGCYGmEQGIDxpv97xN/87O4+H3P48GfXEWza1c0BSIWIPY8A1hiLgTgi7GC6oxoNLZrXL+MJ+8zPpDk09qzkwLqTHvXtB8NQK5Ggj/obDRwp21uc/D1Nnqsf4nXmv2utZUhGtIUSqCdVW4tf762vuXYd4dMhEXJAA7NNDVz0jJlDFoaIeBb34MhPBipUvO79+Oc774f//j6P0Vz4Ss6gGs+D+DgLDURhALqLWl7UGfE0g6DavF9Bm6MwV7qDHoA6EFRGxw1m31s5wDSlRFvtHesPwnJUHasvxZGJUE2RmiVBq7VkUs4iqUhlQRsjaQ9NB88AGvf7ljRGNOo1Nb8jSttsRxCIM7irtzwgdpDh/BTb/sOfPFfruHwt74h6Rwpet2DiF0jqGUSPbsmvAxJ1wrgI9e8RMfvWde1Tiv8WKBYaRasDS4Lca/NNEP5cdqhgVGrK+MZmcBsey2vJlBKPIwZRCV1fhGtZez9MfnoPlbrI5bJpdu6Uo/lEAI1W8eYVeZ33YvTfnUXvvymCZ783mu7wa83FTH6L2Spe7XBV5vRhmY7jWzXZi/5XRqIpcEWZ+uRqqjYiENq5FgqtcfYWdgSxDXNpmDmFN8by8eRDPYhm3yr6beqXdT6W4GWQwiMJarg2h98HifcB7xwlsPT73xDnra0/m+plaM6QKWphjqa1h62MuB0fbhOi1Btxo/XA0AYD/Za2w3Vc8gk05rOkNCszZKLDuBF6FiaA1zGoqbHyLTLJwRKtrNBp/7KZ3DSvS2efttBtK+/3ByoxWWrrQwgsyMZG5GAYVVang192JjG4Hcrna82kyb8534bRRorTMdoPqX0QzQocBawq8fksVUBcjT4qGmvpfKWHhNYlEhVP+k3P4fzfxb4kQ/+BprdO2mJsOvE7MASf5dUJba/M/vSAOcsMEnTomr3GNX+aINRbDfy9my2yUs8lWbsmnljtUnNvBqr2mr7uUaaj63gBkMCfihNia9SGUP2/Zi2MWg5hIAFiPB1yW4MH9J95ia8/6prsev3VjA5+yz1vnIiAnpPqhp4MtaeJPfgHMRp7NleDxIB7EqgXTNJl1AlrV5S1e3G/+X2RJWRAYQ1FV1tKd6KMNID3gLyau+MwR7GfMex35fzlAmiVHddL75/JGVrHjj/ITzLErCKlkMI1CSybmwZBIragwdx6G/twMqvb+Dgt1+bq7B6p6DOmxu19AGrQKDPG9ty9S19PF5u1O0hPuBxSS+k1f7lmh/mS27PZra5VezUrBlUeByiMcLKGuRWnfi6NCiGBMtYAWbxoOuuy7TKGnOvxOcQXyUexwhYLIsQ4DqM0gQM4Mp7zB58CE/+X+fjqcsmeP5vvCFNa81w1VlCA3Fq6ZF5YcE0pnOxoOGBJu9bNGRP16S+pSbXZgreIMPXpbLCu70zlZFvrU30zMoDq4RHaJ5FKzqSAWep3nzf0kCsd2oaQUnA6fctnko0RoOq0HIIAWC8xNaSXyhUdNdHP4eT721x4NwGz/xtpRFYTkKlTlYCxqzZfSt0JO/q9xdVa61rqx20eWAJqqHZtsbHkHYw9n4p7ZG28ZBA1wO9Zs/rfGv3h7SsI62XouURAsDiNmYh7Z4PfxY7H/N48psPYf6mKxd7v7bDT/PIg6Km+tdUsqDuDy6XjaFaOXqWzIRraT+F0oB0nbh4Hd2J0xfLrdjO3K46vVXPkqm1SPuV+C6ZgqX6WbxY5kuNB11+/NOObxVhM2JMLYcQ8Kirs1n6YZXv5P/wGVz4cx5/5Zf+BM2uXXnwDm0mJDOrAr84bkAyyGWvQqGD1OzdUh1KbVCzj0vmQSn9IjRmKbWkug+pzLqtagNI51niQ5sWpXYcKxisQQeMm/W3ijtYxG3TqkhPNa1qBC2FEHBJJzEi2OQvlK/pt/vMTfjDa8/G079zFiYvO7PiM9A3pCwxuulKgshnm4cynkpmhe7YlR2GtWvLtiwJzIgzFNJl5fRt7iaTru7TlXrdTI2n4NGX8N7Ym5EsvnT5tTawovxw+czrWHMjEfYu/3aWa7gufyFhY5TP+dBqUIa/6PJ1PpXNUUshBHyCYhL6vBU1TlF78CBO/d7n8cWfOwkbb3lt/4DVXOogEo7Mb270G26A7n5JXfU+DahRU/UkhJk1EIu2pXJIStqrwBdvDhqakWi2l1gMcbOUFgDcmYqzbWHQhrLiZiTNs9a0mL9am5aiHel0FpUELfOkNQutCXJa6/cQjVTbi+2g3zfTlDW6pRACcFAfY0SYqCGpSTT78qM4/Rd34YnXrOKFb399+k4pYo+2wZg3bUI4l2oZrB6zBOdZS/PNs6g1COJv9YGbkTOC1gj0NTk9xaAsMutEJyuqt4k7pDsPk7K1sNICxFLlTSGyQAcvYSPyzJq5dVrdLy0sxRLENU2txJMlzK1r6W9DGkDpnqItCwHn3LnOuT9xzt3hnLvNOfe/hPs/7px72Dl3Y/h72wKZ1juBBqkW0BRW/uh6nHzvHIdOa7rdhzFfY8mPn1X3DKg19DE81cyG0nPWHGpq/RDVZopRndWw+QfrW9AStsq7/m1d67K3ODjyAV/hYatU00Q0L8l1wYN1SJAYdCSawAzAD3vvLwfwJgDvcc5dEZ6933t/dfgbF3a8ZHcOpTfVR7viuz76Oez50hyP/KUJcK2xajDUYNm+9kpcAmu2AGKQkyTd2E4d+aiopPp9yz7mcqManm7JZptdojdFl+yYry535IxsCYKaOlxSgXUeyf0BjEZfjwXwSn2y9A0XFRZjhdNQufpehY8tCwHv/SPe+z8Pvw+gO2Tk7K1lpq4tlU3sXKAffJbWwHaloQ7v+L3rcMHHnseZ77+/A7/Ydra0jaS8AT8D5kc7DwVe/HxOIasNG9jyZrTy585b8hxcpIMX7E2OyJQBq0MBSoUH/i0BWXQaMZu43dglG7AHfHg3AcqEN05j8bXIAE36hmG6JOmM/mvxr/mwzKyaQOc0NXNmQGM7KpiAc+58AK8F8Llw6wecczc7537NObd38P2VaW93NgXkuCsoVcHZZtcdRojuRbT/ulvw2Des4+l3vA7N7t3dEuLaGuAaNDvW6DQgI3KQ4/MO05OD3MpqF8KL74c6NWtraHbuzOsT+HIrq30+02m6T0B45/oqVddNp10ezQTNjh3p/bU1uNXuWcdf3zFiWSGvZMB7H+ufBHgVAcZCbFFVWc/YWkCYNnaTYiCcnbhDM49a49D4DOfNAkie6/BxPPGIkMomGq0tGu1SHLAV7Vbe5zpaIK2VfuB7HLEQcM7tAfARAD/ovX8OwC8CuAjA1QAeAfAzhffe7Zy73jl3/cbmCz0aHQKIJhXpXujvcVx27jxaQisJy7H1/cYGTvnITbjrX7wa89deGiIQtWgPr1NgkrTR3XTanRIjwFn4E+HiZ5uR93gWQvhQ7cYm2kOHIPhBNAt8FxrNzzajIEnOYAhlJJ1cTADqBIy4t+vrMW08Y2B9neLQ9+0jexLkwBIJ1xbbKTkZibQhy01ahIO1sckaiKzd8aYo/s4aEOR71mBmPuN9aisT3PPpOzUtTJliyaEtliDTPJYmK6kb15VJt2c8AKcw0y+AHR2REHDOraATAL/hvf8oAHjvH/Xez733LYBfBnCt9S6fSrzqdvCDvnLpC30j607AH6GkPnGnkwGwOcPFv3UQB16xA/M3XtG/JiqwatzsyHRCw5NzEhM7vd/SrO3sZMYJHczPNo2G5lWGggsz38vU0Mp6dvJex3e0/0MdRSjE9X39jUhjKZZZstX1wJV8LTOgFlmIy9DtU8JudDuUyqyUF4/IM0xP0RxHUckMsHjj+0Pvy+9jgQm4zsPnVwHc4b3/N3Sf9/J+O4Bbx2XY2L/zgsc3LECzp2E3+Rb43C044YuHcfiMNWy+RZ2GXFs5kBnacpUF4iDqBk2v3URhoPOS8kgFVxkaPFgzxhbaxnVLTiL8JJQ717NnVQ1mMTsaQ6AkfKlBVVLtufOzVqfT1AQ+86fz5fQaX9HprTqUtIhSWVpQj/HAlPSmSVQwE4bSHCNM4KsBfA+A/0EtB/6Uc+4W59zNAN4M4IeGMvIodHyhBOBQLr1WZ4gZ19UqP5t1t/7sJqw8P8cTr15Fc+F59P7AB6OyS8KAlxD7WcNwQy11clZVLSBO7V8wA6foa/27BoZyFm39O0XtyTLHDAcp88QinkFrtqw5SNLunJz0nDNbzluoZsPrdLXvYuWZ8WO1hd4joLxpS8KrpG0VaMunEnvv/xsAK/eRJxH35OLAUEFC5bgwaxZ0DeIpwEB/oqvc1x+wZDOFWWblU1/AOfddgHv/7pm48CcfQ/vCwX4GYj8A5iPk0YU7d/mM6Td7Xq06oO+oMV5Ao7UEpcmwbavThHLddJqcbusaBw9uSzWQ23n/TmQsYBfTFeM+YTAsBGM9NZhKbUMdtG83JSz8PGvjTEPgvKRe3H6+hW+bfMbvGyrNn8ka0J7sfIU1mSo7my58X594bZWZaU3hugaach4RK2iiZlcT3kvhMeitDwykBzTKh/ZtuutO7PvWd+CW1XlYYloqYOi887v348L/82bc+f7LMDn9VPssN7Ui0ANhjSqn7/Q65BnH7+/j+bN6zKZR19Hcyqqqvy6nF1ai4QiPUcBIeq1pqE7Gh7qYwCDxxeXE93llRKvQxaVWbVM3yYpJViar4V7OpkwFcdo2Kn/dH2qahx7QGl+x3tWakOZJ193SBPld63q0uVDXaJdCCLihBrAkI6eTY8gFVCsJFZ2no44TPnT7wgu4/Efvxb73Xgj32lfGMt1qNwg1eh6X8BSQmICAcVWia+64QUc56CTvySw+mdDMTvXPlrSU4JB2MTt8yiu872dlIMUEWqUFcPsnZpqLs7Cub9r+Sk3WaUhYyYpJ35CGIJe9HWrVIytTmyMajygNFKvt9KQyAB4WTbFSGo2HJHwW2sMqh0zQ4rI7lkQI+OyjWQ1tqHSSVi8Z1qRn1abuns2feQaX/MbzePCbTsLz3/nGvAHpoyczptIuEgBQPgpv0OEsw1HrYK+8oOHE8xYtoJIwh6SsIbvQ7HgFr80S8GWq2axlkClXGmy8GpCYPs1wHSye9D2rTiQ8ioJDU2kQapOA0w9hCWOJ+3VmPqk/zSPQ97sCLYUQAAODeqY2kxuCoPrc6EzcUbWKB8B/4TacfM8cB09v8PzbXwtouzgpTwajK3d2tp8ZeSeeu6PYVMeN9q0x4/DgN2cNA0gsUG2myMpk4oGQpCMeSqaZ3JP0mVpsqPO1gWWlSZYJR7SFpUUWNYwRg3yrgmBIYzgavAVaEiEANYOoGYqpNOCt+9aAHBIYRHt+p9tr8PhVDfDqy7rXeQ0dYUCL3c+gFzscWWXrThlm3GjSaKmezVwGMFirW0n9TtIbM35pNtV1Mmz6jIfSzFXiJXlXeQHq/DQ/8rukQX6laJFyj1R7GKPRGLQkQsDlziZClqoJ5JJau1Hyu1bDjFQtd33sc7jgo8/hnh9ZxeTEPdEtOKZr57QsF/ADcStOALKmFxYV3qIJQUIsujtzvUtqbqmNStqB0Q7sws31ir8ZA2DKDvS0BEGT3i/NaIZ9m/Oi61owZ+JzZ/NeBNRC3pK21L8WGbhj09aEW7zX2Lwnmm73Zy7HBloSIRAomSmNzpx1aHpubUzRaXTjlHhQHcffeDsufc9+PPyBl6M5+aR+lm/oxGNC5KN9L16B4SPEZUweSEqVTkBHArN4v4IIk/6odasDEz4A9EIysxd9cHkO/LdzOr247YWe9lNgU0ryL/HAfMR27tyws4FE7Z/soZD8Ar9ZX9F11tiE/uZWiC5VfqZJyjuWW3RJTa+ZMvrsiIzvcttEfixBZNWlQssjBEo221hcQG24KZIpUSsfIfzNn3seZ//9J3Dvz56B9i+9unstOQWZpXYTdgv2A1ls+hxk7OsRQ3rp9e/wOy41hoGamByZoCS+XP+ePWsogQFEgdHtWTC8/HQdEnfuEsDokyPdzT0ilD5ZEeGObWEFNVNyLI5h5WMNdr1rU/+2+LLqaAWYtQbu0KRVo/BesmysaCmEQLEahloDwP7QNbtf3il1kjHUzjF/8imc+7MTPPrGXTj8ttdF1J7jD/b7DsJyIJkKvvVq3V3Pyvn6OatxvAGqqJpyXqXnetbQg9sFLcPcRWf4CWgTxfIDsAaVcjjKNDxLa7FoCBvQvNQ28ZSIzQg9s1vllvKv1UnnU9IAlJZYfIfbddljDI6e7YfUG/bsK6lgOv1YXsIM1PzZLdi7b4bNPQ3ar34NILsKC/lmzjbaHjYlv/I8lP/WspnwVuuI2tVU15P8JOR+thrBZWstQ9OiAyzmxasilTySei3wDc0yK2mzGV7MogLGscikMlQe82gJDu5LQ8RYlEHLIQSsNXBLylmkZw0tWYc6rEUDnXvHH3weux9ex9OX7gBedXHxg5hRlONvV+7EWUZKqwCSMrNw6hYvpei+yYyhlyYHOpsG+azlQE26rCgMDWcnK5+hGbZmkiS8F0y5Wt6l31xvXcaYe2PaSe5pTGYkLb+fQHUWK9hXQ8CQUG2PtgaSOL+SugUArkHz32/GaX/+HO76H/dgcvLJMT9xA2YPQDNIiXbwsYgkePQB58ey70A8/EoDNvHic2rgUmdLgCbKh+z4vh4+ddLib1Q7LFWbb9rc0GktlVj+6/ItwVPSMNi2H6V1uDRmheZZm63WDG6p8Vl+A8JTU0l70hhKpZ8thxAoMS/X1tqwVqedC664AzZZZg+XNIyK2hee+xtvxyvfdzfufP+FmJy4J0vvA++dE5AVnCPtOLzpJ5YRVxOaHrEPZwP42Wau6tWi83Caofbh2a0wmGOUIjP/EbMUz9q1AVkd4IUJhNo7unRb16oPZXlx+ZqPMKhNLcvqW0OgolWvxG3bEhgKCytgDm51NS8n0HIIgSRYB4EY3BDWR1Bgn9/csDuKkNWRrI+lO4DsTIszTz+bt88+h1f+0H7c8a8vgXv9qyjftvMyFFS/SZf4rDXeGKVGdZIkTr+nSEShbfh8hFHHlStwq1uqa9NOnQhe47esgEi+Q0IlDjTl9KNnKWvgyDfS4bRqgoF40sI1E7acH19r/gvkW2+HGtNk9bOizV/oqyN5ymjpzYFJo2bxNq1wZrsaUnxIXdLSvmT3W3Y688NhtUK4rvnTT+OyXzqMw2fuRHPlZf1rtENQzAK3Mu0Fg5SXDMoCNiLbZK0ZKwwQmZHMQSz+BdOVuHrhptNOo5B4guQFqTc09VGFCm64RY2KzIts5ioLxMw5Ss3u5uytqaRBsBap+bf6R83MiFqdIch0Hy4N9rGDmutTyk+EpfyPO1yX3RzQSHTNRgNoFvHpf2sWqeVpebTpD5rNEHZj+utvxc4HDuDAZSfFA07iur/uKK4P2aXL06prWghtGFKDnDGD/HQfHri0iUmWLNVzXsPn/33w0UJ71yixnfPy7HcKqnLtXk29tt6t2eCZCThQ76H+VuK5xG8tf31fa7Ra4FZoSYRAm+7CM22fwkBU9llGJcSaG8kqa2i1wnjW3rYPAPDUKyfAqy+DmzRxwItW4DdnSOL3MyagNw/p+lkzaaympcoq5N4TgCgzqwb2hEzvS6Ns/W2sDmzOWgaIa5VfEjq1QZZNDgamNPSO5t8quzRxcR/Ws7elfZRm9jEagsVv0nYD4DOWRQhMChK3JKWZSuoi51XLo9TQJcCF1VfJnwbE7o9eh/P+4Bnc/a4T4HbvyjSAOMtqNdjy0+elROYxc8QZsKuFT13vRPXl5cuu3Gi+oNNQEgCs5OFpCVA2pUpRisfwKiaF3CvZzvye8Jrcb/q8alqCDl5jufiWSPNq8lXQHPg3BaEtakEWTwqjWP4lQouGBv+iZDXiGKmv0/GAk06ttI32pjtw2U/cjaf/n72YnHQiCYk2Pe2XVwis4B1hlnaNQ7O2lvBiahNJXAUlFBhb0IOH/9MKhIQrL+alMQoZKJYwdi5fNajxpNNwG1nagTXopK00ei+bvsYIkqSdjCXMRTQZi8aq/pnG1fQ4kIWpqNWW5XcWEhoD9ACpZJSKysEaVnp5Z4wKyb8tAI47DQN8nMY1aJ89gL1/6ync80+uQHPFJTHfHuU3TBEAoBN/kvzW1+M9N11Bs2d3riEkGkUQBBr3qO2tUDNHDC8erjn0eFIH3dl0WDZLk5Lfuu2Yajv9rNmUib6hNrPcdJr60pdMmKxMbSI25fYsaRilduE6seZj3QdURKUB29/7F4EmIPxRR01OygHshmCSgzVqdqN+d2izEb8n+an8zSjDYX2/PXAAF/+HJ/H0VSfDv+k1eRBRWTVYWY3x9PzmLNtfkJ1F4Fu0hw4nZoYcjALfdicQsXkhnbWZINkTQB3Vmilie/Jynty3bOiGdkmWzAXKJzswBki/c61zlzAGoURDaJP1+WRAcHxIfk+r1rpc4a/k4FQyi7SGULP7uR3NCclwdiPzslv9mQ728yMSAs65+0N48Rudc9eHe6c45z7lnLs7/N87mFGT+zb36PkRmgVD2kWWnmapmq2ZSWu1vh4EwfyOu3Hi/kOY75qiec1lyWYjRuqhB6HGHoB0Vt6c5fyS40risbgyTc4UzMoYag9rMErdx5hYJZvWmtn5Hf1X4rU2kCyexHxj4Kz27kiUPSkrCgljIqoJnKzswv2h8mX1p6IBCB0NTeDN4fTh14fr9wL4tPf+EgCfDtd14sEkVPKssmxZrRqOGfSLdMgFyIoF6D53K1afPISD5+wBrrosfUEEAR1OYuWVHHelywv5AOg2NM2p004m4D0M+gi1eJ8df+JNn+ffFWqr8osMlrwidYHkjPgJQ/Z0iacSCDdEpfpZwro2iWyVLKFQGyNDS7CBjoU58HYAHwy/Pwjg2wbf0Kp8STInH7cAIGVIeg30MRqnDeG/a663Fpjku1DfieQlraC96Q7sevAA9n/niZiceko/S4SPJYOQMYMsL7ZrCexKtitvzpJ6+c0Z2o3N7pzE+TwH4YrI+ZCdmar8KUBlaDGSt4WFsNNNvJebgrl5orQECywEcgAzquukuvMAylRva+k5/fZmH7NwAT1oa32a8+F0pVOtrbJGCKIjFQIewB85577gnHt3uHem9/6Rjgf/CIAzBjOZ2770qdrt0o+mr0kNGlv5rDygnz24QUsfmEE4IY3QUwdqb74TF//0Ptz782dhcsIJqgwaBEldeqQ+5yH4IATh0x+GOksBSB2BRrWd7EVI+Ag4QheKvEn/tOcekGya6vPRHb7LN5anhRoLcP07ehz69PtYEwe3XxQwxnfW3455Ta5piVeni2agEnhD+zMy/o0ZnUPGc1+n/SExfD3HSBiLdQXa8glEgb7ae/8l59wZAD7lnLtz7ItBaLwbAHY4QboLnnoamCtJTS3pATqRxsiPGxhIZu6q2sUdj681ed/ViQXBs8/hwr93H+5635W49N8/jfkd9ySdzDwxxjUAKJa/b+Fn2o+BrvUJvNQOvPMQANxEPA3nuQZAAyvyZS1l8vP4XvieWecOJwMh9VT0c6TfJ/kGI8yM4veib8SzPS/t1r57kqe1RCj1oXtc/hgho/thFFiVADSEafQ7SMP7RgQp17jYhTQdkSbgvf9S+P8YgI+hO4H4UTmUNPx/rPBuPJV4BWvCqTwczwShoenyU7jPnTaLlKM+lEa1h9S5Es/WrIAwUOZztC8cxKW/9hSev+SkDixcXe0PLtUqO9CtDtAaewIuEh/5tuVUZZUDVPpViWm/eUh18ASbCLO06dIc3o1LisIXmwqMUFuDVdR5nvlKdjsLbG36yW9GxlmL4DQRdVcCoARQ8rvhL2ovltajqYRfKJMn63ulDWGB18QDVOUpWoKzAt8QbVkIOOd2O+dOkN8AvgndCcQfB/CukOxdAP7TiLysm/bgkw9nNWoJBNGDXO5ZAoHLL5G2B0s8q7JZRW/v2o/d9x3AobN3Y+NrX5V2VMuu05KfyyZ+fOujlx93pH4jUBP/Z8epMZZAnUaW/TLXZIVrFJsr2xtifSP6NhmW4PL7+luqd5IYC1lZfT3MVZMaxW/UGPcG+kzRPCj4S5TaNWuHgtbRuOi6XqMj0QTOBPDfnHM3AbgOwB947z8J4CcBvMU5dzeAt4TrOkmdShU2JasChzLAq6CG0bPs45dmKYtKNibzbf2mma+95S5MDrV4/pxV4FWXpHWrmRiFAReDmSY2NZ2J0HqgCfcnEim5BMKmg9acSUp11/xZ9nFpcFqzbi2d+Z2DgKjZ5ZYZWJuMzGdBC7Bm8a2SXiWp9UEuU19n+EVZSB/JqcT7AVxl3H8SwF9eLDdlA+qBrweRbKvNslHv8Qyq3Vmdq0ZgzcodSxG3aNCfZMu2fhpcZPonf45Tr7oc+//GSbjo/r2YP/NMfCfasyV1GDDtv3Z9vdcs/BzeO8B1GkLvzBNMjfm8UxettoidvPfj8C3Xq+eleCQ6860HbhVLIR66guv563cT0LhNy6ffybmJls1v1UOXl5RF1yV+M5yqADwyr7r9NI5gUevhYTibKTpSYPDoUOMA7lxFkAd95S3/dKDsu66P/ZZBagE5cRArW8sQJBzhp8hTO+/7V3iHO3V74+246IG9uONfX4TLf/huzJ95tucB6DUlh/iezO5eyuQlTeFFqY1eXI+BdNA30/xocgGm5LBX8RIUOxVIB41r0vc1OOkaJGGlBTx0indp72DCJEJLytYmmOofYqt3785pcBFOsbKKaKJZpiB/f1MbbeE353Z/q2mHJQ1G2lsTA6zW5JiBuZL/vOsbetIw6Fj4CSxOrTohhSUp/x/CDrRw0HmwyVCNPVixcVX8vP4kZKUW+rYfCImLbtOt2c9mSdnzp5/GK39wH/b9/IVoXvPKmIccMhLtfKBXGa0wWVJPywQpkAiEBCOIdVG2uuTTzhNgLLZDBPcUyKoPh9GajPYt8G0XKcra6myZffQ/Rl7SOETIJ66QqG+Q5M/larCZ24i/u5VPrC/N3KUNVsqVO6bNJigDE7C0kPjOi+BUYkyMRhayJKcVZircz/Yc8LvcuGpgFj8kpy/N9LqcyFebmy0Vx5L2+edx6U8dwuNv2Av/1VenDkEuCANaAfCbM1vCWxt45H58ntY3AmkRpVf5sq0aBld/WhI9y44iswRx2/+X9W3eYZgduaY6vd77wGljOp/xGwX3fB60t4K9z/2D37eEaW2AWX2wRCx4rLK0yaGFoKQpYCQ1k2A5hABLW6FaA5TyKAFYOl890+tZnx0vdPrSCkRWH+ODcMc032vQ3nwnTrn9IF54+RoOv+W1/atzPau1VV66rcZ6tuQ6kGBUgiqJHSAzSWN06NKyIpcpApYEtc2wMbtZXpIWXqDLlPwsNVktqybPkrxG+CZEdit9LhMwA96HpfcsE0NPZrX8KrQcQkBoLPO1D5SBO8ZSDv+u+SZY6eV3VL+MGVfyjercwPJYfKV7333mJqw9O8fzL5/CXXFxUgZHKSpkUi7D0qrERm4U76Vls0wtLwgjPYuGe5mAyRx21GBWuENyb9C5pzRhFJyDSiYUa4ol7STJv2C6gtq5pnmOyCfJrzqxvIgwARP9HdEIkfiDWbNfgWIjcjm1MM98rymsMcfOrQQM24VWFSRqLYCVP7oeZ3z2KTz4LadgcupewPIkBIqHjvR+9op/a+aQvRt0wnLcpci8SRmFqL8xDQe7SEyxps9LtYHZmUvHsfNvNtd05J8+c7vNLQ0gYcqlWhBjF5JEB/VgrcfQXJPViKG+bWERzBu3edUseTGcQCRqvNWITDUbkPLqfxfsKuoo/Qm8hroV3+OPrNZxeVbTfDEmUOMlqXPfuee334VX/Oo+3P7j56HZuYMEVqoZpAKn7hyTxffnegGplhEGVXICMvOvbfO4FNcmAoF5y1TnwEc8+FTyjPk2qadnydSKfBmDKwMIC05JmoKwyY6SY6equRJUkUd7aPVh5Qs8ZJqQgQEwjkWaWKYdUj9c/qAiMZw1V9JQzUrqOdA3zJB6aA3W0rV0vIgUB1WbNYUQUjwDbYA+PeenZ0lLayEVrj3wPF75o3fgvn94JZoLXtGzFzbgpK6rtATGs4IWOHzfaiMG7xAEg46OXFKppd4xPyWUZInT2nTD5gXnY3Vy/a6sPiRLpYY9rjEBrUHoaEZWnTgvDlUW6+BN/w0A/dIs9xEGbC1AMstECX6+b5Fr0Kyu2M+wLH4CzgHMvxe12JCWWhCwzVNbrtHpLVtQyvUyW6pOVwTC8oGQ7PwjtbJDpr3tE559xBaYz+EPr+OCD30ZT77pTJy8dzfcDftoYERm+ndc0yP9eq1bt6USCnHlYd7vUvObGzA38XDeOj9uKz4YRfOdNFqfj5uQM1cwu5I1/cQkafvVG/19LTMvThgGcFgKVisbweLzvm9mjla8kqRtcu4ruo9pJ7iadmr1T6mXUYelP5rcBuVqyzKWlmAASDqNppo5MdJei7H4Vb7W/SqKXNBsxFlmfu8D2Hvn81g/bQfmb7oymyWz2TM+8/3gdnRUGx9M4dgjUAlHBu6MZcKkPQZnMK0V0GBQ7Z3uU9CxFVzyrDwDFrAcudSmXMavT3kcs2LglOmkv5PmJdN6B0Bdft9M1yIRCNxPC7QcQqBtU+aBvNI1NV8/LwmQUt58rwTc6Xy4Y1oqttZKtC2qnTzMOtF6vG/hr78Vq89u4rnzd+DQW6/OgSBCzU0gSAlHiVis4wBkm4fCexEbqPEMIJpOljC27md8ujT+INeNr5NZVQHLtW99jEkLsMjHULtprGNoLJhCRGmkVmQoRcshBBjlrNn9JcBQp9G2v342lF9J+9Dvjj14s8afJm1b8gzkPdx/vxE7n5hh4z1PYnL6aWp2pjzjceVhhg8AaDyvUc4w9H1QkmyAcvm+LS9NxjS+F6J6kAK2u7GVF7dDbBdVzyGMqHQv5NXv5VhQSFjfR6vwyeGzlYlI9z9rAmJAVKfV9c+u6UDbCi2HEKCtrlLZ4om30cai/4JiTzSyXFcHzXzlcmU1KyuGNJePFe1swxehtO5d44HfT+qWLrWtffJ67P07z+GuH7oAkz270ayu5Kgzg3m6XD2DJIOWgLsSf9IeFrjnnFq2pDL0YR6W5hcP29ACqe21kNo31FpZNIHSvGLchlIehnaXtYncL7q8K/+CaH4Z7c//mSwNJ/lr8nIWEYhYGiFQAHNqlUkGGanN3Y80jUVZZ0nXv7PNNCH/aFOHe7IRJcsr8zXobWpzgDnXB99IBn9/qjEHyWifeRYX//hNeOI7rkSz92RIUA8JIpG1gx6UibZEUYrD/voYeWg6Tduc6q7tTEkbl/ss4cjf2Jq9WgWUSblA7/tQwne0KhxXnBRmIkKGJwuZPHiGZ0HfGCHealoE7xTkuun9EyVNzjXpQTVyzzIBs1UlQ4uqhBxbCiHgZYMMAVWDrpiWPwDH9+NngB3ZRiPMjGIDqdSWNOG+nOgb80wGF4NpBEQFbzl2Cor1AaLtn/BEplJ8HtT69tAhnP7J/Xjuq85DI/EIRG1Xqq7p0itlS3BVcjoSrYo3FyUzMeMaVrvyykS8V8B89OzGOwVje5JDVM31mOqXHNDK2IHwnqjtBo6SqOxK0JPvQuL8xH3REBKJUGXtyzQTlDlFJlzWhppnbosBs3UphACAHhwUSlBO9WeRloI8GCU/JgsHAJJlrMTOlWQSFZhDdzMP3PjqI2bhvhMVkX0K1ADSKwBEs0cfw567nsXGabvhr7m8q4IcWRYEUX8U+Qrc2lrUOtzaWhRkoh7Hg1PZlnSdZlBy9EnIwgOGvlmCf1C76W/ZN6Sdn6Y44Af45omn1MfUwEscqCwBUWRJ2fQWvgH0XpwWcZ0sod5M4FZX0ezY0X3vgcCjSyMEvPWhLHWenWyGM81/q5l58D19jwakz+zugvNG5uFn8F9d6mryD00DpL39bqwc2MD66TvgrrwEWFnJtx7LvgSOuwf025H1zGsNND1jKX6SumWmnbEmz8+TcirtX4oWVJsVLTLTq8FcoZpArIYr06tGmviZ1U6iYWb59nWN5QdweCh82pIIASXx5WOUwlJVG3HAi4pV/FKoaM7H1DB8lr7Y2K53uzXdb7VaKvdoEGXr2awaiylx/a3Y+eABfOnNe9Hs2d1pA9wWssy4vt79n212R55tUkhx8mgs7Ukwr+VeaRuxNVtZ9608E+xmoLtaQt/KU78j6nJUpdW31/yEdxKXYcrPdN+NZk4+ayfX+h2zboQBaKezUL7f2EB78CDaw+sRLyrRUggBN28Ba4nQUhcBiE2eNRLPaLqBrMHEtqKkk3e0jz3bWnwd3k2Wz9RMzTZ94pcvxKsjhkbUeezxvbbvvDT42lvvxtkfugf7/tEFnWbFdq5vMTn9tC6y8eoqmrU1NDvWOnfSiKX0Gk6X4ZxWRGiQFOIqyHmKzHvSviXVt0R6EhiK5zBEFu8SmXjS2/jZt9f8iMptuWYzWTiBXDM/ZBZGPkrtpPukMVG66Ur/nVdX+rByBVoKIZDZfECq9jAeENKWjs1Kfqv12ohay7WxAmDa+FyOdILkryl37IAxZOqjAqWKs0f4Y6EXO0rGW4v5Y4/jkn92A+786csxufiCBGycP/5ENzOEU4naw+toNzapPPIwC0h8gvTrmYrarlvBMAaBBmT1zFXT6nRay7aVNuETqfUMq1cB+L/gIPpMhdgmqg9QW/v5PF9VGKKS+SP7NGRDWy29hY/RPdHyMJ93p0+tr1d5Ww4hAMWgqGR6E4buiNyxgMLHGgCFSvfkPqvgzvWzXQLq6LVcbUoI0FcAy0pahu5Y4dqHcGzpTNQP4HZjE5f/myfx2NefCbz+iu5VtQmo9/5TYKSeWWSQ6fL4eRAWevuxTiOmke1XYQy4MZpAaDc/mxU33/TbfZu8/AHbPznLoZrQMFu8T3dAWu9oQc67KK10mmI4N9VfWvrezaQDCAu05Q1EzrnLAPw23boQwP8G4GQAfx/A4+H+/+q9/0QtL786hfOr4cgr+ojZQCGh4BrEwJsadOKGjWbCSBU0dhAF1Ikvgpqx3XQaGrvgm5BoFk2fjvnl50bw0+TwCMEA9Bq9BB6ddacMze+5H6eduBN+2qC54BVo7/sildG3oZvAtm2lXK2hxI06qi7aFIv5tSQEB84CGALFDB75XrfJKE/DKx3xtCCZYLQZmTSA8rs3TdU2f5YUbrVJoS61dtGTROzTBqAcvk2yH+RYmAPe+33hNOKrAbwOwEF0pxABwPvl2ZAAAAA/cTZIV0JBgd7WtUCcoEmYHl6J9DXMDaBXf41yk4/qXB9PQPKzhFJ4lsQDMOvG/gWGj0JSxzbO6Pkaf3CLvf5WTB97Du2enZic83ID0Sa/h8zrjXYiIhc6JhVR6zZvv0XJ8oyrzZCchvEMa+VDD6IMbDPAaLbLLcFfiiNRo5IGaNXLem60Rdx38hXYQPSXAdzrvX9gKy+7me/8BABz9u0SpYM8XcdeADXW+WUfl0A3Kx9eonRNB2hGIEn5FRjl8qadxO2WP2z0I2j6MwG4syntIm5RDoeCeknrHGb3PYDJU8/hhcvPxPTM05HiKf0uxVQgBqFAkYaiowqHOFfmUqyPHrBWOw+RJZgtbILI6ujRoasmMJRgicur0lal/hPaLBOg1u/awI6u0pV3OY9KG0ShJ0J8hNA9WkLgHQA+RNc/4Jy72Tn3a865vUMvu/UNtIcO55XVvxnQkWfsJRjXvgMYx3uoSx9ESd9B+0+5tSbIfUnVCxpCFwp7FoWYzLRupUNyM35k4OmyCYj0mxtJmvyIc4/ZAw9i980P486fPguTl52JZufOzlFox1q3lOhpBUKVWxwETPIdSGDk2ALZyUMYjHbfVW1SnDFrPgSF8uPKAD1PgDTLpTc44+jYCzHPyaTMiybXLxs3a2sd5jTg3FP0uYh5NnArUzQ7d6DZtavj9ViGF3POrQL4awB+J9z6RQAXAbgawCMAfqbw3rudc9c7567faA/narZTM2WizhnSkO06K1yYFiaSTlFtKcWoxLBKClSlsWgGRVBNytHU0C5BrSVtzrL2nD38JVz67n2480fOhTvnrA7wcg7xWLJamRYSXeKN25ieJc5LQ1RaCrTaofQNBDuR/Qb6/AKayYv5SX+zSMKWl2hMvwAQcRLXHQk3KgZhSZCSsPObs3joLAZMuaOhCXwLgD/33j/a8eEf9d7PvfctgF9Gd1KxwW9/KvFqsyOX1BrBFS1ASEduqTUM58P3Sp17SBKX8tf8xusmXYeWDsheh+YSqQKC5Hfbu/jqe921gWk4h/bwOi77hcfx6DecgfkV58NvbHRmmLQtL6WxY4wlUPk6vO+0pibPvO86Ig+wpKzCgNH5VfCf7DvItQ43ZoJo1GZawzD7Txu1uJgn1SF6TpYwJ9U+sgLBB9ZmgKJuK92OSd3bXvPcnOWerYqOhhB4J8gUkGPJA307upOKF6fEjbUw0PQzq0GSdwywz1Lhh7wSdXrmSd8PGkqCYcigFX/+lamxO6zAG5fD92lZKTnmjNK5xqF94CGcduPzePaiXTj4ltd0+EHUsPSKCAtLA8xM1PK2OxshAeH6OkSzgsvjMkoCnOuhnW30fYusgc95a3DU0oAY5BPMZDLpHK0MszV+y8wTtFDX0qpA6ftndcifucmkcxtemaLZsXbszAHn3C50Jw9/lG7/lHPuFufczQDeDOCHhjMyZn1vbFhJ0uQznRk+vFRWEVipOP6UiDpHtWw1kMXBxln1GSJVTuKS3BQ6PgDM53A37MPacy0OnzxBc+Eret7YVi6FyCqRN9xlC7xm5ZWEqcFXNU+zbMOmN9L08SyaTPvQAyg6RpXwo9puRE2+P/mpGL5e51NrO6mDa7p+BdjjheiIAo167w8COFXd+56FM5o0cG4CP7TmKs8iApp2dlNo6JlArziosrq99FSOLlves+5zvvwsmhdUP0Fv21nYxFOxzSWP0tIWb2kFOjU/ltPzIicQA8DO//zn2H3heXjmmtOx99A65g99qQcY1azP8QVM/sI7XTrl64B+ZvS+IpyU+WQfzqne52vLVPE+4yUhxUs82n0yIX+DtvctIJzBybWl/YnpU6trwmeL6LtRErRWOaU0IR/5nu3h9SrgvRzRhjc34WG4SmZhmgw3X7p2E5e6E0d7kZa1Su/L7TgQaGBqN04afN0S3mba4cRfQBxr2nmaH9JNQ/G7S5oSnxbPoYyk75Te8T5ZSZjfdS/2HlrHQz93As7+O7swf/6FXpsCoiuueCgCk3y1gGYw2aiihXnvzdd030iWVUnARUHTzgGn2l/IiODrpmElKMZCVMu0gH30ugzoxEGtG7zxnvAl/BMPcaUnwQQCKCenVJuOPKIxolflnRGxuESWIBSiMeJb6svN5EVwFqFH3yBa3SmpkkI808l6Or9/JJtOeABbZXPMPn4e66K23lpLZ7pe0WFI2aeleoytX2E2nD34EF7+jvuw5xMrmFx+ceAj3UjEamqyb4GWYmWPAQcmtfhPPB/FfIrBMtp4nZgg8qcdcHzYDZmU2aT86fonAJ2xbJjY+ORkw32BQVSVvupnIqxov4Kh2Z3xL56AONydpbkKDfgKLIcQAOx4dUAqDLjx5V7MwJX/gBSZr6H/JR6ssji/IbvXes8iA2gqph9rFw9Qe/gwnv++03D33zkF69/42g5QCnEHtNdgspLBCHYz6QFJFuiJyqxdqJE68yRMkRMTawTZPhEDr2D+nEsFD5BOEFYbljYucT1CGcVYmCViBy3mpdS/9IRIWvI4L07VTgYthRDwDCrVBkcNwdbSPENX2zSfYabGXVcQWrsOFUAHKM8MpXtHSRDMb78L5356E49ds4LH/+418RRk3mSUH0VW2CehXZ5LFDUHna96lwd1hovoVQYDNxkANC2+Bil8yzS8uM/zs+pi9s9Kf7Da0jkkQrjGp5RboKUQAmaj1NJavxd9byRYNCrN0PUy0BBP3mPlU1/Azsc9XjgbeOGvvra7v8CqxShHKz2QS4E3a+Va5hkPiiMhVr2zZ4X9HosI40UnixKPxurYVvNbDiEApLaPXOtnfG29r9OPkZBD/BwJbeX9oRlhkfRbKPvUX/4MTr+hxWPfdQgTWT60ymQbHOhV98F2DQM8c4Zp0mVOw3TIfsv7vuLuXVKrxwxGAT0tvxGrP1pmaDHvEd9HYw5CrN2Ywmqxb788QkBI220lyawbmxHaMWr30eR1KE1JaA0JNk1b1XwWpF0f+xwufu+zeOpnJ2h2Bm/O4HwCABG8Y+K1dgI/k/MkChugskHOIdskbJusfRsnM0e738rLxCZGCk72DPQ+deqiPLJzDeR+KVoUg6I1Er61mVsCNuOYMVzqK2UtlxAY+mBjTIEEXTdmjTGSmjewjJWqps1mmDmWKlvLp5Z2EX7GPKP7s/u/iL3f8RCaj+9Gc8n53c3CMejRD2C2mW3wSk7hDbsSE8cc38bZ1pM/vsRQiBukeMWihg1IvuwBqKMb6Zk75lFRm52LLrjJu96KKdgDqRmoF/tWm/NDZeWTG70vApf7OlMp7H6BlkMIOPTSS1c+S1v4aHrQSUPrXYdjaIQ/QfZsLC6gpbtOf7Q0l7F8l+57j/bwYbTv3oV737cDB/7a1aTyKz8AOagkdswm7bj0jZI4iwAiWs7kyN8jrgiVnKnILFErBCZ6nqnVBQEd8ozmQOlbi1bEoCjxkJkj2smtZmYAuQDzLS2pag1ga+brcggBKFCnNiCKktoCbXz9AwJbbrgjomUEDoXUzDK/616c/js78fRlEzz5PW/obfY4wC2/d2MzFJCqq5IuWVFQLr7Wsl+Sb+rVONgHahpgzTQzlyFpAJYwhiFQdQjj4fYdEhas3Vj0ogAGj5RKyLAlJccOwkXAweMhTL5CtPsj12HPQx4vnO3w/Le9Lu/c2aA3gLwoCAzAzxosY1Yl9Ow7uHyo/lu4UizfpdrEWJB5DGBX0gIzTGIMeGmYNEMatKKlEAIOGPfRjwSIK70/1NBHqGplPFmAzaIA4VbSLkoq770f/CxOuXOOx/76YUwuPj8NxBHI8jA08wwmg3kGgwCKPLOXVgroveQcSr0/xJoAxrYdD+qxy6WJX4NR3tDkYgHb1kaoRWb9ZXcWioEtLGDG8MbLQm7HBy7PI8EYGmTSuCQ1td02BBKOAflKWADnbeVj7b0fEhxHJLT07N3xuPsj1+GSf/osHvxXa3A7d/Ygn3j/6QNLEnvdx2+QLOcFwLB/p6tb3MyTCAM1IDgPXWbgJx5KqtotQe51n8mu2yS/5OBYyW+qVg4EADQOB9ECJQmXbpG0Edcjw7/qoOYxjSx0NCg7JtpRnP3skFCXnZOXNIoeKDyQdUMCZdzBwhGGtIbSwKy9NwRail1Y+ugle1SrvBZfJt8MbIU8yE9+tv9+nPPd9+O+Xz0fk1ecE79F3ACkZ2Ud1AOAbEjS0aVd45JTleN/2iIefQkSIWOf7uRnM8TDX1WbJRuh1GBO6p9MBG16TmN0bHL9/gnOo5kgwyoMLMWM9uyc7b6s87KItc7w3b4SgUaPjBxSyep9vlutZt9ZEjLJXw0U/XFroIs81/7jOq21HyHjw0DNrQ9v5VMavEPvj9E0VEfPfADU7r328Dou+sfPYt8/OAuzN18TB0OcdTMe0519EhiV6yRr7XySk5/Nkuu4bEhmR39SMgXW5HaVYKmWBqXbKJRptqfv9/3375Ebu+674bl5ZqGluWi+vO/7PJ+KpcOkaS2xVNbSuw2DmLdm3TGqNmDPYvK7pE7XBgX/HtqtZ61CZGog718oaSBt/l6Jz9L7pWclGtJass7VYnb/F3Hef97A41ev4dl3vqEfEJZWoWbs5LkIRr1SAPQzX1j+Swc5DbBGnY+gvnN1II4hazWD83IuqWM2eSW4grOfMe+6bF52VTyZmsYidcPSCAHkgyh7PmYQGB9oVNkLNFop7ehBOpCOZ+Wt8LJgByi+q/MxeJ/+8Rew+8stDr6swaFvuSY1AyxSqwYlO1Xum8AhMNw2Ge4wck9BSVOgfOP/sSsalua6KF7Dwl3xmOzqLPpS1MtbHiEADH+EGnijn3OenH4IRCm9XzIbxuSzCHBXMmmOJQ1pCdp0olnpxN/8LPbum+GL3wJMLj7fnjWN4+SSaEWFVYaYD1A8ci3Bhyjvheo4REHDMX0RCNMwhRT3n+S9wtBLTDPSDEsCxvIO5DJrjlaBlkIIOKfP1TNsHGsAajWW75UG7VaksPXbuq69q+tSelaiRQRJLY9F89GaidHxdvz+dbj8/U/g4Z/qTsHt1XxSkUmlj4FAdFEU3iviBt2DPH00P0gtlrSWcLHMP+5nfGx47EMkUARzYBqjEehJhwe3zkebqdYkU7PxeZVFzkZYmVZXBoAlEQJpPAGxAQ1Ai2ciDQjKuyX1a5EZtgSyyLPFK5iXq8OP63J0WbquOm2Nd52+hotY7/JsYgln5zC/ez/O+q792PdLV2L68pdl5RaXD30LjRPEwJuTSbJakA14yj+uUkwoVBm9U/x+cZC25VlT9jhoE8PCMYQ/EVClpWzOOyuPvovmiY9Et4SGxKJs5/AbG93fwBbvpRACgu4CSP2w5RlQV4nkuXxI/SyT8CPMDj3Ahga/RuWH0jNYlKnLxuAs8WWVNYStWCZRFSglFNwSzuEdv7GBy//pI7j9n5+F9bdeE/INajvFuBP/Aj7BR8fczxD2MCvnodmDql7KS0KV8STgXL42HzWcNNYBr0wkTkB9ZbJ7/c7Dtr6ZR5dpgcBxRaAvW++9yMBGzn/EpDcoBMJRYo85526le6c45z7lnLs7/N9Lz37MOXePc26fc+6tgxx0L+XS3Zr1pEF14M/EKcXYWaXt2q3Yh5ZA0Y3PqiWXndWrqfMwZqAv8i7T2INVLFvW0kIUX7OHv4Tzfsfh+XOmWH/rNf3ynGShPQHJ0Ug/S9bk2/7YtpBR1Bbg7XVwcSpLQtHXNCmtLTIApw/wGFLLS/sVWGtlzZYDr0q6hhyTuFzvQyg3BRjS86S8ktkSaIwm8AEA36zuvRfAp733lwD4dLiGc+4KdOcSXhne+QXn3GCvcwjSc5HBaQ0KvcKgB+QieQ+p3Vul2rrwVkyNsUJtkbxLYJaVxpjl1j55PfY8NMPBM6ZdzMLkPRrkNKhMe1vTEMpPwtUMTiI8FoRGmhcN1vCeZYbkPJIZUjMDYpqaORBA0SE37NK9kd98UAh47/8/AE+p228H8MHw+4MAvo3u/5b3ft17fx+Ae1A4hiwvqLKLUFfGCvyo3/O9Cpl8kLGDrZROd34tLFhTsQaT5YwzRGOAO5221Bm2En3Z6tgDiPPaJ6/H7i9v4ktfM8X0ZWems1YQANrLj+14tzJNBwmBi/RCr66vTLMBLxNL4l9A7/b5FmZruSRwMMknmdVTzKQXQoxdMWZl7HHQfc6nB9dy/gmGxuVYdeAj6gzaKiZwpvf+ka5s/wiAM8L9swE8SOkeCvcySg4kdev2foDs+KfwR2pksiYsM7/k0c6NJSRDoJRsaqWaZfestJwHCaNMCNXwDcm/ZKeH+5kPe0l70SquNlfkmu5HIE+V3Xn2OXtWVirp6h9ej4t/fj8eeNeFcGtr3SNSq/voxf3szYKBg5yGFwDX5AMAgKwwcZTk4rFiUUUObsoSGUiAON1m1unDAX2PoCedjO1WVw2PV18ciBEfsbQ6EZ7J/gqJc+BTD0KeHIWX0j4boqMNDFolmXoXH0i64tdSpwegB2J0fHeRuoQPSIAF8ygpVhG5Y0t+GrixAD5LhS+p4CYeoc2UigoY36mYRwLExYg7Pv0DUuCLbfLpSteBgr3pVldzrCXMQGjnaUhtPmfBsLGjgCCafflRnPMz1+O+f3YNJqeeksxKzY61pI0EA/CzGRDcg910pT8G3DV00AvHIXCQFSYeqHIeQTIryzuhzn5zI9Sp7Q+LUYLer6+H9+k7+haYz3tvRW6j9fVwInDhmHH1rRCWQ5u1NXuFgjWEBB9xKWagBLMIRdOdm2irQuBROXg0/H8s3H8IwLmU7hwAXxqVo/L5jpJUD1JLtWEVqZ2nabhjz2b5hiRN1iGSjI7rZ8wD3ysBNaU6DAmVzG20oiU4daINpfGbG7Gd/GzWd3B+nzSDbHMLdXYrb4v8bBMX/dy9uONfXIjNb3xdzN9vbMR27WdDciOWwRC0B9e4TmjpgeJ9NyBlWVGp71lMAOu8AfnOmXnXksZlL/lFvulcjHSjkcvLI622awePdn09NROqZmCXpg+3Rv0sCA0/20S7vl4/Qh1bFwIfB/Cu8PtdAP4T3X+Hc27NOXcBgEsAXLelEkq27pi0Q/cBW53VVBpopXSLkNUxhCxV3kKBS+8O8Tv4vPfPz/LbSt7eY/7Y47jwwy2+/KY1PP0916q1/HL7Zaj8fJ6CfjIYtIkhVPPMq30D4is9LETt/vMq7qH2GzDxlJH9pYZLaVPNwry0GVigMUuEHwLwGQCXOececs59L4CfBPAW59zd6E4l/smuTH8bgA8DuB3AJwG8x3vrZElNCw6ysY1o2cqxyIEyJc3QoCvZcUebStjDsSrnaJflPaaf/gJOeMDj0OkOB79V+RHw4C0M3GyAKzIxhP5hbtZZS7VaONB7GdhXEHiJycBqPJedMV8Z7DUwlr0zo3ZRwK0K5Pyx7lQj6MTmFP9G943dRW2wyfMxlbPUvbEzu5VXqWEZ1dWSeYi/r0Tbb7XOi+Zr1b9Q7uG/ei0eenODS3/tGfg77ykO7Cw+QDhVOUsv2AXQA4Ih/SBZ7cInQLt+n0N0ZdYztHYY8h5uOrXL1yscwoPVXnHG19pF29/P8IPW7o8A/ov/3S9471+fVTfn8njQiI5qqTUlW0vnZf1eRIW31HP9THeMoy0ALMBxDGl+FzVdWIXlvwTYmhiefIWZ0jns+P3P47JffRqP/cu2i1AkIDD9uZVprh241H+/j2zkgEmPX8T3eJYs8Wb1IeXNGdX+mGc/M5uHnjQUFEWXTWcqFAFi7sN8OGtfccJklBnCddT5FmhJhIDvP6Ymq+NZapwTxHslD1OdqHdu1M6qIunBULPzagKrNqAXEWxj7Noxwkm3TxbquqICywpNLV9F89vvwhnf9RD2/8oFmJxxWrpU5xr4zVk3yFem/aEnTOxRGNInKwGULhsgDH7W+Gz6JccIXqqdhMmpxdI++gRmQJkJPsUZan1HQFKgXz7NjrqnupbqU5l0lkIIOJbwenBYnU+juNIgbTi8oiWgxrT72r4hB9ZQTWKeCuh8TKff0b91utL1WCBQC6UxQGH2TmVbLJs/fM+53MXVqgtRe+gQLv7Bx7DvB89D+4bLO3Vf+QpgPu/+eK3cUI/lnXgGgg5eonkq+Tko+5v7ZQQplbtzuoLgYtr0PAJDk7KIeY2YQK8FSbi05IwH/S5jCaXvQrQUQsDzRxma7Wqd25rxOF89cEVqjx0kpetS/mPzO9K0Zr0XMDdKwomflfig9JljlsWjaqfZlx/FhR87iEe+ejee+643pFlnrsRGfEHAVvlLdauBeUlaS8VWoKNv4/Kb9nNJ6mzUe9Cdnfg03YZrmqwSctXvgiURAgkNqbaALSisSi4CHJaelaT2VuzzrdBQHY5l2TWytJwhjaVw3/3ZTTjhwRaHTmu6VYMEyVe/oQaFckVmSrWBwm+N5ST3m7JGEYVj4C8TAFpQFUxHS0tVWm8eHq0woC3tbcRksDxCYEiySZoxknwrA6M0oMbOqEOYwNg8h+zDr/SgtwTv0chT1eOE3/osTrp/hke+aoLm0guKr6Z2dlkAcFnZqUnxfcOMoj6kNyGZh5Gyc5JZvgb1XC80Sn1Z8zMI+hk+CbpeFVoeIcDkKvu9KU38I0+tLOCCBQ5Kfjp/STdEWuCMGSClfMcAd9GLroAlLDpALWEyxkYdIt6DMFZYUbodv3cdLvnAE7jzR/eg2bM7XTUA4n+2yxOUXVYWgskQHYjm87ztmOTZGIxIeQD62WYfapxiJIjPQjRfeIDq8Prs7m4ByPobRFflioBZgJZDCEQbrJ/Ri2hz8g6ZAuH9eFCjEO/THjNYxqbj9EPPLDVQrseUNwa3WISGytTtB9R5lY4rbV3jl2c4FqAhj/kdd+Oy99yJKz/9DJrzzo6DmQOLdOkJuOPBJul14I1a3Rmsoxk6PWg1fZbMvmG1KQmXzv+101CC/Bt9dgRljlFC7M49EqNaDiHAaKZcm2kKz7mivOGIO9oYG57TDaXRKvpYAVO73godCzW9JrRKaRehAQ2mPXgQt7/9bNzxY6di9jWvCml7X3lem+doQ+byYE2TYW2RBzUN2F4AUR8VgeCaTmP16qQkoF/u1HWOZSgvP6pjqEz8y/woIMLPADCFP9ZoBvrncggBIK1IzVYq/S6hrVaHO9KBU1LLx6ZfVrJmjkWxkjFtYQlRlWb20MO4+ANzfPmNO3DgO9+gBlQfl1DvE0iWGC1gzqxLa/c/DURmsSkIgVeYRLbdeVEgWTlPWXVMcYOKGTlQ5lIIAbdoAw2lsQCfsbOWJTSOJhi3jHk1CkcB6qq/prFCrqRZFIR+819vwIn3tTh8isP6N1+TDHz2B7BAweg+7NtcQ6jxp/rJEOg3KiKS1gi0m7FFbBqL/W+YQ+Z7zpnCo0RLIQQy8GNI7bQAEflfcgKxfusyFuFXaCsz/NEUBEeBzOAbQjWtxwSmFqwbC11ttgE44cOfw4kPzPDY61bgrri4L1MHBQVSVZl4zI4Pqwmf0mBxDWAc9FETEjWHJfMMg5LQ9b3AA3ocJEmj31da3dIfSIqW9uuXUHoNBOqOaq0ccCz5EkhSAry0GjVCrcreta41drHVPDkvi6zZvaASJ+i51f4aY2Eg0Op4/F4mwF35W0ge6p21T3we53/0Sez74V2YnHRi8v1924czt7YRxyU87WVoldtlmPMmkYP4fckvBqrJBZK5nBkClxTPRuB2blLsQ+qr6528L+2WRJwyNBaipRACHugqI0t9yYD3ZsfISKuxQTB0wE0FGByybXWHPRoAoAgtznOM2bLIfY0S82+LH3XUtvm8GJd/QIuw2l93WNVpdXvPb9uHy/7BnXj010/H9MwzEvWYw4IzJlA65GRoxtXt0O1LMOL6AV18AxmMEizGdSHGupdb9a0tTZUARymbJ7ZmEgUcu1QnLszJuY3UvwQ8PAYxBo8NRX9/Y0CUBhbP+EZnjqGfLEBqiKxZTD0bPFt+KH9dH/2bqaYlHSlZ7tX6ebJmX+BF3xslcJUmqI8zD3/toUM48+89g9vfdx78V7064gHW1uHMBOCyuD8oEJAFkKjspTMRs4jGtPHKb876/PSKFeejIzSVzGJxU1bnKsRwcfx9LJB82fcOAMpGWgR5FkkXhcGArVTL38y7VGYAbXjjkzWT1mZvrV7XBFPRLl8QyygN2pJJxDOTJSBKbWTxXxNeNTONBsj80cdwyX9Yx7MX7sT8q1/dJ58YO/v4mpfb4kvpikOimQiJIJhMlFNP8EngTUXGfgPTdVn6qaUBJhuOyvxKoFHz5C6giy04ncKtrPaCokBLIwQA5KrS2NkmuT+0scLojFbe1mA2BYKx8WmIFtUA9Dt8vYipVCqjJnSHBvlWhVcpzxFCzX3mZpx4/2G8cNYaDr/tdWlxxv4BO6y5Swd+n6BcsBHkpNrfUkbytInG1ORp2M9B/Y++C944pxFUT9Eglh0TAPKPN7pjpZmMTzuGxgofjUcsWv6imENW/sBnPJK8zfIMk6pmOmleSjZ5zVQTjS9Q899uxMrzLR67Zgp35SWQCFnZVuTuZvdfB3gtfSv2DCwNnqDKm557Ff+Bvo41JyYlCMj86N2QSUCotpH3/GzW/b0YdhE6wGaypM5rECfeJ5S2pt5KWqs8zpvLGDOQtFpfA9pqKr2Vh06f8FbYjDKWtEkiplWJP32vpDGMFaLa1BiqS/h2O37/Opz/H5/CXT+yA80Je8ykfj7vApNI2TUTUUDJkJbVfN96gIE5mZEtbcD7VDiI7a+jAQnxfVn6lPwNl2LXuHAMWZvyrfZYDPb3QEshBDyQqkLWzDpG7RzaOJF0tAGtwfo9RuXWs3ppYJRUdG2fswljdeCxg4+fWba5zidGrwkdTL83ZsCOFQolwaCFagTz+k7e3rIPl/7P9+DhXzkD0zNOiyh67yzk+9DmbDdb+QrCrwYMOx4xMOdWVgtYgRp4Ag7qNpH0zSQFQ7tC+2sBG6luzEMiABrFi/xedk0AQCod9aAoSW8rBBaTntFG8THQqUsD6Gjkbz2vmRpbKWMrMzYPIAY0dVotwEoa0RhhYJ0EpOsQ/toDB3D29z6K2993HnDtlV12snRYLIu6vpTVzg1wuUGzukL17/0EktOP2XmI1+X14OOlPIsq4HgWaj0Ak3z6UcwjGU+tHQtRWCo+kYLtU4l/2jl3p3PuZufcx5xzJ4f75zvnDjnnbgx/vzSUP4DOHBjrPcUzU7KryxAWesbX20Rr2kXpeK8S1UyPI6ExWsgYWgRjsWZ57lQsCLSpovPQ+Q1pdpZpxL+ln6hvOX/qaVz67w/hsdftwfq3XBPSN+mAhBpIXLeQP7vlxtlfTnrqM4kDLcmbHIe6E4immbDJBjK3abzv03Iim+q+pfbzichEtcjLYzSBDyA/lfhTAF7lvX8NgLsA/Bg9u9d7f3X4+/4R+aeNr+4P24ckGIYQZ2v14WiBZZLfsaAx7TBEY96vYRlH0lZWXlsly+4Vuu4WnLR/Ey+cMcXBb70m311ooeTJ7O6TGZy98+os0awvrsuirhv9OlkOd8YxaVwv38dP1H/FiTJ5f/i7DQoB61Ri7/0fee9lw/9n0R03tnVaREUeY/uX3l9kVq0BjENUMl/Gvpfd/wpbbWpgFLES63qobU1tzaflcd4JAEr4SIGvtU9ej11PzPHEq6ZwV1zUPeOIQIyqA/lKgupb7IxkVkctP0afBN92AVI5X91vB75rtlMyWR4k92Vt/1t5H2Ng8H8C8J/p+gLn3A3OuT91zn1t6aXkVGKsJw4dRuLuP9uiWsXUnoZWHqxOjhmgJTX3WJPm3zo7j9MtCgRWy6bOJSSecNaKQQ2zsUgDY/G+cvIaOkJdmyLEx47f/zzO/9iT2Pe9J6LZvSs94xDpTJyeUSBmTpO4IEu6RAuJyHyPBSR/k0n2nhycogVL3BG5strXBUgEim99dIPuDpRNv2kajjwHAo8IE6iRc+6fApgB+I1w6xEAr/DevxbAPwLwm865E613+VTi1cnOfkmFvf/0gBX3YEarLZdM0z4nO6rWWWnAJCfyqmeld+oCyKX10O/U+Nfp9eaoUvklO7yk8rfzxNddgmb0fvGOvoEBrll88vfiP40xWBqbPpUaKM9qlMf89rtw2Xtvwf73vgruhD35oAszqIkRAKl7rmwgmhBoGFB9P9vMDkrpBuysTx/4iiAeeg1Dyu+OEHdZuLSo9rPvQQjDHl3WPR2M0vRnI8RTiQdc27csBJxz7wLwrQC+2wdPDe/9uvf+yfD7CwDuBXDpYGaWzWU5diSS2Ke/rdmIO1dcgx1QX+l5tkZrvWudkFsyO+S+9o1nIadJo/E14MziUT/TarjOS/31bqlKaPBsqN/ngctbfrX2xkKe32N+jaPCk80xFjgZnrWHDuGif3Ub7viJ8+Bff0WuQhugXxR6sZq+H3CshvNJQnQgKYcT8xt0SrOj05K8ikQkg5jMh24Ar8SBnX6n3kehD37axjM3klOn2a25QFsSAs65bwbwTwD8Ne/9Qbp/unNuEn5fiO5U4v0jMgwV8enHzdI1qVTTg6eG6JcGRw1ckd88APVuNyBvYAYqxyxROmMjkqUdaKHGPCyi9pcEiWVna6FhCcXAT4zFB/Sdl7U3TWzmsJBn/pIdhkrz0OaAJu8xP3AAl/7yYbxwzk64ay7P+XD9rJlpnnI9mXTCgtT8JIvVVTI5yCZXy6px+6/v1/p967sdh2F7cXKU2mwztokOVyZOSm46RbO21vEwXcknFapDicYsEVqnEv88gBMAfEotBX4dgJudczcB+F0A3++9f8rMOOHC6JQFQWAhtfkuL/UR80qVPeJq9q1xb3TUGkslL5VTuz/2eY3YoSV7RvW32qXSPhlKXgNwKzO4SUolLuZt1evzt2LP/S9g45Qd8G98lUqfOwbx4EnClatyzW+vVi8SPCKq7c7MI18+9OmOQeWYFPEK79OAJ7odfFt2fwYwuA/We/9O4/avFtJ+BMBHhvLMyDUwTyd3DcAnm2uvKim35t+d5Jc2uG+Rd0TxGiuRAunMsr2HnLGaq8zS6dokfVFlGzIHOE3pnjVw+RlrGXE2nOftz5iG1UZ6WyzXUzSXUFY8Xdg6uT7hs83vj8VQYps18NffiulXXYXnz9uJk/efjvljj8eBlAQj8W3vkhur4PPdfK7/barc3oe6T0IZvQOP1D0OYt527JRGFPpSp0WENJjH4KMSlbtzaza8DkdMFsvhMaj7Ndv7euaMIB/NJGSfxQNJOb3hSll0nuCGZLBLo+OStjQj6UhHSf0sl+UWxRlae5m5JnRUX/7QIS83ndrIsConCYIRB6xty0df/IT/Al7Czy3Hl9o7GjCUe6K+W6aWNidJg3CfvRl7//R+vHDt+ZicdGIUAAASRF++hajnbhIcjiKKP+3AQFHdyS05HqwazCA/2+xBQFHp9YEl5FsgfLjpSvdNaEB3ZxyEszaDR6TljxD7BrWZW13J2yrQcgiBebp2W8QIErCJ7kuDb27QgaRkEkinZuRbz648yHU5QKreqvebtbWeP50XpY12v+AFeuC08x48EuI0wk87h9/c6E/MLWAYcUnKOotBdRIBsdxk0tuXnB+BdhJpxzQXmG9ek5f2l2cM/BoC3QyPFtsuBeCytmetJsFuPGaPfBm7/vg23PvDV8Dt3AkBjCNAKDN7OGPQTSZo19fj6pUg86IduEnTf89wIK70QY3exyPON2f9uRr68BQJlTafd99EPBCTU5sd/OaswwICXuFbD7e21ucjE0dox/ZghO4yWgoh4HesBBfLij0awRtSSQtgUHwH6GdKFiScloE2VlmtfDkPUjXbw4ftvJh/7/uOZnVeKWY+z8s38nPTaeo3ntTZ97PcGMcqEkjS+fzmRjr765nSEs5Wvoyil3AIFogiLA1BFQWJ0kwSsyAT3B7adGlfeAEX/tStePjvvxqTSy+KfYkFQRzUMtvPZlEb4yXG+I7WFFn7BNQE1PYCQnY5NkGLbX36XQUbkAlO2hJAu7HZt007h19f7+qhtVzX2NpgoCOIjXX0yM1awFXsYbavxAljTrOKn6fpLWHCMwLCh7b2lpdsbk6T2NOFQWbZ3/y7oQFVeo/vNZOO79AevSOJtgO7Oic2Ynje2+H9ElnRZuT2SgJjKqxBD1TLLIgDp1IWV9c6PUifhKSp9v04kk+g9sABnPN7X8bBi0/Fzh0r8Lff28/0iYbSDaBOKObhy/lkpPibB5zfNOvKEYEcevAv3tcbmWId2w6umUwCFtFrWlyub3238alpOs3taC8RHnVqPfx8AEkGegCn5FkYZya1bs//4/3W7jAW6dmmwF9WZul58qwp18fiI/4eMcPrwaVdYEttaJY9gPZX8qvH7i88SzS5wgShNbshUunn99yHnQ8fwHzPWu9iLCq0mFQqUnECIkYffu2dpzz2sr5Hpmq816aC0lx27rXPfKkz5c01DlhZiUuDL4LIQmUGAfSVtpae1IfNToktmQxDqOmYzmV9TDMvw24HYj0y/3WzrAKYmJWV5p1oCMZe+apJZSLzhfdr+ECNuEPXzLChdzWfzEvSX5qkz7S33o3Js4exfvouTE4/LSShwYYwgJpJH8fQ90FGYrH829NqD397+s/9NNkLYOFBNPiT/s0+CYGvpJ4jaUmEgOsBFrmj1lfFRooqbcFmdNNpKlElj2bSN2DJji0BcuFZD+zpmb+wPpu836S/o12tdrbp2c1ylGEeOX200xv1x/WiJbvSwaFV232M4KGBJjZqSXAz2Brr1AwMfBL6fHCKMtsyBx4g6Ufx1m37sPPWh3Dgja9As3MHncNAQnplCjTkVCQgYOuzJUVZLcjOBjAcifiUpIi7cP2N766xHo52lHgQbmz0KxdLbw74tgM5yIb1sxlthvBxIMf7es9A+GvX19MKK0Q9IuU1u1JIDbCI6HJH1HlZ+WoXaKkXIeJJaHQe3MR/wpf81+BYaM9YphroWf2dMYikjiEvN52WffhN00utovAzvdxp1Y19McJ3z9ou/OaVD/GVj5F4RPgwmKjbIeQ3f/Jp7PnjO3H3P381ml27gtDv1Ono0hv8+5vVFTQ7dvR5bW4kPEnbyNkHUp84yGW5b95jLUk8QPUtNKiXArStymczahZ+c9YJgoGAqEsiBNTAYaQ1OURD+Q2I/cbLSULyW7sSl4Aj6uRx45Bpe7lsYMWOp9FhXRZfW6f36DbRIGIpraIEiRctiN2SVX0j8EhLStzuiX+9roMeYHovhaU18cykvw3zwNoCfzvDaUxWSxJex5h8QdP0s03MDxzAJf/sZjz8/VdhesF5nQAMg9e3HtjchN/YQHv4cDfZcHtCNIbVfqCLliBL2NGpqFf/o/8A0O8i5LZRKxu+7VYKMqI2ZSAzeV6g5RACILWO1X9rwGY2IKXVM6IesJbdlQBQvVTu79XR+7hUV8mvaH4wiY89D1AhyztPNCRD2CT8iKYhdRLeYkgqNbCEbxaipf0PWqg6AspKqzRac9EqchQSCgAuaVy8vGel1f3B8uFgTfLQIZz7sS/hyb/0Mszf9KrEvnc71nr//MBzon7LfgBuayA4F63210Egx1Bk83m6gmECh/0yLe8MTP0HmphfdBIbgQ0sjRAYit6S25AV1NgsgOyorFMaS2W11QCLb+68I94zMrLzGZW+okWY7xY0kGR2TpFr0+wQojY3/Rx0OcV6qEGw8DceWPEpYRoqzWz//TjxvsN49qKdePY7XtsP1s3ejyBRyQFT+4kCsU3bOFmlofqbXqwsjCm91+0k5VEZY/1ElkMI6P6RgEQK+OI0PNPK/7FIsxYEQjVw0KLEXFlg4OtZlPkak89Whc2YPIfuW+0m19asr0lmZK0dDX0z65nlP1Az/zQGwen51p/dhOlhj2cubYDXXt69urGZDODM7ZhRe1pZiO69FooPERaltmqSMuOkY4RBS/LOVtGWHRNwJMUsKqlI6pnYYt2FkqByr2anWwDZIO8WqGZ0PC1orHu1chNBtyB/C7+Trl6Y4GFJOJf4HiJrAFvCuWZWkZfeWFW4yKv3OOG3P4vzfv9Z3PU9uzDZexLcpEmiA3VFKeFBKL8542ucSX5bu1qVsEjCjBm7D834if3LxWovhxBgKqnl8dqwtUO6KG2HZlPuZJZdPaDyZvzVyivNRkOCwipnbP58f4g/syxl1ugZnvlRAzWeAl3i2+rgVnq1zFjU1phHXgmSVSTr+2b1NdpH6nLTPrzyf78b9/zbc9CcfFLvICSvzmb9srXck5k/OgCly3kxhLmk1d6dzAatDMTBPp/Db84SsDcJVqrbY4CWQwgInwXHCnPWsdQ/SzjUtgVLOmMJKeex0glraUv5Lmo6lPKr5b8VU8Ea8LWy1fMOoCtoRZb6r59n2E/FpLA0FLNOQ+7RRv/xvRo/f/pZXPz9D+DZD+xG+7pX9stxbbeS5GebmeNPXLfnCELoBnC7sZmq8YxlGCCvGXMAqalR9TUZoOUQAg51EIPVGt6YobeqAqTGjhwAJc1Dd06rrBI5ly7JGSh69kyXodMuos5vJb1+l5yskrw4ZmCSvqBJyW8rJmJJtR8SxvoP6JdFmd9SG4wV4rGMFvPnnsfuH9+DJ67ahfnXXZU66Kyu9uZBOG8gagK0PTiCitqE0Jt7qG6xjLBjNCkncS4KY4eXaGPfqm8gWg4h0FDD6MENkD3l4u8MQ9CBLrkjy/UQ6YG4qC1dotECyfAXP9rEfhNDxDNZbakwpN0SvyUtZ6ua0hiyhNSg4GmBz92CU289jNmuCfw1l4dnhf5IuIQOWpJln9ny/cQQhYkIOx0B2cA9OHipW12NgVBLtDRCIIuBVrITrZnbEwBjqZTyLqUvkXkQhM5Ll6PJe3u5h3lOC83va/NnUdXeAtocHaY5ctDakZNGbF4a+85WwTtlDiTx/rOyB9rOMksK6Zr/egN2PHYIh87aiebC87r7BvKfmAOM1Jf6VTJhpf4RnYOQsRPQCmojZobrxpRzDo4mT4uWQwhwh7eiDMffbT74pBOILWoNdm4ELksPOs+uwUZH0PajBXrpwct5qQGZvqt9/AdmxZr5oFR47b+e7oyraErRI7BNf1s0JBgqqzoJ36ypjDUVZKauRXPS95WJEyMVDZXrHPwXbsOe25/Ao28+A80JJ6SmrGvgnMvuJeXzICdVXQcTjRqY4R5s+kTw8iDQ7c71YYfu0i8Ret9JK+sDGYNO9lJHGyv6ttPSFuUNTxtG2EZVPCRlW5s4aiCV2Lwyq1gDutS5DB//LH91HTetlAYv5cVBKvzmBm2QUTzFQdjkEX6S8pu8vaxBLc84JqH+zlIHaYeKy2/EWUphxeQ/28DZQDEEq15NGIEZzO/ejzM/dBvu+dFXYnLKyYkmkMT9SyrQ9HEAyK03hgqX6MJqIkxOPQYSn4PkcBPxHgxC0W9u9HsHKjQoBAoHkv64c+5hOnj0bfTsx5xz9zjn9jnn3jqUf3ipMwl4U01J3ebZGogSMnYgjQOEjq1dOYurBtI52G2Zl5o067IkpvMrDeiSQBjqeEqoJJF/rDQDGk+Wt1WH+JyW63Q6zj8B5SgO4FBb1zZkcXLR9iwPRrXJKAk6M4SBaMFkzZq8/yL0q/lzz+Gif34D7v2hS9Fc+IquOIlLuBLcdiVCcJig+p2FymRlDSF71nShxFamyTKhaHUxCrGMBQZhgR5ALNAYTeADyA8kBYD308Gjn+jq4a4A8A4AV4Z3fkHOIagSn/bSZdT91yq96mR9+iZWvLd5qSFL+xAs0nEGmR+jM2fCRfjWdRmimm08gGMU3xm6n3V+pSKHgzhMHMFae/ekdnqKA1giayBYfImGYmlbnIfWJLUmVyJtellCK9ZHhE/Hc3v4MC76wKP40lvPwObXX9VjSq3vHHootmCCG5Cvf8Krbgspft65HydOStpESPJP8RIJTWbRoBCwDiSt0NsB/FY4ieg+APcAuHbku2mHMdXqYUBqdFy9IR5qYNGiA9LKQ98f8pEfI0xqwqKgVWUzavTh7yPdJBFto7ZmAaVN2n61skszrn43uW9gQpKXFtj8e8jUWkQLi5NRz/v87v049dZ1HD51BZtffxUgm4KEZ+af9h7wMmORlJ0ftQqOlZD5HCjzdWA8HAkm8APOuZuDubA33DsbwIOU5qFwr04uIJjxukn/CwV7r/ttIKWlwaTKqtIQGGXhFbV8hwblEIA19M4inVjPtLX3ZEY0zQfllRkGdPSB5zyGBKa20fUsLp048RQdt9KT5DdEW2lbejb9kz/Hjic28cJZK5hcfH43WHlpUEjxy7Eb7cNMfJpOeSxmB5bwvSCwhlyotyoEfhHARQCuRncI6c8IT0Za8yslpxK3h/LnMVyzbkQCkljSmYNG4QxDVPro/H4tn5p7am1W1/7kUg4PDFaDS2VbPgD0m89kcKurfVx7reUYWlDW2QwbunwITAFE5G+p61xqi/iewhGAXDgxjRUGNYGntSXGStAJglM+9xge+9ozMDnjtF4F18uAAgiy449sETZs9z7i8WYXKKT1SfQi6T+p12DnxNTsWIvHnJVoS0LAe/+o937uvW8B/DJ6lf8hAOdS0nMAfKmQB51KvKvjmwGUJOqrBg2bgk2aC4xkdqKB5lZW7fetgceUBClp0s5pBLsw885my7b8kQSj0EFAdJ2tAB9croCJskqwvt6FqE60K2WCEVjVx803ZmOOYlRzKJL3rLMBrDgKWqglcQBycyQJNcYDtzYJ6HSUX/ecgTs1+SRnWHTtMb97P874j/twx4+di8mpp3SDUAZ2iGIUTVZe+pvP0R4+nGJMYeVL9hvEsyCkHRkYJP8Wyd9vbKA9dAjtoUPV77IlIeCcO4suvx2ArBx8HMA7nHNrzrkL0B1Iet1ghq22m4zZX+5b9mBynQItaahs5XlYm1mVqjvKvpT3LPu0lL8uS5OKPx9pqxiFpSmI2m8KReVwxfva2axwdF6ANZgjqEdqq6SX/LiOutPKN9ODka7j0pmpaVU0KBYc3A6W4LbMBeVlOn/6WVz2Izfh7h+9FO6cs/rZmtb8AdIASF2PB8qEthJvQ9lvIOmb1ZVeqAQhkmhrGnSsmMmD5w6EA0m/AcBpzrmHALwPwDc4564G4AHcD+D7urL8bc65DwO4HcAMwHu8tw6by0qBnxeCKmjyHnDIB3HRlh/wVBszgBJ7lDrB0OakTLWszEgjbc8jpkzA0kwZNQCZG9q8DSvt1sdJNNorMSHIfJAlRNY+EpVf+X7IQLK+O/Mqwls7n2VMG34lwkOwp/1sk+qtPfQ8uoMAXJJne/gwLvmVR/Hwt74Mp910Mqb/7419+mYSvfl0v9fnDkjMAte43qt2Pu+PcGTTZDIJQ4PNllwL1uT8mEFwjOmktZf5Nzbf2B+7BJQHHhCPXsqeybuW55g0fsi7dzgy7FUerPo+0xA+UBNUzqU8aAGR2bsDzy0ai4VY7wE9f5Y7bsnuZkejQr79tTGwuCxdbq2d+Ln85gM8rO9g5cVCpwmHierJSb9T4sc1mH/9VdjcM8WOxw8Dn7sl3u/3ZLgOQNzcMPu58BPxGwpf1p2TSHELqL2yCE/O4b+0v/MF7/3roWg5PAYd4Ahgina8atCaw0N8Dxg1c5qbL0oCIC+onrmrLP1YarfJ4BEKZ1cpf2TZMShmSZUsts+AiZXcUy6tLADknaG20D4MOu+aOVDMcwDXGUqLrj9O/uTPsePRQzh82g5MLjq/z4p9Y6xVAeFbNAAxefTM7prMGSnha0S9l0MINDz7t6YDTgwnzWuw8WHvTtnbWAZ2QPZYRkPAEYFkWb7qOjnuS+dB+Zrx+KyZbaumglHXqiBlGx9IQ6cBef2tGVBCgluRcnRefM2Amw8zm9YCIg+Kz/BdE+CMtT69KaykRTHY5/qdrUUX5DAwY3/T5o700+tuwe47H8dTbzoTk5NOjPVyQQvAfJ68G4G+pl86bw8d7jRl8dmQU4ZDukgc8nzS74lY/q3EbdgqqUC15Gy12WY8UyDeZz93mb1CPHdBVrubxgBnW7Ekyfn4a+kg2s8//HdyMrH3qR96zEzUtcJsIvlYR26X0pc0Fgu8ktfY5lShveMGFp23PA+HcMRjzEs8RhduAvEUX/HQDQEHA8AmkXQlYk8WH8ByGQ7lx/j/GkfgAaA1Sp2/EoBuOu3e1+VRvfJIx8phyjnM770fez92Cx79riu65VmZvcNMH5dsQ358EKrf6FZ13HQaYxdI+yT+NZM0tHyibVRoOYRA0yBuICIpnUepUevR1o7DODjb9EjuIN2TmWzARrQOgojX6l6/3Kae8aYcmQEo/LQesFGAMD+m7cpYhXbn1R5jGjxDrxURCBY3sIQB2YN0Pn6PuLRotYvc48AvSXs3kT/tjSg8ySEcaCZZB05mZK5/RagCiMeuA0jDr7NQ4fckjPl8jnZ9PWBVLtnAlJ2QrTcf6d/eoz14EKf/6ufx8D98HSbnnt3jARsbXbtuEl+u6ez/cHZBs2MH/LxFe3i9P5Q3CIO4zbgQX6CkXQsthxCYt/2BpDX7LXyw5IwCluJA6l8uNMZGNTu0ITDkPf7IhgBLeW5TbSUzZ9SMafFn8N5rOtSRZRYesqP1bM/urNZ5jjVtg68ZzJO6yz4E3o6crfNrfKbtta+Qf7pxzDCjVFjuoqCwokRxfdgkoB18HY7kbEFSMjG4bwRB+ooPPYAHv+NsbH7Nq7okcpYBL5MqV2CfaBhtFl8ghjyLB5wobKVCyyEE4DupWLO3aeAlJxOrWTA7m06rkkA/IyUsGDPtkAsyYwW1NDrvWpjyBYRRXGKzhMdYEyG2aw8sJZFwNJ8y2DKTgdRwzQvQLx/SPfvbuLxNEw3P4KVvEHtm10LMUNfNtDQQay69melk8Uo0e+hhnPGFw1jfO8Xsa16Vthn3Z0NQZjhFUm8DQ5F7R9tZ6JgTD66CehP/E7qcIPKV94unADP4pMtKMjBmRp2HpBuibGAsgGTX1r/Hlq/J6lCU39AKTZoXmx4LtkuJlHloRtktpdd88fMi7tL2WsAYnopp0n44+dMbsOOJTRw+daWLUKTNpviT+jTt5uQDfBNno8IKWS2k/3IIAY/OnmE7FRjehy6/Q7puL3XaUR2DOoTaJjNTTOxS+67UsTg9A5PVdIWPUFrCYjWyBmBawTqELCyAZyp5x7LhtfrMs7Pemp2o7aIRGHY21yEDIFW52gXZrF+bD05tmum6l9qoZJIJWYFfEg2I6lHax5HUp8HkT2/AiTc9jiffeEa3amAJAlkNow1EAODntMVbgpvyQSjTlQg26pDompZDCEwnXeWGBh0QtQQrsCOAuMEiqrfihMH2IpWTRAXmzmyZC9a9ksnAyzI80EVikz3vGtcj7loAWWqxbp9m0n10XjUB0gER2qCLPjNN82U7XdvTwcRy0xVExxltguj2Vc5aSRvHurALNzm7cJ5DHpmSj2Xe6LbSZgS1XTqjDggJaUc5eJTBae4/7TydgCQdC3bvMb/nPpz6iX145J2XY3Linq4oDiYaApTI5iGJU+Am/R4EARa75uhMOTdp0OzahWZtLS6dl2gphICfGo5A3nfLbkB25DSjy3360Kl0HDyR7oX4eH1swmBryYnE2utQ7umoxpWZQ8CjRGUVrUXseRFejGDzshWHmZKDKHXk3xCaytRuChTXkKV+WrhQ5+0QaDrW3dofAMCtTEnY9W3qW989szQTwQySVZGGTEJjgPP7ySxs1z2JCMR5I1WTe+9NNSwyzbDtjwDPClP5aTLaef7U03jZB27EgTe/EtMzTutnf2n/0Dei78R8HoKM0NHsMjEG4eN92CQ2m3UTTAXfWgohgDnNCjJzNJOIgKbRU1w6W8s7pT3TJZW4kC5BfZWK6FZoS6ZWpSuqa4rW0gymnaNKA1hCpNHJNrV69OGm0tlQ4uF3J+f2/hQmeCZ1M8yUZOMPg2iyxJXgGwEsbL2tEVhlxRmzABTz8qU2TfRvR9qL4eiUReXRWpQuPzEz2jyN5kkLbIt8F034hD+7D8+/4bwuVJkM7Ok0qvagPh5PHpbdsL5fbvXzeYzWFX8v/RKholFhrhV4lYWy0mhziaJdZ5sX6YxD6+psu2a8GrOJRRY6bfGeLB31s1GWl3TsUrg2ydvIJ9HElMNNooV532sxWfkK06FvlIXBsoSn8Kr8KjJVntunUQJP11fK02UkvBPArJfWxuAsnK9oGJGn1u4jeqKYzzF//EnsvudptLvWML3w/NjWfj5HDB2OoFnpWINBWHSs91ptxAMqY2B5hABL/hJCrZdArD+rsqXlphJ5jwxz8G15YAH5h64tL1ozQ4l3eaZ5rtWDASzuaJuGxpHY9k3qI0ACMFl6haimhkkkAjBTe+0VBwu1zvEe1/cPJZwH94sMaoe9UOxPBy6sjljtzROIo+Cq2SRS0RqBaK7O9+1Hc+Ag5nt3d4Ig1DHb6CdhyvVKFwmKTitJV9AsWhohkDmoWCBYbYZlCRzvNf1HLaTvP7oaNAmYZ9jMkqbEi565pNMGJDdJR88Sqg30Ids/0y58LxwMzSfuR5clKBr02v7NdtZxmwF1AajwmexkHlFrfboXwBRO4f3oYmyUJXYyvZDzk9SBvok108s7WggJyfctrfGL7Z4I377vuqZzMZ48/QKeed2ZmJx6SmcKCA7A0YWB3NVY8LJ2jvbgQbSHD9v1JloKIeDmbe9/rW1UFWG2819f7e2lldVe8jaT3qdakFshFbkm2fRhqHgxCg+Qqq88Ywd/7pg/MKiK+vm8d7tVtnjiJp3MMM5QmxUAp0G6xJlEdebCUpfEw/ebG/0KSygrRrCZ0pFWxFMMjSXfSwvPwqCKWI5lr1OEXB/s2m5jTT/bynW0eXlQCx6QmBBN8pzNj9gHtUehFqhihqysInWq6kC7GD1b4Ry8H8CaWKSO8B6z/ffjpD++Gw/8vUu6WX8y6XwDJF3Ydt8eXo9l8fmEGYBc0X6XQgigaSJYlSy3iI1GjRnDXAH9O2w+MIDGgyc8jx1ZUNWStGdiu059vMSjjN+VcvWAk06lVWk9y+g9Edrc0L4JKp8aEJTXz9CGpM5B8PIJuEk0IMkirCBUvSElb+mw05X+Hfa9V+vprJXFY7wFVBV+lJCPPIiKLm2o+cvu6xlcYUZktib1FUHCIJx2kpJy+b8QC89Qj/mTT+Hcn74Od/0fV6I59+Xg8wilLFleFu1SwotHjKwGIkvRxSdfQfLs4MPSmUNrCZVi6QGd+qdXCRQQNrizqvTRhLQqLWotz0R60Jqd0+UDPyknt/Oy53qGsvgdIi24tCkD5KArOxdZPFmOMlwWgYVJWimbv69e2rXUeeeKS8AiwIq8MJ8ywGvmDJs8mUnJgtRY5sy0r7wfJe+j61evfP/DePivnIX5tVfAEY9xSRZAcr6BZUYvvSYAIIkzCKgPbwwQawA4l3ZYjfDyO/qepoKanZGeyXUeui46z1IZpVm0NriOlLgT1wSL7uyaB6sjcj7Bbo2gVun7Jt9Zf9NeOxh0ZbZmZOYpqevAzJnMrmpZcQSGkJXN/7mu1GdmDzyIM697Ac+fs4ZDb351b/tvzoIJ1289NnGqgX68HEKgJKSKM6Cy6wCa7bWfuuGWy3lUZ2ALWS7MEtpVNnlnoBNoTzn9HLB3vvH7NaFW6gTWO7p8ayDH8hWKbq0KFCg5Xjt/WGj7frDUfOH7fORgUDUDW5uuCuXo/JI0srxq7kNRM7u8rzUPna+BFcA5uM/chB1PzbC+d4LmikvCNuTUhNHnDRTbUdFSCAHnKWwSYDZC1vnYVpQ0nD6k64+GNsCp2gys1dISbwCSWHZWXlKWVgmTRqh36uKR6UA+M1sCz1Tdw0qA5d5cI7G/VZtmuIiumwI3oxOVFuwsXAwtJK4ahHpnOxRHCqKEv9Ku0ugfQhpI5NP39ZB7VROvsfMB1KqW3f6rf3g99t70NB7/qr2YnLI3CsO4ciJmwnSlC/4iZxcOCIKlEALeIfVn16q+akw5fNFSzbLjneNLbK8O2H0lyuzH8FcLQ14TNIn6R3U11OEkQArnkeVtgVE9yJdQwFd6kFQBSdxmqj7m2jQHYdG2sAhK8nhLhHn4zY4/6cGdfZ16z0lpK1pVYp5EOIkrOGMOhVk9a2MdRYonBsvck7I1UOl6t96kvJBv7/5bXwKf37YPZ3z8Xuz/vgvR7NyZr07w+4R/HdHegcKpxL9NJxLf75y7Mdw/3zl3iJ790lD+ADDfwWvnqaqfeKtJXfUBDbJmOp32KwwipXUcv7iRQ/kB2JXPvOUib5GZgcHPHUgGg3OpsOJ8tbYgHUMPLJ5dzdlf1UurwPTbra31nnfUiRKvt8RRx7CbeRCaZkSb/Je8k1iCgvaHQZR+Z1LjWyUAMrMk3A/gcmISFG39IQ2xpUmEvi1rqfxnhKHz2nXaaicrRqOkCYJl/tjjOO9fXI/H/vZVmJ51ZjcGplO4nTu75LPN9Ehy7eimaPDcAXSnEv88gF/vefLfJb+dcz8D4FlKf6/3/uoR+UZqZh5wStWXjTZqg0+mHfh59/2dg2+VbR077Zw6t5gGBXWT3wfSGUcGJGkfbuLs5TgZ8DLrJHY0nRJrDUwlCFzj4Ge60wtPBdCL2jC2AedN7dkdaeXhvYtCNQYWsfwT2nkqXL3v2jXkHX0JNLhLy7XCTnGTDej78LfkNgXSJTqO/8+Cypqp+b/WwvgZP6dvL7EH/fp6LrhL5Nv+O+oyuCy9eS1oRdKmchbCmR+9C4/91Utx6o174W/ZB8zlnALDaavC36AmUDuV2HXOzH8TwIeG8qmStAkvFSYbOQrqXknFT9RstbzEH5rzyXhSTaMGsQiSaohnXkbS+QyofXzde9VRB6nNaFZHMtTqvG5k40q7WSHBuNNz+wPKL4PUZsv0Ye2kiFvkKncWo7E0YLX9rduIZ2LWwjJb3mXfzbee3LAHNErNW9GUKwhz7gPoBef8iSdx2g3PYnPvDuCqyxCjDrOJPAIcPFJM4GsBPOq9v5vuXeCcu8E596fOua8dk4m32o7URtOXPP4eqIIevKXnNelcU/8zwWOAQVsh7lTZvgSyHbVQK+ZXGAiaWMux/PK13Sn3QvvGdflS3krDMXmTe6oDZ2HIS+/WaCvfw/qm7EBm5WuZZHLfynOo/AJY2t68D6tPHcLG3h3Aqy7u215PfpU+cqRC4J1ItYBHALzCe/9aAP8IwG865060XuRTiWeHX+i3uM6VLeXoAEenOg3bqNputQsN6QsADAuCEtintQ+5pwfV4KwwsHYNpDwqkCnlyUD0Mw2ktLRpdFRx5glONjFgSahjcY+HM6Il606vcY8QtCQOqpBPdIGl/QyST4bzFNuxTb9Rqf5cj3jfWEK2gqSWzI1k1UW1Q61vaOFR2oEo7dQ4tDfvw9rjB/HENSdismd3Wv8aaB1oy0LAOTcF8B0AfjuW6f269/7J8PsLAO4FcKn1fnIq8XSXzjyqldEtmJ71++XV4A/2UjQdvE/2W0fARdvSWoVkFVZ1Dj7tpRj5hk0Y5Q7bI9Xp2n5Uca1Zh4WSVqtZMJY0pJBns2NHz59uS11mqJ8cRca4R7Z5KNSt2bnTHvhUVvIeaXk6qo+fbcZNMXIAp2AUboXA2vANuuhH0/6b0Rp6Jkh4N19NcGs1P2lrAu+4PJkcBDexhImhlSX7LnQaxkT4GfX79qY7cMZv34an/8oV/b6K6Qrc2loYA+WhfiSawDcCuNN7/1DPqzvdOTcJvy9Edyrx/qGM/JDjBw1EGfxxNmAkViPFznX+3QJKKWQ6U/PZhxwwZ1jzXDpL1c7cXX2yHNd3TJfmm8xMLORc2ukq9qOb9rvY4iYrIOxC61dSsgHOnY2W8uKmHWtWp2/QHjyYDjSe8b1P92v4PvINH7aRtKm0zWyzO5VXljQ3NpJv7KbTZPNNko+UK9+Wwnwl9Womvf+BCF0gP30ofJdsCy9jIUzy/XjJkPcvhLxjFKp4KnHed+IYEL5b2TvT3Z8fOICTPnoDnvnuazE55WS41ZX4jY8o0Gg4lfgzAC5zzj3knPve8OgdyAHBrwNws3PuJgC/C+D7vfcmqJhzYki6nolcGvJ9+e3pwBE92wL9QBSfdXlP/vO9GgjHOICg1aXoMQXVj9fJe2cPXQ6p36ojZPwUVD/eK+FnmxF87WPRqTrrOnoKPx6Wonp//wogpjuxpKHBUIw0BPR1ZkxHtUsCZGreihn3/CYHedIuP11mE5beYn2DSZI4CSW8ke3Ok0slAE3WFhY4yRMGrzqR1uo3NnDqJ/bh4BsuBC46NwqCGg0uEXrv31m4/3eNex8B8JGhPLP3Jg7g9mHpqQAO86BzVtOsZSIgbTTvEZcKe+YB6xhza9bjMpnn2rss3TU4NpnEM+asQd5vh2VzQJkyzQTxyPYsP9EKaH/+iticKp9auC6gx2e8R7Ls6PgMRqMD9xnE8syzCLjOyY2KXRuEcMIbl13CD/wcaPrYDh3/qUbiWw9sztL6mnxRudIPLSoJcSgTl3kvCTXdBwLNn34Wu+5+AuvnnYLprvPgbtgHv1luvyMFBo8K+QbdXmlVKXNzSaCidNNSufTc/BikQVjP9LVIfd3RsjItDaZXu/udYSWAqw7sVMvMhEbfyZwFapXyYW2jlE6rsVY+TEP1KmkZ/DzmNQ4Ey1jQMQbzBElcg6Rcy2mqRlY6ZQ4WQ4NrTKGSF3yL9v4HsfLMYbRrEzTnvrz6nZdGCGRACNRswEtF2ttObEi9fJUMtgKAxhTum8ecqTQ98yX7nN7V3mO0/OZDxBgJGGFSKaAIU0SufR+52MAzxHb2mzO0G5u5o5OlBWgblp9RG5tuw+E982Tg6gA31ritsFwiuFkjKuEXum4kBJNoSaUAMZo/+WltXx9DasJKtgIzWZNjBgQb3/qGO7H6xadw+PxT0OxS4DvRUggBAEAIp50g/0BU07ih+2Ai/QdmlDn5KBQdKNloURncSZQjfq7tYL1sp+3RCiLbR/pte+CLy6Fyo0s10HcEPoZbPZN6R22JtIB4jwCypFwWqpKPRLzVLq/yP+SVnJ+g+Imen7S7LflOhnml9ydk0ZKYBz2oJ+rbFL5Fs7aWgWcReONytBtvdD1Xph7xmxELJGv7sRYAZArEcPNAH2FJrwAZdZw98BDWPncXZq83F+m6vLMAhseBnHOPA3gBwBPHm5evIJ2Gl059X0p1BZa3vud570/XN5dCCACAc+567/3rjzcfXyl6KdX3pVRX4MVX3+UxB7Zpm7bpuNC2ENimbXqJ0zIJgX93vBn4CtNLqb4vpboCL7L6Lg0msE3btE3Hh5ZJE9imbdqm40DHXQg4577ZObfPOXePc+69x5ufY0EhBNstIeTa9eHeKc65Tznn7g7/9x5vPrdKhRB0xfo5534sfO99zrm3Hh+ut06F+v64c+5hCq33Nnq21PU9rkIg7Dj8twC+BcAVAN7pnLviePJ0DOnN3vuraenovQA+7b2/BMCnw/WLlT4A4JvVPbN+4fu+A8CV4Z1fkJ2nLyL6APL6AsD7wze+2nv/CeDFUd/jrQlcC+Ae7/1+7/0GgN8C8PbjzNNXit4O4IPh9wcBfNvxY+XIqBCCrlS/twP4rRB74j4A96DrBy8aqoXcM2jp63u8hcDZAB6k64fCvb9o5AH8kXPuC865d4d7Z3rvHwGA8P+M48bdsaFS/f4if/MfcM7dHMwFMX+Wvr7HWwhYOzT+Ii5XfLX3/hp0Zs97nHNfd7wZOo70F/Wb/yKAiwBcjS7M3s+E+0tf3+MtBB4CcC5dnwPgS8eJl2NG3vsvhf+PAfgYOnXwUefcWQAQ/j92/Dg8JlSq31/Ib+69f9R7P/fetwB+Gb3Kv/T1Pd5C4PMALnHOXeCcW0UHoHz8OPN0VMk5t9s5d4L8BvBNAG5FV893hWTvAvCfjg+Hx4xK9fs4gHc459accxegC0F33XHg76iSCLxA347uGwMvgvqOOXzkmJH3fuac+wEAfwhgAuDXvPe3HU+ejgGdCeBj3RENmAL4Te/9J51znwfw4RCu7YsAvvM48nhEFELQfQOA05xzDwF4H4CfhFE/7/1tzrkPA7gdwAzAe7wvheFZTirU9xucc1ejU/XvB/B9wIujvtseg9u0TS9xOt7mwDZt0zYdZ9oWAtu0TS9x2hYC27RNL3HaFgLbtE0vcdoWAtu0TS9x2hYC27RNL3HaFgLbtE0vcdoWAtu0TS9x+v8BGS+oO7JcYwEAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "eps = 1\n",
- "noise_scale = len(public_flat.columns) / n * eps\n",
- "\n",
- "def compute_marginal_distribution(df, column, noise_scale: float = 0):\n",
- " marginal = df.groupby(column).size() / n\n",
- "\n",
- " # Only place where the data is accessed\n",
- " if noise_scale > 0:\n",
- " marginal += np.random.laplace(scale=noise_scale, size=marginal.size)\n",
- " marginal = marginal.clip(lower=0)\n",
- " return marginal / marginal.sum(axis=0)\n",
- "\n",
- "def compute_conditional_distribution(df, column, parents, noise_scale: float = 0):\n",
- " joint = (df.groupby([column] + parents).size() / n)\n",
- " joint = joint.unstack(column, fill_value=0)\n",
- " \n",
- " # For some reason this is necessary (?)\n",
- " joint.columns = pd.Index([k[0] for k in joint.columns], name=str(column))\n",
- " \n",
- " if noise_scale > 0:\n",
- " joint += np.random.laplace(scale=noise_scale, size=joint.shape)\n",
- " joint = joint.clip(lower=0)\n",
- " \n",
- " return joint.div(joint.sum(axis=1), axis=\"rows\")\n",
- "\n",
- "def compute_bayesnet(df, cond, noise_scale: float = noise_scale):\n",
- " bayesnet = {}\n",
- " \n",
- " node = cond[0]\n",
- " *parents, root = node\n",
- " bayesnet[node] = compute_marginal_distribution(df, root, noise_scale)\n",
- " \n",
- " for node in tqdm(cond[1:]):\n",
- " *parents, column = node\n",
- " bayesnet[node] = compute_conditional_distribution(df, column, parents, noise_scale)\n",
- " \n",
- " return bayesnet\n",
- " \n",
- "# This technique does not actually work, as any small amount of noise\n",
- "# completely destroys the conditional distributions\n",
- "bayesnet = compute_bayesnet(public_flat, cond, noise_scale=0)\n",
- "\n",
- "plt.imshow(bayesnet[(\"PUMA\", 2012), (\"PUMA\", 2013)].to_numpy())"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "7fa04fbb",
- "metadata": {},
- "source": [
- "Above, we plot the PUMA transitions between 2012 and 2013\n",
- "\n",
- "### 3.3 Sampling from the first order bayesian network"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "0be6fb06",
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|███████████████████████████████████████████| 237/237 [00:07<00:00, 33.59it/s]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 539 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 80.0 | \n",
- " 1 | \n",
- " 80.0 | \n",
- " 2 | \n",
- " 45.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 55000.0 | \n",
- " 50000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 50000.0 | \n",
- " 400.0 | \n",
- " 715.0 | \n",
- " 745.0 | \n",
- " 77 | \n",
- "
\n",
- " \n",
- " 875 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 80.0 | \n",
- " 1 | \n",
- " 80.0 | \n",
- " 2 | \n",
- " 45.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 10000.0 | \n",
- " 10000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 10000.0 | \n",
- " 80.0 | \n",
- " 715.0 | \n",
- " 715.0 | \n",
- " 125 | \n",
- "
\n",
- " \n",
- " 1974 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 60.0 | \n",
- " 2 | \n",
- " 65.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " ... | \n",
- " 1 | \n",
- " 10000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 60.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 282 | \n",
- "
\n",
- " \n",
- " 2457 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 40.0 | \n",
- " 1 | \n",
- " 40.0 | \n",
- " 2 | \n",
- " 65.0 | \n",
- " 4 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 10000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 80.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 351 | \n",
- "
\n",
- " \n",
- " 3122 | \n",
- " 17-1001 | \n",
- " 2012 | \n",
- " 20.0 | \n",
- " 1 | \n",
- " 20.0 | \n",
- " 1 | \n",
- " 30.0 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 85000.0 | \n",
- " 85000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 85000.0 | \n",
- " 501.0 | \n",
- " 915.0 | \n",
- " 915.0 | \n",
- " 446 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1177343 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 20.0 | \n",
- " 1 | \n",
- " 20.0 | \n",
- " 2 | \n",
- " 60.0 | \n",
- " 6 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 100000.0 | \n",
- " 0.0 | \n",
- " 5000.0 | \n",
- " 0.0 | \n",
- " 100000.0 | \n",
- " 501.0 | \n",
- " 600.0 | \n",
- " 630.0 | \n",
- " 168191 | \n",
- "
\n",
- " \n",
- " 1178043 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 100.0 | \n",
- " 1 | \n",
- " 100.0 | \n",
- " 1 | \n",
- " 55.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 15000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 501.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 168291 | \n",
- "
\n",
- " \n",
- " 1182138 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 140.0 | \n",
- " 1 | \n",
- " 160.0 | \n",
- " 1 | \n",
- " 35.0 | \n",
- " 4 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 80000.0 | \n",
- " 80000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 80000.0 | \n",
- " 501.0 | \n",
- " 845.0 | \n",
- " 845.0 | \n",
- " 168876 | \n",
- "
\n",
- " \n",
- " 1184966 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 60.0 | \n",
- " 1 | \n",
- " 80.0 | \n",
- " 1 | \n",
- " 55.0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 100000.0 | \n",
- " 100000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 100000.0 | \n",
- " 501.0 | \n",
- " 645.0 | \n",
- " 730.0 | \n",
- " 169280 | \n",
- "
\n",
- " \n",
- " 1186261 | \n",
- " 39-910 | \n",
- " 2018 | \n",
- " 60.0 | \n",
- " 1 | \n",
- " 60.0 | \n",
- " 2 | \n",
- " 65.0 | \n",
- " 4 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 25000.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 200.0 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " 169465 | \n",
- "
\n",
- " \n",
- "
\n",
- "
668219 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "539 17-1001 2012 80.0 1 80.0 2 45.0 1 1 0 ... \n",
- "875 17-1001 2012 80.0 1 80.0 2 45.0 1 1 0 ... \n",
- "1974 17-1001 2012 40.0 1 60.0 2 65.0 1 1 1 ... \n",
- "2457 17-1001 2012 40.0 1 40.0 2 65.0 4 1 0 ... \n",
- "3122 17-1001 2012 20.0 1 20.0 1 30.0 6 1 0 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "1177343 39-910 2018 20.0 1 20.0 2 60.0 6 1 0 ... \n",
- "1178043 39-910 2018 100.0 1 100.0 1 55.0 1 1 0 ... \n",
- "1182138 39-910 2018 140.0 1 160.0 1 35.0 4 1 0 ... \n",
- "1184966 39-910 2018 60.0 1 80.0 1 55.0 1 1 0 ... \n",
- "1186261 39-910 2018 60.0 1 60.0 2 65.0 4 1 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "539 3 55000.0 50000.0 0.0 0.0 50000.0 400.0 \n",
- "875 3 10000.0 10000.0 0.0 0.0 10000.0 80.0 \n",
- "1974 1 10000.0 0.0 0.0 0.0 0.0 60.0 \n",
- "2457 1 10000.0 0.0 0.0 0.0 0.0 80.0 \n",
- "3122 3 85000.0 85000.0 0.0 0.0 85000.0 501.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "1177343 3 100000.0 0.0 5000.0 0.0 100000.0 501.0 \n",
- "1178043 1 15000.0 0.0 0.0 0.0 0.0 501.0 \n",
- "1182138 3 80000.0 80000.0 0.0 0.0 80000.0 501.0 \n",
- "1184966 3 100000.0 100000.0 0.0 0.0 100000.0 501.0 \n",
- "1186261 1 25000.0 0.0 0.0 0.0 0.0 200.0 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "539 715.0 745.0 77 \n",
- "875 715.0 715.0 125 \n",
- "1974 0.0 0.0 282 \n",
- "2457 0.0 0.0 351 \n",
- "3122 915.0 915.0 446 \n",
- "... ... ... ... \n",
- "1177343 600.0 630.0 168191 \n",
- "1178043 0.0 0.0 168291 \n",
- "1182138 845.0 845.0 168876 \n",
- "1184966 645.0 730.0 169280 \n",
- "1186261 0.0 0.0 169465 \n",
- "\n",
- "[668219 rows x 36 columns]"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "def generate_sample(columns, cond, bayesnet, size=10):\n",
- " synthetic = pd.DataFrame(0, columns=columns, index=np.arange(size))\n",
- " \n",
- " # Sample the first column as i.i.d variables on the root node.\n",
- " node = cond[0]\n",
- " *parents, root = node\n",
- " dist = bayesnet[node]\n",
- " k = np.random.choice(a=len(dist), size=size, replace=True, p=dist.to_numpy())\n",
- " synthetic[root] = dist.index[k]\n",
- " # Conditional distributions\n",
- " for node in tqdm(cond[1:]):\n",
- " *parents, column = node\n",
- " dist = bayesnet[node]\n",
- "\n",
- " if len(parents) == 1:\n",
- " rows = synthetic[parents[0]]\n",
- " cumsum = dist.loc[rows].to_numpy().cumsum(axis=1)\n",
- " else:\n",
- " raise NotImplementedError()\n",
- " \n",
- " u = np.random.rand(size)\n",
- " k = (u[:, None] > cumsum).sum(axis=1)\n",
- " synthetic[column] = dist.columns[k]\n",
- " \n",
- " return synthetic\n",
- "\n",
- "synthetic_flat = generate_sample(public_flat.columns, cond, bayesnet, size=len(public_flat))\n",
- "synthetic_bin = sdnist.utils.stack(synthetic_flat)\n",
- "\n",
- "synthetic = sdnist.utils.undo_discretize(synthetic_bin, sdnist.kmarginal.CensusKMarginalScore.BINS)\n",
- "synthetic = synthetic.reindex(public.columns, axis=1).sort_values([\"PUMA\", \"YEAR\"])\n",
- "\n",
- "synthetic"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "b5545769",
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- " 10%|████▍ | 30/300 [00:00<00:03, 86.79it/s]/opt/homebrew/Caskroom/miniforge/base/envs/py39/lib/python3.9/site-packages/pandas/core/indexes/multi.py:3554: RuntimeWarning: The values in the array are unorderable. Pass `sort=False` to suppress this warning.\n",
- " result = lib.fast_unique_multiple([self._values, rvals], sort=sort)\n",
- "100%|███████████████████████████████████████████| 300/300 [00:04<00:00, 71.09it/s]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "493.97682178239444"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "score = sdnist.kmarginal.CensusLongitudinalKMarginalScore(public, synthetic)\n",
- "score.compute_score()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "3103cb23",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/census_subsample.pdf b/examples/census_subsample.pdf
deleted file mode 100644
index 57a6d5a..0000000
Binary files a/examples/census_subsample.pdf and /dev/null differ
diff --git a/examples/minimal.ipynb b/examples/minimal.ipynb
deleted file mode 100644
index 5c22038..0000000
--- a/examples/minimal.ipynb
+++ /dev/null
@@ -1,116 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "946f4143",
- "metadata": {},
- "outputs": [],
- "source": [
- "import matplotlib.pyplot as plt\n",
- "import sdnist"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c2ffe2d4",
- "metadata": {},
- "source": [
- "1. Load the public dataset :"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "c7ba484b",
- "metadata": {},
- "outputs": [],
- "source": [
- "public_data, schema = sdnist.census(public=True)\n",
- "dataset_path = sdnist.load.build_name(challenge='census', public=True)\n",
- "public_data"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "b498877f",
- "metadata": {},
- "source": [
- "2. Compute k-marginal scores :"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "618c29f5",
- "metadata": {},
- "outputs": [],
- "source": [
- "fracs = (0.02, 0.1, 0.5)\n",
- "scores = []\n",
- "\n",
- "for i, frac in enumerate(fracs):\n",
- " synthetic_data = public_data.sample(frac=frac)\n",
- " score = sdnist.score(public_data, synthetic_data, schema, challenge=\"census\")\n",
- " scores.append(score)\n",
- " score.boxplot(idx=i, name=str(frac))\n",
- " \n",
- "plt.ylabel(\"Subsample fraction\")\n",
- "plt.xlabel(\"K-marginal score\")\n",
- "plt.title(f\"Scores of subsampled datasets (census)\")\n",
- "plt.savefig(\"census_subsample.pdf\")\n",
- "\n",
- "scores"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "318268c7",
- "metadata": {},
- "source": [
- "3. Display the k-marginal score"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "55cffca1",
- "metadata": {},
- "outputs": [],
- "source": [
- "# As a map (only works on the public dataset - IL/OH)\n",
- "print(dataset_path)\n",
- "scores[0].html(dataset_path, schema)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "8567d8c6",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "knexusnlp",
- "language": "python",
- "name": "knexusnlp"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/pgm/pgm.ipynb b/examples/pgm/pgm.ipynb
deleted file mode 100644
index bc39f13..0000000
--- a/examples/pgm/pgm.ipynb
+++ /dev/null
@@ -1,1117 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "9d397bd7",
- "metadata": {},
- "source": [
- "# NIST-MST on Census dataset\n",
- "\n",
- "Adapted from **WINNING THE NIST CONTEST: A SCALABLE AND GENERAL APPROACH TO DIFFERENTIALLY PRIVATE SYNTHETIC DATA** (https://arxiv.org/pdf/2108.04978.pdf)\n",
- "\n",
- "Depends on https://github.com/ryan112358/private-pgm."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "302b3208",
- "metadata": {},
- "outputs": [],
- "source": [
- "import itertools\n",
- "\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "import networkx as nx\n",
- "\n",
- "import scipy.stats, scipy.optimize\n",
- "\n",
- "import pydot\n",
- "from networkx.drawing.nx_pydot import graphviz_layout\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "from tqdm.auto import tqdm\n",
- "\n",
- "from mbi import Dataset, Domain, FactoredInference\n",
- "\n",
- "import sdnist"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "d44b3abb",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- " sim_individual_id | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 517534 | \n",
- " 164 | \n",
- " 0 | \n",
- " 8 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1 | \n",
- " 6 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 7 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1166909 | \n",
- "
\n",
- " \n",
- " 737386 | \n",
- " 143 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 10 | \n",
- " 3 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 581009 | \n",
- "
\n",
- " \n",
- " 990959 | \n",
- " 179 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- " 6 | \n",
- " 5 | \n",
- " 1 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- " 570487 | \n",
- "
\n",
- " \n",
- " 189454 | \n",
- " 17 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- " 5 | \n",
- " 0 | \n",
- " 4 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 15 | \n",
- " 15 | \n",
- " 1 | \n",
- " 1 | \n",
- " 15 | \n",
- " 26 | \n",
- " 76 | \n",
- " 76 | \n",
- " 166984 | \n",
- "
\n",
- " \n",
- " 349642 | \n",
- " 173 | \n",
- " 5 | \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 0 | \n",
- " 10 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 21 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 21 | \n",
- " 26 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1008940 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 278741 | \n",
- " 90 | \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 8 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 26 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1270662 | \n",
- "
\n",
- " \n",
- " 595636 | \n",
- " 84 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 9 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- " 1 | \n",
- " 625537 | \n",
- "
\n",
- " \n",
- " 262882 | \n",
- " 129 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- " 7 | \n",
- " 0 | \n",
- " 6 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 21 | \n",
- " 21 | \n",
- " 1 | \n",
- " 1 | \n",
- " 21 | \n",
- " 26 | \n",
- " 29 | \n",
- " 29 | \n",
- " 891652 | \n",
- "
\n",
- " \n",
- " 1031190 | \n",
- " 46 | \n",
- " 6 | \n",
- " 11 | \n",
- " 1 | \n",
- " 11 | \n",
- " 1 | \n",
- " 4 | \n",
- " 0 | \n",
- " 6 | \n",
- " 1 | \n",
- " ... | \n",
- " 3 | \n",
- " 7 | \n",
- " 7 | \n",
- " 1 | \n",
- " 1 | \n",
- " 7 | \n",
- " 16 | \n",
- " 39 | \n",
- " 41 | \n",
- " 1223988 | \n",
- "
\n",
- " \n",
- " 681411 | \n",
- " 86 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 13 | \n",
- " 4 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- " 1 | \n",
- " 586270 | \n",
- "
\n",
- " \n",
- "
\n",
- "
100000 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "517534 164 0 8 1 8 1 6 5 0 0 ... \n",
- "737386 143 3 3 1 3 1 10 3 0 0 ... \n",
- "990959 179 3 6 1 6 1 6 5 1 0 ... \n",
- "189454 17 3 5 1 5 0 4 0 0 0 ... \n",
- "349642 173 5 4 1 4 0 10 0 0 0 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "278741 90 4 2 1 1 0 8 5 0 0 ... \n",
- "595636 84 1 3 1 3 1 9 0 0 0 ... \n",
- "262882 129 4 6 1 7 0 6 0 0 0 ... \n",
- "1031190 46 6 11 1 11 1 4 0 6 1 ... \n",
- "681411 86 2 4 1 4 1 13 4 0 0 ... \n",
- "\n",
- " WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN POVERTY \\\n",
- "517534 3 3 3 1 1 3 7 \n",
- "737386 3 1 1 1 1 1 2 \n",
- "990959 3 1 1 1 1 1 4 \n",
- "189454 3 15 15 1 1 15 26 \n",
- "349642 3 21 1 1 1 21 26 \n",
- "... ... ... ... ... ... ... ... \n",
- "278741 1 4 1 1 1 1 26 \n",
- "595636 1 1 1 1 1 1 15 \n",
- "262882 3 21 21 1 1 21 26 \n",
- "1031190 3 7 7 1 1 7 16 \n",
- "681411 1 4 1 1 1 1 7 \n",
- "\n",
- " DEPARTS ARRIVES sim_individual_id \n",
- "517534 1 1 1166909 \n",
- "737386 1 1 581009 \n",
- "990959 1 1 570487 \n",
- "189454 76 76 166984 \n",
- "349642 1 1 1008940 \n",
- "... ... ... ... \n",
- "278741 1 1 1270662 \n",
- "595636 1 1 625537 \n",
- "262882 29 29 891652 \n",
- "1031190 39 41 1223988 \n",
- "681411 1 1 586270 \n",
- "\n",
- "[100000 rows x 36 columns]"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "private, schema = sdnist.census(public=True)\n",
- "private = private.sample(100000)\n",
- "private_bin = sdnist.utils.discretize(private, schema, bins=sdnist.kmarginal.CensusKMarginalScore.BINS)\n",
- "\n",
- "# Build private-pgm Domain and Dataset objects\n",
- "attrs = []\n",
- "shape = []\n",
- "\n",
- "for col in private_bin:\n",
- " if col == \"sim_individual_id\":\n",
- " continue\n",
- "\n",
- " attrs.append(col)\n",
- " shape.append(private_bin[col].max() + 1)\n",
- " \n",
- "domain = Domain(attrs=attrs, shape=shape)\n",
- "data = Dataset(private_bin, domain)\n",
- "\n",
- "private_bin"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "8b24aa77",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "41.23660003602558\n"
- ]
- }
- ],
- "source": [
- "# Calibrate noise to add to each marginal\n",
- "logsf = scipy.stats.norm.logsf\n",
- "\n",
- "def delta_eps_normal(eps, mu):\n",
- " a = logsf(eps/mu - mu*.5)\n",
- " b = eps + logsf(eps/mu + mu*.5)\n",
- "\n",
- " return np.exp(b) * (np.expm1(a - b))\n",
- "\n",
- "eps, delta = 1, 2.5e-5\n",
- "C = 7 # maximum contribution of each individual\n",
- "\n",
- "mu = scipy.optimize.bisect(lambda m: delta_eps_normal(eps, m) - delta, a=1e-5, b=2)\n",
- "sigma = np.sqrt((2 * len(attrs) - 1) * C / mu) \n",
- "print(sigma)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "86d6a3a4",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Total clique size: 682\n",
- "iteration\t\ttime\t\tl1_loss\t\tl2_loss\t\tfeasibility\n",
- "0.00\t\t0.00\t\t83306.88\t\t31352539.74\t\t0.00\n",
- "50.00\t\t0.60\t\t3136.26\t\t13505.00\t\t0.00\n",
- "100.00\t\t1.34\t\t947.89\t\t1260.56\t\t0.00\n",
- "150.00\t\t2.07\t\t531.24\t\t446.09\t\t0.00\n",
- "200.00\t\t2.80\t\t373.46\t\t236.39\t\t0.00\n",
- "250.00\t\t3.53\t\t293.89\t\t153.36\t\t0.00\n",
- "300.00\t\t4.27\t\t246.46\t\t110.69\t\t0.00\n",
- "350.00\t\t5.00\t\t217.41\t\t86.79\t\t0.00\n",
- "400.00\t\t5.71\t\t197.77\t\t71.83\t\t0.00\n",
- "450.00\t\t6.43\t\t183.67\t\t61.61\t\t0.00\n",
- "500.00\t\t7.15\t\t172.87\t\t54.46\t\t0.00\n",
- "550.00\t\t7.88\t\t164.41\t\t49.23\t\t0.00\n",
- "600.00\t\t8.61\t\t157.58\t\t45.29\t\t0.00\n",
- "650.00\t\t9.33\t\t151.96\t\t42.24\t\t0.00\n",
- "700.00\t\t10.09\t\t147.30\t\t39.77\t\t0.00\n",
- "750.00\t\t10.81\t\t143.25\t\t37.81\t\t0.00\n",
- "800.00\t\t11.57\t\t139.77\t\t36.21\t\t0.00\n",
- "850.00\t\t12.27\t\t136.81\t\t34.90\t\t0.00\n",
- "900.00\t\t13.02\t\t134.23\t\t33.79\t\t0.00\n",
- "950.00\t\t13.75\t\t132.02\t\t32.85\t\t0.00\n"
- ]
- }
- ],
- "source": [
- "# Step 1 : measure all rank-1 marginals\n",
- "measurements_1 = []\n",
- "\n",
- "for col in attrs:\n",
- " y = data.project([col]).datavector()\n",
- " y += np.random.normal(scale=sigma, size=y.size)\n",
- " \n",
- " measurements_1.append((np.eye(y.size), y, sigma, (col,)))\n",
- " \n",
- "engine = FactoredInference(domain, log=True)\n",
- "model = engine.estimate(measurements_1, engine=\"MD\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "2e89abcf",
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "1a44d05908c6478cb6edfb114b4dcdf1",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/595 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "q = {}\n",
- "\n",
- "total = int(len(attrs) * (len(attrs) - 1) * .5)\n",
- "for i, j in tqdm(itertools.combinations(attrs, r=2), total=total):\n",
- " q[i, j] = np.abs(data.project([i, j]).datavector() - model.project([i, j]).datavector()).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "4c19990b",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "340.0\n"
- ]
- }
- ],
- "source": [
- "graph = nx.Graph()\n",
- "graph.add_nodes_from(attrs)\n",
- "\n",
- "# Compute noise scale (using naive composition for simplicity)\n",
- "eps = 0.05\n",
- "r = len(attrs) - 1\n",
- "noise_scale = .5 / (eps) * r\n",
- "print(noise_scale)\n",
- "\n",
- "for _ in range(len(attrs)-1):\n",
- " # Compute set of disconnected attrs\n",
- " # The whole algorithm is probably equivalent to a DP-Maximum spanning tree (?)\n",
- " S = {(i,j): q[i,j] + np.random.gumbel(scale=noise_scale) for (i, j) in q if not nx.has_path(graph, i,j)}\n",
- " \n",
- " # Exponential mechanism\n",
- " ij_max = 0\n",
- " qij_max = 0\n",
- " \n",
- " for ij, qij in S.items():\n",
- " if qij > qij_max:\n",
- " qij_max = qij\n",
- " ij_max = ij\n",
- " \n",
- " graph.add_edge(*ij_max, weight=qij_max)\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "181cb28c",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(dpi=100)\n",
- "pos = graphviz_layout(graph, prog=\"neato\")\n",
- "width = [w ** .5 * .003 for w in nx.get_edge_attributes(graph, \"weight\").values()]\n",
- "nx.draw(graph, pos=pos, with_labels=True, font_size=8, width=width, edge_color=\"grey\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "26bda7c6",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Total clique size: 34234\n",
- "iteration\t\ttime\t\tl1_loss\t\tl2_loss\t\tfeasibility\n",
- "0.00\t\t0.00\t\t212967.95\t\t49990107.75\t\t0.00\n",
- "50.00\t\t5.90\t\t63995.64\t\t884823.73\t\t0.00\n",
- "100.00\t\t13.55\t\t49242.30\t\t308068.88\t\t0.00\n",
- "150.00\t\t21.19\t\t43896.49\t\t186526.22\t\t0.00\n",
- "200.00\t\t29.06\t\t40848.17\t\t131835.94\t\t0.00\n",
- "250.00\t\t36.67\t\t38871.86\t\t100987.97\t\t0.00\n",
- "300.00\t\t45.18\t\t37419.72\t\t81512.79\t\t0.00\n",
- "350.00\t\t53.69\t\t36241.84\t\t67954.61\t\t0.00\n",
- "400.00\t\t61.63\t\t35326.58\t\t58597.01\t\t0.00\n",
- "450.00\t\t70.37\t\t34524.29\t\t51390.81\t\t0.00\n",
- "500.00\t\t78.76\t\t33863.88\t\t46000.76\t\t0.00\n",
- "550.00\t\t93.82\t\t33295.41\t\t41773.42\t\t0.00\n",
- "600.00\t\t103.89\t\t32804.28\t\t38399.02\t\t0.00\n",
- "650.00\t\t111.98\t\t32370.04\t\t35658.83\t\t0.00\n",
- "700.00\t\t119.59\t\t31993.86\t\t33413.24\t\t0.00\n",
- "750.00\t\t127.12\t\t31649.82\t\t31524.05\t\t0.00\n",
- "800.00\t\t135.21\t\t31341.75\t\t29937.51\t\t0.00\n",
- "850.00\t\t143.25\t\t31064.36\t\t28592.97\t\t0.00\n",
- "900.00\t\t151.37\t\t30799.75\t\t27412.58\t\t0.00\n",
- "950.00\t\t158.78\t\t30566.23\t\t26404.30\t\t0.00\n"
- ]
- }
- ],
- "source": [
- "# Step 2\n",
- "\n",
- "measurements_2 = [] \n",
- "\n",
- "for i, j in graph.edges:\n",
- " y = data.project([i, j]).datavector()\n",
- " y += np.random.normal(scale=sigma, size=y.size)\n",
- " \n",
- " measurements_2.append((np.eye(y.size), y, sigma, (i, j)))\n",
- " \n",
- "model = engine.estimate(measurements_1 + measurements_2, engine=\"MD\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "dc21b9e6",
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " PUMA | \n",
- " YEAR | \n",
- " HHWT | \n",
- " GQ | \n",
- " PERWT | \n",
- " SEX | \n",
- " AGE | \n",
- " MARST | \n",
- " RACE | \n",
- " HISPAN | \n",
- " ... | \n",
- " WRKRECAL | \n",
- " WORKEDYR | \n",
- " INCTOT | \n",
- " INCWAGE | \n",
- " INCWELFR | \n",
- " INCINVST | \n",
- " INCEARN | \n",
- " POVERTY | \n",
- " DEPARTS | \n",
- " ARRIVES | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 5 | \n",
- " 6 | \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 0 | \n",
- " 3 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 11 | \n",
- " 35 | \n",
- " 27 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 149 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 13 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 22 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 34 | \n",
- " 5 | \n",
- " 4 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 8 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 7 | \n",
- " 7 | \n",
- " 1 | \n",
- " 1 | \n",
- " 7 | \n",
- " 20 | \n",
- " 21 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 149 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- " 10 | \n",
- " 1 | \n",
- " 12 | \n",
- " 4 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 105 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 10 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 26 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 99995 | \n",
- " 89 | \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- " 5 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 99996 | \n",
- " 120 | \n",
- " 5 | \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 0 | \n",
- " 1 | \n",
- " 5 | \n",
- " 0 | \n",
- " 1 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 7 | \n",
- " 1 | \n",
- " 1 | \n",
- " 7 | \n",
- " 9 | \n",
- " 27 | \n",
- " 27 | \n",
- "
\n",
- " \n",
- " 99997 | \n",
- " 123 | \n",
- " 5 | \n",
- " 8 | \n",
- " 1 | \n",
- " 4 | \n",
- " 0 | \n",
- " 3 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 8 | \n",
- " 11 | \n",
- " 1 | \n",
- " 1 | \n",
- " 8 | \n",
- " 20 | \n",
- " 28 | \n",
- " 24 | \n",
- "
\n",
- " \n",
- " 99998 | \n",
- " 174 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 20 | \n",
- " 26 | \n",
- " 48 | \n",
- " 78 | \n",
- "
\n",
- " \n",
- " 99999 | \n",
- " 80 | \n",
- " 1 | \n",
- " 26 | \n",
- " 1 | \n",
- " 10 | \n",
- " 1 | \n",
- " 7 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " ... | \n",
- " 3 | \n",
- " 3 | \n",
- " 9 | \n",
- " 9 | \n",
- " 1 | \n",
- " 1 | \n",
- " 9 | \n",
- " 21 | \n",
- " 84 | \n",
- " 33 | \n",
- "
\n",
- " \n",
- "
\n",
- "
100000 rows × 35 columns
\n",
- "
"
- ],
- "text/plain": [
- " PUMA YEAR HHWT GQ PERWT SEX AGE MARST RACE HISPAN ... \\\n",
- "0 5 6 4 1 4 0 3 5 0 0 ... \n",
- "1 149 1 4 1 5 1 13 0 0 0 ... \n",
- "2 34 5 4 1 5 1 8 0 0 0 ... \n",
- "3 149 3 5 1 10 1 12 4 0 0 ... \n",
- "4 105 3 4 1 4 1 10 0 0 0 ... \n",
- "... ... ... ... .. ... ... ... ... ... ... ... \n",
- "99995 89 4 4 1 5 1 1 5 0 0 ... \n",
- "99996 120 5 3 1 3 0 1 5 0 1 ... \n",
- "99997 123 5 8 1 4 0 3 0 0 0 ... \n",
- "99998 174 2 4 1 4 1 2 0 0 0 ... \n",
- "99999 80 1 26 1 10 1 7 0 0 0 ... \n",
- "\n",
- " WRKRECAL WORKEDYR INCTOT INCWAGE INCWELFR INCINVST INCEARN \\\n",
- "0 3 3 5 1 1 1 1 \n",
- "1 3 2 1 1 1 1 1 \n",
- "2 3 3 7 7 1 1 7 \n",
- "3 3 1 4 1 1 1 1 \n",
- "4 3 1 5 1 1 1 1 \n",
- "... ... ... ... ... ... ... ... \n",
- "99995 3 3 2 1 1 15 1 \n",
- "99996 3 3 5 7 1 1 7 \n",
- "99997 3 3 8 11 1 1 8 \n",
- "99998 3 3 6 1 1 1 20 \n",
- "99999 3 3 9 9 1 1 9 \n",
- "\n",
- " POVERTY DEPARTS ARRIVES \n",
- "0 11 35 27 \n",
- "1 22 1 1 \n",
- "2 20 21 22 \n",
- "3 6 1 1 \n",
- "4 26 1 1 \n",
- "... ... ... ... \n",
- "99995 4 1 1 \n",
- "99996 9 27 27 \n",
- "99997 20 28 24 \n",
- "99998 26 48 78 \n",
- "99999 21 84 33 \n",
- "\n",
- "[100000 rows x 35 columns]"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "synthetic_bin = model.synthetic_data(rows=len(private)).df\n",
- "synthetic_bin"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "afa0ae64",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [00:01<00:00, 25.90it/s]\n"
- ]
- }
- ],
- "source": [
- "synthetic = sdnist.utils.undo_discretize(synthetic_bin, schema, sdnist.kmarginal.CensusKMarginalScore.BINS)\n",
- "score = sdnist.score(private, synthetic, schema)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "a3fd2bae",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Text(0.5, 1.0, 'Score distribution over (PUMA,YEAR)')"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize=(6, 2))\n",
- "score.boxplot(name=\"private-pgm\")\n",
- "plt.title(f\"Score distribution over (PUMA,YEAR)\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "e1be6f97",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/score_example.png b/examples/score_example.png
deleted file mode 100644
index 3947483..0000000
Binary files a/examples/score_example.png and /dev/null differ
diff --git a/leadersboard/Leadersboard_census_challenge.pdf b/leadersboard/Leadersboard_census_challenge.pdf
deleted file mode 100644
index d9dc03b..0000000
Binary files a/leadersboard/Leadersboard_census_challenge.pdf and /dev/null differ
diff --git a/leadersboard/Leadersboard_taxi_challenge.pdf b/leadersboard/Leadersboard_taxi_challenge.pdf
deleted file mode 100644
index 5ace13c..0000000
Binary files a/leadersboard/Leadersboard_taxi_challenge.pdf and /dev/null differ
diff --git a/sdnist/load.py b/sdnist/load.py
index 55e91f8..eeb9d66 100644
--- a/sdnist/load.py
+++ b/sdnist/load.py
@@ -16,6 +16,8 @@
import sdnist.strs as strs
+DEFAULT_DATASET = 'diverse_community_excerpts_data'
+
class TestDatasetName(Enum):
NONE = 1
@@ -29,6 +31,13 @@ class TestDatasetName(Enum):
national2019 = 9
+dataset_name_state_map = {
+ TestDatasetName.national2019.name: 'national',
+ TestDatasetName.ma2019.name: 'massachusetts',
+ TestDatasetName.tx2019.name: 'texas'
+}
+
+
data_challenge_map = {
TestDatasetName.NONE: None,
TestDatasetName.GA_NC_SC_10Y_PUMS: strs.CENSUS,
@@ -76,7 +85,8 @@ def check_exists(root: Path, name: Path, download: bool, data_name: str = strs.D
version = "1.4.0-b.1"
version_v = f"v{version}"
- sdnist_version = f"SDNist-{data_name}-{version}"
+ sdnist_version = DEFAULT_DATASET
+
download_link = f"https://github.com/usnistgov/SDNist/releases/download/{version_v}/{sdnist_version}.zip"
if zip_path.exists() and error_opening_zip(zip_path):
os.remove(zip_path)
@@ -90,14 +100,15 @@ def check_exists(root: Path, name: Path, download: bool, data_name: str = strs.D
zip_path.as_posix(),
reporthook
)
- print('\n Success! Downloaded all datasets zipfile to'.format(zip_path))
+ print(f'\n Success! Downloaded all datasets to "{root}" directory\n')
except:
- shutil.rmtree(zip_path)
+ if zip_path.exists():
+ shutil.rmtree(zip_path)
raise RuntimeError(f"Unable to download {name}. Try: \n "
f"- re-running the command, \n "
f"- downloading manually from {download_link} "
- f"and unpack the zip, and copy 'data' directory in the root/working-directory, \n "
- f"- or download the data as part of a release: https://github.com/usnistgov/SDNist/releases")
+ f"and unpack the zip. \n "
+ f"- or download the data as part of a release: https://github.com/usnistgov/SDNist/releases\n")
if zip_path.exists():
# extract zipfile
@@ -110,7 +121,8 @@ def check_exists(root: Path, name: Path, download: bool, data_name: str = strs.D
raise e
# delete zipfile
os.remove(zip_path)
- copy_from_path = str(Path(extract_path, sdnist_version, 'data'))
+ print()
+ copy_from_path = str(Path(extract_path, sdnist_version))
copy_to_path = str(Path(root))
copy_tree(copy_from_path, copy_to_path)
shutil.rmtree(extract_path)
@@ -122,11 +134,11 @@ def build_name(challenge: str,
root: Path = Path("data"),
public: bool = False,
test: TestDatasetName = TestDatasetName.NONE,
- data_name: str = strs.DATA):
+ data_name: str = DEFAULT_DATASET):
root = root.expanduser()
directory = root
- if data_name == "toy-data":
+ if data_name == DEFAULT_DATASET:
directory = root
elif challenge == strs.CENSUS:
directory = root / "census" / "dataset"
@@ -164,7 +176,8 @@ def build_name(challenge: str,
else:
raise ValueError(f"Unrecognized challenge {challenge}")
-
+ if fname in dataset_name_state_map.keys():
+ fname = Path(dataset_name_state_map[fname], fname)
return directory / fname
@@ -173,7 +186,7 @@ def load_parameters(challenge: str,
public: bool = True,
test: TestDatasetName = TestDatasetName.NONE,
download: bool = True,
- data_name: str = strs.DATA) -> dict:
+ data_name: str = DEFAULT_DATASET) -> dict:
dataset_path = build_name(challenge=challenge, root=root,
public=public, test=test, data_name=data_name)
dataset_parameters = dataset_path.with_suffix('.json')
@@ -211,7 +224,7 @@ def load_dataset(challenge: str,
test: TestDatasetName = TestDatasetName.NONE,
download: bool = True,
format_: str = "parquet",
- data_name: str = 'data') -> Tuple[pd.DataFrame, dict]:
+ data_name: str = DEFAULT_DATASET) -> Tuple[pd.DataFrame, dict]:
""" Load one of the original SDNist datasets.
:param challenge: str: base challenge. Must be `census` or `taxi`.
@@ -275,7 +288,7 @@ def load_dataset(challenge: str,
else:
raise ValueError(f"Unknown format {format_}")
- if data_name != 'toy-data':
+ if data_name != DEFAULT_DATASET:
config = load_config(challenge, root, public, test, download)
params[strs.CONFIG] = config
return dataset, params
diff --git a/sdnist/metrics/inconsistency.py b/sdnist/metrics/inconsistency.py
index b9785dc..ee45d43 100644
--- a/sdnist/metrics/inconsistency.py
+++ b/sdnist/metrics/inconsistency.py
@@ -24,6 +24,11 @@
["AGEP", "EDU"]),
("a", "child_NOC", "Children (< 10) don't have children",
["AGEP", "NOC"]),
+ ("a", "adult_child", "Even when the AGEP feature is not explicitly used, "
+ "features which use N to indicate children ( < 15) must agree",
+ ["MSP", "PINCP", "PINCP_DECILE"]),
+ ("a", "adult_N", "Adults ( > 14) must specify values (other than N) for all adult features",
+ ["AGEP", "MSP", "PINCP", "PINCP_DECILE", "EDU", "DPHY", "DREM"]),
("a", "toddler_DPHY", "Toddlers (< 5) naturally toddle, it's not a physical disability",
["AGEP", "DPHY"]),
("a", "toddler_DREM", "Toddlers (< 5) are naturally forgetful, it's not a cognitive disability",
@@ -155,6 +160,32 @@ def compute(self):
if "EDU" in fl and not (r["EDU"] == 'N'):
ic_dict["infant_EDU"].append(i)
+ if not ("AGEP" in fl):
+ # This forces agreement on MSP, PINCP and PINCP_DECILE if at least 2 exist.
+ if ("MSP" in fl and (r["MSP"] == 'N')) and (
+ ("PINCP" in fl and not (r["PINCP"] == 'N')) or (
+ "PINCP_DECILE" in fl and not (r["PINCP_DECILE"] == 'N'))):
+ ic_dict["adult_child"].append(i)
+ if ("MSP" in fl and not (r["MSP"] == 'N')) and (
+ ("PINCP" in fl and (r["PINCP"] == 'N')) or (
+ "PINCP_DECILE" in fl and (r["PINCP_DECILE"] == 'N'))):
+ ic_dict["adult_child"].append(i)
+ if not ("MSP" in fl) and ("PINCP" in fl) and ("PINCP_DECILE" in fl):
+ if ((r["PINCP"] == 'N') and not (r["PINCP_DECILE"] == 'N')) or (
+ not (r["PINCP"] == 'N') and (r["PINCP_DECILE"] == 'N')):
+ ic_dict["adult_child"].append(i)
+
+ # this catches adults who still have the child 'N' for their features.
+ if "AGEP" in fl and r["AGEP"] > 15:
+ if ("MSP" in fl and (r["MSP"] == 'N')) or (
+ "PINCP" in fl and (r["PINCP"] == 'N')) or (
+ "PINCP_DECILE" in fl and (r["PINCP_DECILE"] == 'N')) or (
+ "EDU" in fl and (r["EDU"] == 'N')) or (
+ "DPHY" in fl and (r["DPHY"] == 'N')) or (
+ "DREM" in fl and (r["DREM"] == 'N')):
+ ic_dict["adult_N"].append(i)
+
+
# -------------------work and finance related inconsistencies---------------
# income > 300K
if "PINCP" in fl and not (r["PINCP"] == 'N') and float(r["PINCP"]) > 3000000:
diff --git a/sdnist/report/README.md b/sdnist/report/README.md
index a9ffa5b..1db6a83 100644
--- a/sdnist/report/README.md
+++ b/sdnist/report/README.md
@@ -1,4 +1,4 @@
-SDNist v1.4 beta: Deidentified Data Report Tool
+SDNist v2.0: Deidentified Data Report Tool
====================================
This tool evaluates utility and privacy of a given deidentified dataset and generates a summary quality report with performance of a deide dataset enumerated and illustrated for each utility and privacy metric.
@@ -18,7 +18,7 @@ Setting Up the SDNIST Report Tool
### Brief Setup Instructions
-SDNist v1.4 requires Python version 3.7 or greater. If you have installed a previous version of the SDNist library, we recommend uninstalling or installing v1.4 in a virtual environment. v1.4 can be installed via [Release 1.4.0b](https://github.com/usnistgov/SDNist/releases/tag/v1.4.1-b.1). The NIST Diverse Community Exceprt data will download on the fly.
+SDNist v2.0 requires Python version 3.7 or greater. If you have installed a previous version of the SDNist library, we recommend uninstalling or installing v2.0 in a virtual environment. v2.0 can be installed via [Release 2.0](https://github.com/usnistgov/SDNist/releases/tag/v2.0.0). The NIST Diverse Community Exceprt data will download on the fly.
### Detailed Setup Instructions
@@ -38,10 +38,10 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
c:\\sdnist-project>
```
-4. Download the sdnist installable wheel (sdnist-1.4.1b-py3-none-any.whl) from the [Github:SDNist beta release](https://github.com/usnistgov/SDNist/releases/download/v1.4.1-b.1/sdnist-1.4.1b1-py3-none-any.whl).
+4. Download the sdnist installable wheel (sdnist-2.0.0-py3-none-any.whl) from the Github [SDNist Release 2.0](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/sdnist-2.0.0-py3-none-any.whl).
-5. Move the downloaded sdnist-1.4.1b1-py3-none-any.whl file to the sdnist-project directory.
+5. Move the downloaded sdnist-2.0.0-py3-none-any.whl file to the sdnist-project directory.
6. Using the terminal on Mac/Linux or powershell on Windows, navigate to the sdnist-project directory.
@@ -94,7 +94,7 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
```
-10. Per step 5 above, the sdnist-1.4.1b1-py3-none-any.whl file should already be present in the sdnist-project directory. Check whether that is true by listing the files in the sdnist-project directory.
+10. Per step 5 above, the sdnist-2.0.0-py3-none-any.whl file should already be present in the sdnist-project directory. Check whether that is true by listing the files in the sdnist-project directory.
**MAC OS/Linux:**
```
@@ -104,12 +104,12 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
```
(venv) c:\\sdnist-project> dir
```
- The sdnist-1.4.0b2-py3-none-any.whl file should be in the list printed by the above command; otherwise, follow steps 4 and 5 again to download the .whl file.
+ The sdnist-2.0.0-py3-none-any.whl file should be in the list printed by the above command; otherwise, follow steps 4 and 5 again to download the .whl file.
11. Install sdnist Python library:
```
- (venv) c:\\sdnist-project> pip install sdnist-1.4.1b1-py3-none-any.whl
+ (venv) c:\\sdnist-project> pip install sdnist-2.0.0-py3-none-any.whl
```
@@ -127,8 +127,9 @@ SDNist v1.4 requires Python version 3.7 or greater. If you have installed a prev
TARGET_DATASET_NAME Select name of the target dataset that was used to generated given deidentified dataset
optional arguments:
- \-h, \--help show this help message and exit
- \--data-root DATA_ROOT Path of the directory to be used as the root for the target datasets\--download DOWNLOAD Download toy datasets if not present locallyChoices for Target Dataset Name::
+ \-h, \--help Show this help message and exit
+ \--data-root DATA_ROOT Path of the directory to be used as the root for the target datasets
+ \--download DOWNLOAD Download toy datasets if not present locallyChoices for Target Dataset Name::
(dataname) (filename)
MA ma2019
@@ -188,7 +189,7 @@ Generate Data Quality Report
- TX
- NATIONAL
- - **--data-root**: The absolute or relative path to the directory containing the bundled dataset, or the directory where the bundled dataset should be downloaded to if it is not available locally. The default directory is set to sdnist_toy_data.
+ - **--data-root**: The absolute or relative path to the directory containing the bundled dataset, or the directory where the bundled dataset should be downloaded to if it is not available locally. The default directory is set to **diverse_community_excerpts_data**.
## Setup Data for SDNIST Report Tool
@@ -199,7 +200,7 @@ Generate Data Quality Report
(venv) c:\\sdnist-project> python -m sdnist.report syn_tx.csv TX
Downloading all SDNist datasets from:
- https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip ...
+ https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip ...
...5%, 47352 KB, 8265 KB/s, 5 seconds elapsed
```
@@ -211,30 +212,30 @@ Generate Data Quality Report
3. The sdnist.report package also needs a deidentified dataset that it can evaluate against its original counterpart. Since the sdnist.report package comes bundled with the datasets, the deidentified dataset should be generated using the bundled datasets.
- You can download a copy of the datasets from [Github Sdnist Toy Dataset](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts). This copy is similar to the one bundled with the sdnist.report package, but it contains more documentation and a description of the datasets.
+ You can download a copy of the datasets from Github [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/tree/main/nist%20diverse%20communities%20data%20excerpts). This copy is similar to the one bundled with the sdnist.report package, but it contains more documentation and a description of the datasets.
-4. You can download the toy deidentified datasets from [Github Sdnist Toy Synthetic Dataset](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/toy_synthetic_data.zip). Unzip the downloaded file, and move the unzipped toy_synthetic_dataset directory to the sdnist-project directory.
+4. You can download the toy deidentified datasets from Github [Sdnist Toy Synthetic Dataset](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/toy_deidentified_data.zip). Unzip the downloaded file, and move the unzipped toy_synthetic_dataset directory to the sdnist-project directory.
-5. Each toy deidentified dataset file is generated using the [Sdnist Toy Dataset](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip). The syn_ma.csv, syn_tx.csv, and syn_national.csv deidentified dataset files are created from target datasets MA (ma2019.csv), TX (tx2019.csv), and NATIONAL(national2019.csv), respectively. You can use one of the toy synthetic dataset files for testing whether the sdnist.report package is installed correctly on your system.
+5. Each toy deidentified dataset file is generated using the [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip). The syn_ma.csv, syn_tx.csv, and syn_national.csv deidentified dataset files are created from target datasets MA (ma2019.csv), TX (tx2019.csv), and NATIONAL(national2019.csv), respectively. You can use one of the toy synthetic dataset files for testing whether the sdnist.report package is installed correctly on your system.
6. Use the following commands for generating reports if you are using a toy deidentified dataset file:
For evaluating the Massachusetts dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_ma.csv MA
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_ma.csv MA
```
For evaluating the Texas dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_tx.csv TX
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_tx.csv TX
```
For evaluating the national dataset:
```
- (venv) c:\\sdnist-project> python -m sdnist.report toy_synthetic_data/syn_national.csv NATIONAL
+ (venv) c:\\sdnist-project> python -m sdnist.report toy_deidentified_data/syn_national.csv NATIONAL
```
7. A deidentified dataset can be a .csv or a parquet file, and the path of this file is required
@@ -242,9 +243,6 @@ by the sdnist.report package to generate a data quality report.
## Download Data Manually
-1. If the sdnist.report package is not able to download the datasets, you can download them from [Github:SDNist toy data beta release](https://github.com/usnistgov/SDNist/releases/download/v1.4.0-b.1/SDNist-toy-data-1.4.0-b.1.zip).
-2. Move the downloaded SDNist-toy-data-1.4.0-b.1.zip file to the sdnist-project directory.
-3. Unzip the SDNist-toy-data-1.4.0-b.1.zip file and move the data directory inside it to the sdnist-project directory.
-4. Delete the SDNist-toy-data-1.4.0-b.1.zip file once the data directory is successfully moved out of the unzipped directory.
-5. Also delete the now-empty SDNist-toy-data-1.4.0-b.1 directory from where the zip file was extracted.
-6. And finally, to successfully install datasets manually, change the name of the data directory inside the sdnist-project directory to sdnist_toy_data.
+1. If the sdnist.report package is not able to download the datasets, you can download them from Github [Diverse Community Excerpts Data](https://github.com/usnistgov/SDNist/releases/download/v2.0.0/diverse_community_excerpts_data.zip).
+3. Unzip the **diverse_community_excerpts_data.zip** file and move the unzipped **diverse_community_excerpts_data** directory to the **sdnist-project** directory.
+4. Delete the **diverse_community_excerpts_data.zip** file once the data is successfully extracted from the zip.
diff --git a/sdnist/report/__main__.py b/sdnist/report/__main__.py
index 926987c..e9294fd 100644
--- a/sdnist/report/__main__.py
+++ b/sdnist/report/__main__.py
@@ -15,37 +15,51 @@
from sdnist.load import TestDatasetName
from sdnist.strs import *
+from sdnist.utils import *
+# from setup import version
def run(synthetic_filepath: Path,
output_directory: Path = REPORTS_DIR,
test: TestDatasetName = TestDatasetName.NONE,
- data_root: Path = Path('sdnist_toy_data'),
+ data_root: Path = Path("diverse_community_excerpts_data"),
download: bool = False,
test_mode: bool = False):
outfile = Path(output_directory, 'report.json')
ui_data = ReportUIData(output_directory=output_directory)
report_data = ReportData(output_directory=output_directory)
+ log = SimpleLogger()
+ log.msg('SDNist: Deidentified Data Report Tool', level=0, timed=False)
+ log.msg(f'Creating Evaluation Report for Deidentified Data at path: {synthetic_filepath}',
+ level=1)
if not outfile.exists():
- print('Loading Dataset...')
- dataset = Dataset(synthetic_filepath, test, data_root, download)
+ log.msg('Loading Datasets', level=2)
+ dataset = Dataset(synthetic_filepath, log, test, data_root, download)
ui_data = data_description(dataset, ui_data)
+ log.end_msg()
# Create scores
- print('Computing Utility Scores...')
- ui_data, report_data = utility_score(dataset, ui_data, report_data)
- print('Computing Privacy Scores...')
- ui_data, report_data = privacy_score(dataset, ui_data, report_data)
+ log.msg('Computing Utility Scores', level=2)
+ ui_data, report_data = utility_score(dataset, ui_data, report_data, log)
+ log.end_msg()
+
+ log.msg('Computing Privacy Scores', level=2)
+ ui_data, report_data = privacy_score(dataset, ui_data, report_data, log)
+ log.end_msg()
+
+ log.msg('Saving Report Data')
ui_data.save()
report_data.save()
ui_data = ui_data.data
+ log.end_msg()
else:
with open(outfile, 'r') as f:
ui_data = json.load(f)
-
+ log.end_msg()
# Generate Report
generate(ui_data, output_directory, test_mode)
+ log.msg(f'Reports available at path: {output_directory}', level=0, timed=False)
class NoAction(argparse.Action):
@@ -73,7 +87,7 @@ def __call__(self, parser, namespace, values, option_string=None):
help="Select name of the target dataset "
"that was used to generated given deidentified dataset")
parser.add_argument("--data-root", type=Path,
- default=Path("sdnist_toy_data"),
+ default=Path("diverse_community_excerpts_data"),
help="Path of the directory "
"to be used as the root for the target datasets")
parser.add_argument("--download", type=bool, default=True,
diff --git a/sdnist/report/config.json b/sdnist/report/config.json
index 222c1e9..69424e4 100644
--- a/sdnist/report/config.json
+++ b/sdnist/report/config.json
@@ -15,7 +15,7 @@
"PUMA",
"SEX",
"AGEP",
- "MST",
+ "MSP",
"HISP",
"RAC1P",
"NOC",
@@ -27,7 +27,9 @@
"PINCP_DECILE",
"DVET",
"DEAR",
- "DPHYS",
- "DEYE"
+ "DPHY",
+ "DEYE",
+ "DREM",
+ "DENSITY"
]
}
\ No newline at end of file
diff --git a/sdnist/report/dataset.py b/sdnist/report/dataset.py
index a367dfe..9f1f7fc 100644
--- a/sdnist/report/dataset.py
+++ b/sdnist/report/dataset.py
@@ -1,3 +1,4 @@
+import math
from pathlib import Path
from typing import Dict, List
from dataclasses import dataclass, field
@@ -154,6 +155,74 @@ def add_bin_for_NA(data, reference_data, features):
return d
+def bin_density(data: pd.DataFrame, data_dict: Dict, update: bool = True) -> pd.DataFrame:
+ """
+ data: Data containing density feature
+ data_dict: Dictionary containing values range for density feature
+ update: if True, update the input data's density feature and return
+ else, create two new columns: binned_density and bin_range
+ and return the data
+ """
+ def get_bin_range_log(x):
+ for i, v in enumerate(bins):
+ if i == x:
+ return f'({round(v, 2)}, {round(bins[i + 1], 2)}]'
+ d = data
+ dd = data_dict
+ base = 10
+ # we remove first 8 bins from this bins list, and prepend
+ # two bins. So effective bins are 12. This is done to bottom
+ # code density category for the PUMAs with small density.
+ n_bins = 20 # number of bins
+ # max of range
+ n_max = dd['DENSITY']['values']['max'] + 500
+
+ bins = np.logspace(start=math.log(10, base), stop=math.log(n_max, base), num=n_bins+1)
+ # remove first 8 bins and prepend two new bins
+ bins = [0, 150] + list(bins[8:])
+ # print('Bins', bins)
+ # print('Densities', d['DENSITY'].unique().tolist())
+ n_bins = len(bins) # update number of bins to effective bins
+ labels = [i for i in range(n_bins-1)]
+
+ # top code values to n_max and bottom code values to 0 in the data
+ d.loc[d['DENSITY'] < 0, 'DENSITY'] = float(0)
+ d.loc[d['DENSITY'] > n_max, 'DENSITY'] = float(n_max) - 100
+
+ if update:
+ d['DENSITY'] = pd.cut(d['DENSITY'], bins=bins, labels=labels)
+ return d
+ else:
+ d['binned_density'] = pd.cut(d['DENSITY'], bins=bins, labels=labels)
+
+ d['bin_range'] = d['binned_density'].apply(lambda x: get_bin_range_log(x))
+ return d
+
+
+def get_density_bins_description(data: pd.DataFrame, data_dict: Dict, mappings: Dict) -> Dict:
+ bin_desc = dict()
+ # If puma is not available in the features, return empty description dictionary
+ if 'PUMA' not in data:
+ return bin_desc
+
+ d = bin_density(data.copy(), data_dict, update=False)
+
+ for dbin, g in d.groupby(by=['binned_density']):
+ if g.shape[0] == 0:
+ continue
+
+ density_range = g['bin_range'].unique()[0]
+ bin_data = []
+ for puma, pg in g.groupby(by='PUMA'):
+ density = pg['DENSITY'].unique()[0]
+ bin_data.append([puma, density, mappings["PUMA"][puma]["name"]])
+ bin_df = pd.DataFrame(bin_data, columns=['PUMA', 'DENSITY', 'PUMA NAME'])
+ bin_desc[dbin] = (density_range, bin_df)
+ del d
+ # print(bin_desc)
+ return bin_desc
+
+
def unavailable_features(config: Dict, synthetic_data: pd.DataFrame):
"""remove features from configuration that are not available in
the input synthetic data"""
@@ -170,6 +239,7 @@ def unavailable_features(config: Dict, synthetic_data: pd.DataFrame):
@dataclass
class Dataset:
synthetic_filepath: Path
+ log: u.SimpleLogger
test: TestDatasetName = TestDatasetName.NONE
data_root: Path = Path('sdnist_toy_data')
download: bool = True
@@ -188,25 +258,23 @@ def __post_init__(self):
download=self.download,
public=False,
test=self.test,
- format_="csv",
- data_name="toy-data"
+ format_="csv"
)
self.target_data_path = build_name(
challenge=strs.CENSUS,
root=self.data_root,
public=False,
- test=self.test,
- data_name="toy-data"
+ test=self.test
)
self.schema = params[strs.SCHEMA]
-
+ configs_path = self.target_data_path.parent.parent
# add config packaged with data and also the config package with sdnist.report package
- config_1 = u.read_json(Path(self.target_data_path.parent, 'config.json'))
+ config_1 = u.read_json(Path(configs_path, 'config.json'))
config_2 = u.read_json(Path(FILE_DIR, 'config.json'))
self.config = {**config_1, **config_2}
- self.mappings = u.read_json(Path(self.target_data_path.parent, 'mappings.json'))
- self.data_dict = u.read_json(Path(self.target_data_path.parent, 'data_dictionary.json'))
+ self.mappings = u.read_json(Path(configs_path, 'mappings.json'))
+ self.data_dict = u.read_json(Path(configs_path, 'data_dictionary.json'))
self.features = self.target_data.columns.tolist()
drop_features = self.config[strs.DROP_FEATURES] \
@@ -241,11 +309,25 @@ def __post_init__(self):
self.features = list(set(self.features).difference(set(ind_features)))
self.features = list(set(self.features).intersection(list(common_columns)))
+ self.log.msg(f'Features ({len(self.features)}): {self.features}', level=3, timed=False)
+ self.log.msg(f'Deidentified Data Records Count: {self.synthetic_data.shape[0]}', level=3, timed=False)
+ self.log.msg(f'Target Data Records Count: {self.target_data.shape[0]}', level=3, timed=False)
+
validate(self.synthetic_data, self.schema, self.features)
+
# raw data
self.target_data = self.target_data[self.features]
self.synthetic_data = self.synthetic_data[self.features]
+ # bin the density feature if present in the datasets
+ self.density_bin_desc = dict()
+ if 'DENSITY' in self.features:
+ self.density_bin_desc = get_density_bins_description(self.target_data,
+ self.data_dict,
+ self.mappings)
+ self.target_data = bin_density(self.target_data, self.data_dict)
+ self.synthetic_data = bin_density(self.synthetic_data, self.data_dict)
+
# update config to contain only available features
self.config = unavailable_features(self.config, self.synthetic_data)
@@ -348,6 +430,18 @@ def data_description(dataset: Dataset, ui_data: ReportUIData) -> ReportUIData:
dd_as.append(Attachment(name=f_name,
_data=data,
_type=AttachmentType.Table))
+ if feat == 'DENSITY':
+ for bin, bdata in dataset.density_bin_desc.items():
+ bdc = bdata[1].columns.tolist() # bin data columns
+ # report bin data: bin data format for report
+ rbd = [{c: row[j] for j, c in enumerate(bdc)}
+ for i, row in bdata[1].iterrows()]
+ dd_as.append(Attachment(name=None,
+ _data=f'Density Bin: {bin} | Bin Range: {bdata[0]}',
+ _type=AttachmentType.String))
+ dd_as.append(Attachment(name=None,
+ _data=rbd,
+ _type=AttachmentType.Table))
r_ui_d.add(ScorePacket(metric_name='Data Dictionary',
score=None,
diff --git a/sdnist/report/score/privacy.py b/sdnist/report/score/privacy.py
index eb8c4fd..486aea5 100644
--- a/sdnist/report/score/privacy.py
+++ b/sdnist/report/score/privacy.py
@@ -7,17 +7,21 @@
PrivacyScorePacket, Attachment, AttachmentType
from sdnist.report.score.paragraphs import *
from sdnist.strs import *
+from sdnist.utils import *
-def privacy_score(dataset: Dataset, ui_data: ReportUIData, report_data) \
+def privacy_score(dataset: Dataset, ui_data: ReportUIData, report_data, log: SimpleLogger) \
-> Tuple[ReportUIData, ReportData]:
ds = dataset
r_ui_d = ui_data
rd = report_data
+ log.msg('Apparent Match Distribution', level=3)
quasi_idf = [] # list of quasi-identifier features
excluded = [] # list of excluded features from apparent match computation
if ds.challenge == CENSUS:
+
+
quasi_idf = ['SEX', 'RAC1P', 'EDU', 'INDP_CAT', 'MST']
quasi_idf = list(set(ds.features).intersection(set(quasi_idf)))
excluded = ['PUMA', 'RACE']
@@ -82,4 +86,5 @@ def privacy_score(dataset: Dataset, ui_data: ReportUIData, report_data) \
total_quasi_matched,
adp_para_a,
adp]))
+ log.end_msg()
return r_ui_d, rd
diff --git a/sdnist/report/score/utility/__init__.py b/sdnist/report/score/utility/__init__.py
index 68acd1b..bdd4d92 100644
--- a/sdnist/report/score/utility/__init__.py
+++ b/sdnist/report/score/utility/__init__.py
@@ -428,24 +428,25 @@ def grid_plot_attachment(group_features: List[str],
return gp_a
-def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportData) \
+def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportData,
+ log: SimpleLogger) \
-> Tuple[ReportUIData, ReportData]:
ds = dataset
r_ui_d = ui_data # report ui data
rd = report_data
- scorers = []
-
features = ds.features
corr_features = ds.config[strs.CORRELATION_FEATURES]
# Initiated k-marginal, correlation and propensity scorer
# selected challenge type: census or taxi
if ds.challenge == strs.CENSUS:
+ log.msg('Univariates', level=3)
up = UnivariatePlots(ds.d_synthetic_data, ds.d_target_data,
ds, r_ui_d.output_directory, ds.challenge)
u_feature_data = up.save() # univariate features data
rd.add('Univariate', up.report_data())
+
u_as = [] # univariate attachments
for k, v in u_feature_data.items():
@@ -476,7 +477,9 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
strs.PATH: u_rel_path}],
_type=AttachmentType.ImageLinks)
u_as.append(a)
+ log.end_msg()
+ log.msg('Correlations', level=3)
cdp_saved_file_paths = []
pcp_saved_file_paths = []
if len(corr_features) > 1:
@@ -492,17 +495,12 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
rd.add('Correlations', {"kendall correlation difference": cdp.report_data,
"pearson correlation difference": pcp.report_data})
+ log.end_msg()
- scorers = [CensusKMarginalScore(ds.d_target_data,
- ds.d_synthetic_data,
- ds.schema, **ds.config[strs.K_MARGINAL]),
- PropensityMSE(ds.t_target_data,
- ds.t_synthetic_data,
- r_ui_d.output_directory,
- features)]
else:
raise Exception(f'Unknown challenge type: {ds.challenge}')
+ log.msg('K-Marginal', level=3)
group_features = ds.config[strs.K_MARGINAL][strs.GROUP_FEATURES]
f_val_dict = {
f: {i: v for i, v in enumerate(ds.schema[f]['values'])}
@@ -513,59 +511,71 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
prop_pkt = None # propensity score packet
# compute scores and plots
- for s in scorers:
- s.compute_score()
- metric_name = s.NAME
-
- metric_score = int(s.score) if s.score > 100 else round(s.score, 5)
- metric_attachments = []
-
- if s.NAME == CensusKMarginalScore.NAME \
- and ds.challenge == strs.CENSUS:
-
- group_scores = s.scores if hasattr(s, 'scores') and len(s.scores) else None
- subsample_scores = kmarginal_subsamples(ds, CensusKMarginalScore)
- kmarg_sum_pkt, kmarg_det_pkt = kmarginal_score_packet(metric_score,
- f_val_dict,
- ds,
- r_ui_d,
- rd,
- subsample_scores,
- 'PUMA',
- group_features,
- group_scores)
-
- elif s.NAME == PropensityMSE.NAME:
- p_dist_plot = PropensityDistribution(s.prob_dist, r_ui_d.output_directory)
- # pps = PropensityPairPlot(s.std_two_way_scores, rd.output_directory)
- #
- prop_rep_data = {**s.report_data, **p_dist_plot.report_data}
- rd.add('propensity mean square error', prop_rep_data)
-
- p_dist_paths = p_dist_plot.save()
- # pps_paths = pps.save('spmse',
- # 'Two-Way Standardized Propensity Mean Square Error')
- rel_pd_path = ["/".join(list(p.parts)[-2:])
- for p in p_dist_paths]
- # rel_pps_path = ["/".join(list(p.parts)[-2:])
- # for p in pps_paths]
-
- # probability distribution attachment
- pd_para_a = Attachment(name=None,
- _data=propensity_para,
- _type=AttachmentType.String)
- pd_score_a = Attachment(name=None,
- _data=f"Highlight-Score: {metric_score}",
- _type=AttachmentType.String)
- pd_a = Attachment(name=f'Propensities Distribution',
- _data=[{strs.IMAGE_NAME: Path(p).stem, strs.PATH: p}
- for p in rel_pd_path],
- _type=AttachmentType.ImageLinks)
-
- prop_pkt = UtilityScorePacket(metric_name,
- None,
- [pd_para_a, pd_score_a, pd_a])
+ s = CensusKMarginalScore(ds.d_target_data,
+ ds.d_synthetic_data,
+ ds.schema, **ds.config[strs.K_MARGINAL])
+ s.compute_score()
+ metric_name = s.NAME
+
+ metric_score = int(s.score) if s.score > 100 else round(s.score, 5)
+ metric_attachments = []
+
+ if s.NAME == CensusKMarginalScore.NAME \
+ and ds.challenge == strs.CENSUS:
+ group_scores = s.scores if hasattr(s, 'scores') and len(s.scores) else None
+ subsample_scores = kmarginal_subsamples(ds, CensusKMarginalScore)
+ kmarg_sum_pkt, kmarg_det_pkt = kmarginal_score_packet(metric_score,
+ f_val_dict,
+ ds,
+ r_ui_d,
+ rd,
+ subsample_scores,
+ 'PUMA',
+ group_features,
+ group_scores)
+ log.end_msg()
+
+ log.msg('PropensityMSE', level=3)
+ s = PropensityMSE(ds.t_target_data,
+ ds.t_synthetic_data,
+ r_ui_d.output_directory,
+ features)
+ s.compute_score()
+ metric_name = s.NAME
+
+ metric_score = int(s.score) if s.score > 100 else round(s.score, 5)
+
+ p_dist_plot = PropensityDistribution(s.prob_dist, r_ui_d.output_directory)
+ # pps = PropensityPairPlot(s.std_two_way_scores, rd.output_directory)
+ #
+ prop_rep_data = {**s.report_data, **p_dist_plot.report_data}
+ rd.add('propensity mean square error', prop_rep_data)
+
+ p_dist_paths = p_dist_plot.save()
+ # pps_paths = pps.save('spmse',
+ # 'Two-Way Standardized Propensity Mean Square Error')
+ rel_pd_path = ["/".join(list(p.parts)[-2:])
+ for p in p_dist_paths]
+ # rel_pps_path = ["/".join(list(p.parts)[-2:])
+ # for p in pps_paths]
+
+ # probability distribution attachment
+ pd_para_a = Attachment(name=None,
+ _data=propensity_para,
+ _type=AttachmentType.String)
+ pd_score_a = Attachment(name=None,
+ _data=f"Highlight-Score: {metric_score}",
+ _type=AttachmentType.String)
+ pd_a = Attachment(name=f'Propensities Distribution',
+ _data=[{strs.IMAGE_NAME: Path(p).stem, strs.PATH: p}
+ for p in rel_pd_path],
+ _type=AttachmentType.ImageLinks)
+
+ prop_pkt = UtilityScorePacket(metric_name,
+ None,
+ [pd_para_a, pd_score_a, pd_a])
+ log.end_msg()
# rel_up_saved_file_paths = ["/".join(list(p.parts)[-2:])
# for p in up_saved_file_paths]
@@ -601,7 +611,7 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
corr_metric_a.append(pc_para_a)
corr_metric_a.append(pc_a)
-
+ log.msg('PCA', level=3)
pca = PCAMetric(dataset.t_target_data,
dataset.t_synthetic_data,
r_ui_d.output_directory)
@@ -622,6 +632,8 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
_data=[{strs.IMAGE_NAME: Path(p).stem, strs.PATH: p}
for p in rel_pca_save_file_path],
_type=AttachmentType.ImageLinks)
+ log.end_msg()
+
# Add metrics reports to UI
if kmarg_sum_pkt:
@@ -639,16 +651,21 @@ def utility_score(dataset: Dataset, ui_data: ReportUIData, report_data: ReportDa
r_ui_d.add(UtilityScorePacket("Correlations",
None,
corr_metric_a))
+ log.msg('Linear Regression', level=3)
lgr = LinearRegressionReport(ds, r_ui_d, rd)
lgr.add_to_ui()
+ log.end_msg()
if prop_pkt:
r_ui_d.add(prop_pkt)
r_ui_d.add(UtilityScorePacket("PCA",
None,
[pca_para_a, pca_a_tt, pca_a]))
+
+ log.msg('Inconsistencies', level=3)
icr = InconsistenciesReport(ds, r_ui_d, rd)
icr.add_to_ui()
+ log.end_msg()
if kmarg_det_pkt:
r_ui_d.add(kmarg_det_pkt)
diff --git a/sdnist/utils.py b/sdnist/utils.py
index dd8afba..5a2f6cb 100644
--- a/sdnist/utils.py
+++ b/sdnist/utils.py
@@ -3,6 +3,8 @@
import pandas as pd
import json
import os
+import time
+import sys
from pathlib import Path
@@ -184,3 +186,86 @@ def df_filter(data: pd.DataFrame, filters: Optional[List] = None) -> pd.DataFram
data = data[data[feature].isin(values)]
return data
+
+class SimpleLogger:
+ ptrn = '/*\*/' # separator pattern
+
+ def __init__(self):
+ self.level_messages = dict()
+ self.current_head = None
+ self.current_level = None
+ self.msg_path = dict()
+ self.root = None
+
+ def msg(self, message: str, level=1, timed=True):
+ if timed:
+ if self.root is None:
+ self.root = message
+ self.current_level = level
+
+ t = Time()
+ t.start(message)
+ msg_full_path = self.get_msg_path(message, level)
+ self.current_level = level
+ self.current_head = msg_full_path
+ self.level_messages[self.current_head] = (message, level, t)
+
+ if level < 3:
+ level_indent = '|' + ''.join(['--'
+ for _ in range(level)])
+
+ sys_print(level_indent + ' ' + message)
+ elif not timed:
+ level_indent = '|' + ''.join(['--'
+ for _ in range(level)])
+
+ sys_print(level_indent + ' ' + message)
+
+ def end_msg(self):
+ head_data = self.level_messages[self.current_head]
+ message, level, t = head_data
+ del self.level_messages[self.current_head]
+ if self.current_head != self.root:
+ parent_path = self.ptrn.join(self.current_head.split(self.ptrn)[:-1])
+ self.current_head = parent_path
+ self.current_level = level - 1
+ secs = t.time()
+ level_indent = '|' + ''.join(['--'
+ for _ in range(level)])
+ sys_print(level_indent + f' >>>> Finished {message} | Time: {round(secs, 1)}s <<<<')
+
+ def get_msg_path(self, msg, level):
+ if self.current_level == level and self.current_head != self.root:
+ if self.current_head:
+ parent_path = self.ptrn.join(self.current_head.split(self.ptrn)[:-1])
+ msg_path = parent_path + self.ptrn + msg
+ return msg_path
+ else:
+ self.current_head = self.root
+ return self.current_head
+ else:
+ return self.current_head + self.ptrn + msg
+
+
+class Time:
+ def __init__(self):
+ self.labels = dict()
+ self.last_label = None
+
+ def start(self, label: str):
+ self.last_label = label
+ self.labels[label] = time.time()
+
+ def time(self):
+ if not self.last_label:
+ sys_print('sdnist.utils.Time.time() Invalid Use of Time: No Label Found')
+ return
+ start = self.labels[self.last_label]
+ end = time.time() - start
+ self.labels[self.last_label] = end
+ return self.labels[self.last_label]
+
+
+def sys_print(data: str):
+ sys.stdout.flush()
+ sys.stdout.write(data + '\n')
diff --git a/setup.py b/setup.py
index 4e8df5b..cf71376 100644
--- a/setup.py
+++ b/setup.py
@@ -8,8 +8,8 @@
setup(
name='sdnist',
- version='1.4.1',
- description='SDNist: datasets and evaluation tools for data synthesizers',
+ version='2.0.0',
+ description='SDNist: Deidentified Data Report Generator',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/usnistgov/SDNist',