datakaveri/differential-privacy

GitHub: datakaveri/differential-privacy

基于 JSON 配置的差分隐私引擎,支持在 CSV 数据上执行均值、直方图和计数查询,提供用户级和记录级隐私保护并自动追踪隐私预算。

Stars: 13 | Forks: 3

# 差分隐私引擎 本仓库基于 JSON 配置在 CSV 数据上运行差分隐私(DP)查询。 支持的维度: - DP 级别:`item`,`user` - 查询类型:`mean`,`histogram`,`count` - 配置模式:单查询和多查询 ## 项目结构 - `DP/`:核心 DP 路由、流水线、查询和工具 - `config/`:由 `run_from_config_dir.py` 使用的运行时配置 - `all_config/`:用于手动测试的示例配置 - `data/`:CSV 数据集 - `output/`:运行时输出(`status.json`、图表、JSON 构件) ## 设置 ``` cd differential-privacy python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## 运行模式 ### 1. 运行 `config/` 中的所有配置 ``` python3 run_from_config_dir.py ``` 输出写入至: - `output/status.json` ### 2. 从 `all_config/` 运行样本矩阵 ``` python3 run_all_configs.py ``` 输出写入至: - `output/results/*_output.json` ### 3. 以编程方式运行单个配置 ``` python3 - <<'PY' import json from iudx_dp_main import main_process with open("config/multi_query.json", "r") as f: cfg = json.load(f) print(main_process(cfg)) PY ``` ## 配置格式 (UI-Wrapped) 首选的配置格式为: ``` { "operations": ["dp"], "data_type": "dp_test_dataset", "dp_test_dataset": { "level": "user", "query": "mean", "attribute": "age", "epsilon": 1.0, "user_column": "user_id" } } ``` 注意: - 当未提供 `data.csv` 时,使用 `data_type` 来解析 `data/` 中的 CSV。 - 数据集键必须与 `data_type` 完全匹配。 - `insensitive_columns` 是可选的元数据。 ## 多查询配置 使用 `queries` 在一个请求中执行多个查询,每个查询拥有各自的 epsilon: ``` { "operations": ["dp"], "data_type": "dp_test_dataset", "dp_test_dataset": { "level": "user", "user_column": "user_id", "queries": [ { "query": "mean", "attribute": "age", "epsilon": 0.7, "min_value": 0, "max_value": 100 }, { "query": "count", "count_attribute": "age", "count_operator": ">", "count_value": 25, "epsilon": 0.3 } ] } } ``` 结果包含: - `query_results`(每个查询) - `cumulative_epsilon_budget`(所选查询 epsilon 的总和) 建议:将此 JSON 作为本地运行时文件保存在 `config/` 下(例如 `config/multi_query.json`),不要提交。 ## 查询语义 ### Mean - Item 级别:对记录进行加噪均值计算(含裁剪边界)。 - User 级别:具有裁剪功能的用户贡献感知均值。 ### Histogram - Categorical 模式:基于类别或唯一值的分箱。 - Numeric 模式:基于 `U/V` 和 `bin_width` 或 `bins` 的分箱。 ### Count - Item 级别:满足谓词过滤器的记录计数。 - User 级别:至少有一个匹配贡献的不同用户计数。 - `dp_count` 被四舍五入为整数。 谓词字段: - `count_attribute` - `count_operator`:`>`、`>=`、`<`、`<=`、`==`、`!=` - `count_value` ## 输出契约 顶层结果结构: - 成功: - `{"status":"success","result":{...}}` - 多查询部分失败: - `{"status":"partial_error","result":{"query_results":[...], ...}}` - 错误: - `{"status":"error","error":{"code":"...","message":"..."}}` `run_from_config_dir.py` 将所有配置运行聚合到 `output/status.json` 中,并添加顶层 `cumulative_epsilon_budget`。 ## 测试 ``` python3 -m unittest discover -s tests -v ``` ## Docker ``` docker build -t dp-app . docker run --rm \ -v "$(pwd)/config:/app/config" \ -v "$(pwd)/data:/app/data" \ -v "$(pwd)/output:/app/output" \ dp-app ```
标签:CSV处理, epsilon, Homebrew安装, IUDX, JSON配置, Python, 二进制发布, 代码示例, 噪声注入, 均值估计, 差分隐私, 开源工具, 数据分析, 数据脱敏, 无后门, 直方图, 统计查询, 网络安全, 联邦学习前置, 计数, 请求拦截, 逆向工具, 隐私保护, 隐私引擎, 隐私计算