🏆 Compete against conference participants to win a revolutionary espresso machine, made in the heart of Seattle, where Privacy Dynamics is headquartered. The winner takes home this incredible machine! ☕️ The Decent Espresso Machine—Model DE1 XL—pulls amazing shots of espresso, offers unparalleled extraction control and feedback, and makes other espresso machines feel primitive by comparison. Your local coffee shop will be jealous. Learn more about the prize here. |
Sunday, March 27, 2022 at 11:59pm (CDT)
We will announce the winner on twitter #privacychallenge
The objective of an anonymizer is to protect the identities of individuals in a dataset while maintaining the utility of the data as much as possible. In the Privacy Challenge, your objective is to beat other contestants at maximizing privacy and utility. The winner will take home the world's most state-of-the art home espresso machine, designed and manufactured in Seattle, the home of Privacy Dynamics.
- Contestants submit an anonymization function to the Privacy Challenge Test Bench.
- Your function will be run against several pseudonymized datasets and scored for quality. We take the average of the scores.
- Quality is measured using three component scores:
- Privacy - This score represents re-identification risk. Generally, it is based on record-level k-anonymity. The actual score is computed by performing many simulated attacks and taking the average probability of re-identification.
- Utility - This scores how well the data has been preserved and is based on row-level and column-level distortion.
- Time - Very slow anonymizers will be penalized, but the reward for building a very fast anonymizer is limited, i.e. mediocre privacy done extremely quickly will not receive a high score. The goal is to maximize privacy and utility in a reasonable amount of time.
-
Fork this repository and clone it to your hard drive.
-
Implement your anonymization algorithm within the
anonymize()
function inmain.py
. See https://github.com/pvcy/pvcy-challenge/blob/main/main.py#L4. The function must accept a Pandas DataFrame and a list of quasi-identifiers (QIDs) and return a DataFrame. -
The list of QIDs will map to column names in the input DataFrame. Every combination of QIDs in the dataset forms an equivalence class, and the fewer records there are in each equivalence class, the higher the risk that an individual can be linked to an external dataset. Make changes to column QID values to increase the size of equivalence classes. More records belonging to larger equivalence classes will result in a higher privacy score, but as more cells are distorted, the utility score will decrease. The objective is to optimize privacy and utility.
-
You may also choose to suppress rows as part of your anonymization strategy. It is valid to replace suppressed values with a mask or drop rows entirely from the DataFrame.
-
Do not modify or reset values in the
id
column. This column is used in part to compute distortion, and changing it will negatively impact the utility score. Dropping rows is supported. -
Do not drop any columns. Missing output columns will cause the Test Bench to fail.
-
Test datasets will not contain any direct identifiers (DIDs).
-
We've included one of the Test Bench datasets in the repo for you to use in testing.
-
After completing your anonymizer, push your implementation to your fork and open a PR into our repo.
-
Results will be posted on the Privacy Challenge Dashboard at the Privacy Dynamics booth.
-
Come talk to us at the booth!
- Each contestent gets one entry, but you are allowed to make changes and resubmit multiple times. Come see us at the booth and ask to re-submit. New contestants will be given priority if there is a lot of activity.
- The entrypoint for your implementation must be in
anonymize()
inmain.py
, but you are free to add additional libraries and use other Python packages. - Define your dependencies in
requirements.txt
. The total installed size of all depedencies must not exceed 500 MB. - All outbound HTTP calls are explicitly disallowed, i.e. you may not use any external services, even those called by installed packages. All computation must be done by code in your branch.
- Only make changes in
main.py
andrequirements.txt
. If any edits beyond these two files are made, your submission will be rejected. You are welcome to ask Privacy Dynamics engineers about anonymization.
- We've provided
pytest
tests to ensure your anonmyzier passes basic submission rules. To setup an environment and run the tests:python -m venv venv pip install -r requirements.txt python -m pytest tests/
- Additional checks will be run automatically as part of the Test Bench, and the winning submission will be checked manually to ensure compliance with the rules.