sassoftware/dpmm

GitHub: sassoftware/dpmm

一个提供端到端差分隐私保障的表格数据合成生成库,实现PrivBayes、MST、AIM等前沿边缘模型。

Stars: 12 | Forks: 2

# _dpmm_: 差分隐私边缘模型,一个用于合成表格数据生成的库 ![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/74c7e19c9e163528.svg) ![Coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/64290fea0a163529.svg) [![arXiv](https://img.shields.io/badge/arXiv-2506.00322-b31b1b.svg)](https://arxiv.org/abs/2506.00322) ## 概述 _dpmm_ 是一个 Python 库,实现了最先进的差分隐私边缘模型,用于生成合成表格数据。 边缘模型已被一致证明能够捕获原始数据的关键统计特性(如边缘分布),并在合成数据中重现这些特性,而差分隐私 (DP) 则确保了个人隐私得到严格保护。 主要功能摘要: * 端到端的 DP 管道,包括数据预处理、生成模型和机制: * DP 数据预处理 —— 1) 数据域作为输入提供或通过 DP 提取[论文](https://www.research-collection.ethz.ch/handle/20.500.11850/508570),以及 2) 连续数据通过 DP 进行离散化(Uniform 和 PrivTree[论文](https://arxiv.org/abs/1601.03229)) * 基于 select-measure-generate 范式[论文1](https://arxiv.org/abs/2108.04978),[论文2](https://differentialprivacy.org/synth-data-1/) 和 Private-PGM[论文](https://arxiv.org/abs/1901.09136) 的最先进 DP 生成模型 —— PrivBayes[论文](https://dl.acm.org/doi/10.1145/3134428)、MST[论文](https://arxiv.org/abs/2108.04978) 和 AIM[论文](https://arxiv.org/abs/2201.12677) * DP 机制的浮点精度[论文](https://arxiv.org/abs/2207.10635) * 卓越的实用性和性能 * 跨所有模型/管道的丰富功能 * 对底层机制和模型/管道的 DP 审计[论文1](https://arxiv.org/abs/2405.10994),[论文2](https://dl.acm.org/doi/10.1145/3576915.3616607) __注意:预期用途 —— _dpmm_ 专为隐私保护合成数据生成(特别是在简单场景中,例如在具有最多 32 个特征[论文1](https://arxiv.org/abs/2112.09238),[论文2](https://arxiv.org/abs/2305.10994) 的数据集中保留高质量的 1/2 路边缘)中的研究和探索性用途而设计,并非旨在用于复杂现实应用中的生产环境。__ ## 安装 ### 前置条件 - Python 3.10 或 3.11 ### PyPi 安装 你也可以通过运行以下命令从 PyPi 安装: ``` pip install dpmm ``` ### 本地安装 要从本地 github 仓库安装,请运行以下命令: ``` git clone git@github.com:sassoftware/dpmm.git cd dpmm poetry install ``` ### 测试 要运行单元测试,请转到仓库的根目录(如果是本地安装),并使用以下命令: ``` pytest tests/ ``` ## 功能 我们提供了大量示例,展示了 __dpmm__ 在数据预处理以及生成模型训练和生成方面的功能。 这些示例涵盖所有模型和模型设置,并可从仓库访问(如果是本地安装)。 __注意:此包的总体意图是通过管道层使用,以确保不会发生隐私泄露,直接使用模型是可能的,但在这种情况下,必须提供域以确保隐私保证。__ ### 预处理 提供的生成管道将自动 DP 离散化预处理与生成模型结合在一起,并允许以下功能: | 功能 | 描述 | 示例 | | --- | --- | --- | | __dtype 支持__ | 原生支持以下 pandas 数据类型:`datetime`、`timedelta`、`float`、`int`、`category`、`bool`。 | [Dtypes 示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_dtypes.ipynb) | |__空值支持__ | 支持缺失值,如果真实数据的任何列中存在缺失值,它们将被相应地重现。 | | |__自动离散化__ | 虽然 _dpmm_ 使用的默认离散化策略是 `priv-tree`,但也提供了更典型的 `uniform` 策略,它们都可以与 `'auto'` 模式结合使用,该模式将尝试为每个数值列确定最佳的箱数。 | | ### 模型功能 | 功能 | 描述 | 示例 | | --- | --- | --- | | __域压缩__ | 可以将 `compress` 标志设置为 `True`,以确保离散化的域被压缩,从而改善隐私预算/数据质量的权衡。 | | |__模型大小控制__ | 一个 `max_model_size` 参数,确保所选边缘的内存占用保持在指定的上限阈值之下。 | [最大内存示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_memory.ipynb) | |__模型序列化__ | 管道可以通过提供有效的文件夹来存储模型,从而序列化到磁盘或从磁盘反序列化。 | [序列化示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_serialisation.ipynb) | ### 生成功能 | 功能 | 描述 | 示例 | | --- | --- | --- | | __条件生成__ | 在生成时,也可以提供一个仅包含部分列的部分 dataframe,在这种情况下,生成管道将条件生成剩余的列。 | [条件生成示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_conditional.ipynb) | | __确定性生成__ | 当在生成时提供 `random_state` 值时,假设提供了相同的输入参数,生成过程将变为确定性的。 | [随机状态示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_seed.ipynb) | ### 模型 实现的模型包括: | 方法 | 描述 | 参考 | 示例 | |--- | --- | --- | --- | |**PrivBayes+PGM**| 差分隐私贝叶斯网络。 | [PrivBayes: Private Data Release via Bayesian Networks](https://dl.acm.org/doi/10.1145/3134428)| [PrivBayes 示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_privbayes.ipynb) | |**MST**| 最大生成树。 | [Winning the NIST Contest: A scalable and general approach to differentially private synthetic data](https://arxiv.org/abs/2108.04978)| [MST 示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_mst.ipynb) | |**AIM**| 自适应迭代机制。 | [AIM: An Adaptive and Iterative Mechanism for Differentially Private Synthetic Data](https://arxiv.org/abs/2201.12677)| [AIM 示例](https://github.com/sassoftware/dpmm/tree/main/examples/example_aim.ipynb) | __注意:所有模型都依赖于 select-measure-generate 范式[论文1](https://arxiv.org/abs/2108.04978),[论文2](https://differentialprivacy.org/synth-data-1/) 和 Private-PGM[论文](https://arxiv.org/abs/1901.09136)。__ ## 快速开始 要开始使用 _dpmm_,请按照以下步骤操作: 1. 导入必要的模块并加载你的数据: import pandas as pd import json from dpmm.pipelines import MSTPipeline wine_dir = Path().parent / "wine" df = pd.read_pickle(wine_dir / "wine.pkl.gz") with (wine_dir / "wine_bounds.json").open("r") as f: domain = json.load(f) 2. 初始化并拟合模型: model = MSTPipeline( # Generator Parameters epsilon=1.0, delta=1e-5, # Discretiser Parametrs proc_epsilon=0.1, ) model.fit(df, domain) 3. 生成合成数据: synth_df = model.generate(n_records=100) print(synth_df) """ type fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality 0 white 5.288142 0.190330 0.212473 1.402665 0.032305 37.097305 60.585301 0.990234 2.998241 0.658841 12.467682 1 1 white 5.956364 0.225099 0.210124 15.968057 0.043620 70.073909 202.689578 0.995807 3.198247 0.318414 10.290390 0 2 white 5.315535 0.341091 0.247268 0.628240 0.024938 52.468176 104.892353 0.990975 3.161218 0.971699 11.181373 1 3 white 7.879125 0.234170 0.275704 3.711610 0.039565 68.977194 163.380550 1.005989 3.068622 0.798520 8.075999 0 4 white 6.981342 0.358461 0.337705 3.600390 0.050450 51.567452 134.896467 0.996149 3.272745 0.599021 10.200400 0 """ ### 故障排除 如果你遇到任何问题,请检查以下内容: - 确保已安装所有必需的包。 - 验证你的数据不包含缺失值或非整数列(如果使用某些模型)。 - 检查模型参数并确保它们设置正确。 ## 许可证 该项目根据 [Apache 2.0 许可证](https://github.com/sassoftware/dpmm/tree/main/LICENSE) 授权。 该项目还使用了以下项目的代码片段: - [private-pgm](https://github.com/ryan112358/private-pgm): Apache 2.0 - [opendp](https://github.com/opendp/smartnoise-sdk): MIT License - [ektelo](https://github.com/ektelo/ektelo): Apache 2.0 ## 其他资源 * [SAS Global Forum 论文](https://www.sas.com/en_us/events/sas-global-forum.html) * [SAS 社区](https://communities.sas.com/) ## 引用 如果你使用此代码,请引用相关论文: ``` @inproceedings{mahiou2025dpmm, title={{dpmm: Differentially Private Marginal Models, a Library for Synthetic Tabular Data Generation}}, author={Mahiou, Sofiane and Dizche, Amir and Nazari, Reza and Wu, Xinmin and Abbey, Ralph and Silva, Jorge and Ganev, Georgi}, booktitle={TPDP}, year={2025} } ```
标签:AIM, Apex, MST, Private-PGM, PrivBayes, 人工智能安全, 合成数据生成, 合规性, 安全规则引擎, 差分隐私, 数据脱敏, 数据隐私保护, 数据预处理, 机器学习, 统计建模, 联邦学习前置处理, 表格数据, 边缘模型, 逆向工具, 隐私审计, 隐私计算