From 02f69f6e5487a9ad7148ad531c275b6b16632d4e Mon Sep 17 00:00:00 2001 From: Gabriel Franco Date: Tue, 1 Sep 2026 10:51:30 -0300 Subject: [PATCH] time estimation and experiment details in README.md --- .gitignore | 1 + README.md | 45 ++++++++++++++++++++- __pycache__/data.cpython-314.pyc | Bin 5263 -> 0 bytes __pycache__/dp.cpython-314.pyc | Bin 846 -> 0 bytes __pycache__/experiment.cpython-314.pyc | Bin 3005 -> 0 bytes __pycache__/get_statistics.cpython-314.pyc | Bin 3435 -> 0 bytes __pycache__/t_tests.cpython-314.pyc | Bin 2080 -> 0 bytes experiment.py | 4 +- 8 files changed, 47 insertions(+), 3 deletions(-) delete mode 100644 __pycache__/data.cpython-314.pyc delete mode 100644 __pycache__/dp.cpython-314.pyc delete mode 100644 __pycache__/experiment.cpython-314.pyc delete mode 100644 __pycache__/get_statistics.cpython-314.pyc delete mode 100644 __pycache__/t_tests.cpython-314.pyc diff --git a/.gitignore b/.gitignore index 9b31389..4252190 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ venv/ *.parquet *.zip *.csv +__pycache__/ diff --git a/README.md b/README.md index 3c203c2..6b13c33 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,44 @@ -# Budget Allocation in Differential Privacy +# Experiment: PREDICTIVE METRIC FOR OPTIMAL BUDGET ALLOCATION IN DIFFERENTIAL PRIVACY -O experimento está em experiment.py +Based on the [original experiment](https://github.com/conseg/TheImpactofDifferentialPrivacyondatautilityinfundamentalmathematicaloperations), but using a real life dataset. + +Key difference: sensitivity calculation to satisfy Differential Privacy. + +## The Dataset + +PNAD Contínua (IBGE - Brasil) - 2026 (primeiro trimestre) + +## The Experiment + +Objective: evaluate the metric on a t-test equation to compare Northeast and Southeast income (informal vs formal workers) + +Steps: + +1. Clip and normalize dataset (C = 46_366, the constitutional salary cap, which is set at the salary of Supreme Court justices). Must be a value taken from the real world, not from the dataset. +2. Calculate necessary statistics and their sensitivities +3. For each possible budget allocation with total epsilon=12, granularity=0.5, epsilon > 0 (1,352,078 possibilities): evaluate the metric for the statistics and the budget allocation sequence +4. Save all possible scores and budget allocation sequences to csv for further analysis, and print the best metric score. + +## Estimated Experiment Execution Time + +To reproduce (in a Linux shell): + +1. `time python ./experiment.py real` +2. Send an interrupt (Ctrl+C) when N exceeds 500. +3. To find the number of hours, based on the last N and the elapsed time (t): `((1352078*t)/n)/3600` + +Laptop (Intel Core i5 1135G7 - 8GB RAM) +PC (AMD Ryzen 7 8700G - 32GB RAM) + +Laptop: 514 iterations in 12.13s +PC: 493 iterations in 8.11s + +Estimated total time on the laptop: 8h51m +Estimated total time on the PC: 6h10m + +## Tasks + +1. Provide a way to run the experiment in parts, to allow parallel execution on multiple CPUs. +2. Run the experiment to evaluate the metric. +3. Combine the resulting CSVs into one. +4. Analyze the csv to find notable metric scores for specific sequences. diff --git a/__pycache__/data.cpython-314.pyc b/__pycache__/data.cpython-314.pyc deleted file mode 100644 index 31decf1d3c5074306ca5a74f943b2e9dfab907ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5263 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 diff --git a/__pycache__/t_tests.cpython-314.pyc b/__pycache__/t_tests.cpython-314.pyc deleted file mode 100644 index c453cb5e2050b023c08af574b6be60695a52ce52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmb_d+iTla82@zjC9?kARUU?AA5Pkb@Dn>_OO=Xw@XDOzA3+_#IvQG5-)3|J4)8jaS-&gD3UH|^Zw>KX70$&e(K2)8kQ3t-^ zTGI55{&?x9)gM;t*YD39Oq~0LHYXNM?^1)I!~EYs3;Yq#9N$13$T}e>JdiiFBdpVr0LkOjbSfkHqE$XE*+WQ##H>2q~c9-hCNbj5<2Zr zrn+PoZi?%&=eq2nUtL+v_&jG%P+M>%h%>D!G+M{NVdP<5s0@}as{+1Bn%i*aiI6d77C!dSi9mMY1Gg5=b-7C|j3IlX{INGdv5 zNj&KbS4VcZC$EiHGdqdHfst?2os|~p4So6XqYD=gL$B|hjG3V~kf~iWLoq_HnxV5V z-Dm_n7yGMR%~QKqpR5nw_w5ZV?u$!*iLkWX;apocLuZJ*W`?3K(<9bW6YIk|x4T{6 z+#7gnUp$Xk3yX*1U@d5hrwI+1;uN8RDNZ8Y8=5x7C{gs9;xwVe5WyCLJBjK_ZGJbg zd%hms>z~^f&b7c^?9_55wDXi>u*F?vH(g&rum=dX00WU{4D^p4tx+KKRo1jV5)ZE= z73I7tN%&Xm*;EY4iEq?ru{qh0o53d?#LfUaT*QgQTaq+PSh za