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, 二进制发布, 代码示例, 噪声注入, 均值估计, 差分隐私, 开源工具, 数据分析, 数据脱敏, 无后门, 直方图, 统计查询, 网络安全, 联邦学习前置, 计数, 请求拦截, 逆向工具, 隐私保护, 隐私引擎, 隐私计算