Skip to content
← 数据治理、隐私与伦理

/knowledge/notes/synthetic-data

概念笔记 · 数据治理、隐私与伦理

合成数据

从模型里抽出来、而不是从数据里抄出来的行。生成器保留什么、丢掉什么,以及我在信任一张合成数据表之前做的两项检查。

学于
合成测试数据与替代数据实践
时间
2025–2026
应用于
SA Mock Address Lab · HPLC 质控实验室
阅读 / 复习
约 6 分钟阅读2026-10-21

这个网站上有三个演示,跑的都是从来没有存在过的数据。那些行看起来像化验结果、街道地址或一个月的每日打卡,但没有一行来自真实的人或合作机构。每一次这样做都是有意的选择,因为真实数据不能离开它原来所在的地方。这篇笔记讲生成器怎样造出这样的数据,它保留了什么、悄悄丢掉了什么,以及我在信任一张合成数据表之前会做哪些检查。

01

基本想法

合成数据是从数据的模型里抽出来的,而不是从数据里抄出来的。模型可以手写,也就是自己选定的规则和分布,也可以拟合,也就是从真实行里学出来。无论哪种,合成行都是新抽的,所以没有哪一行需要属于某个具体的人。

它常被用来做两件很不一样的事。第一件是替代不能共享的数据:病历、合作方的实验导出、任何受隐私或保密承诺约束的东西。第二件是做测试数据,而且真相由你掌控。如果你故意在第 412 行埋一个故障,你就确切知道一个好的检测方法应该标出什么,真实数据从来不会告诉你这一点。第二件事甚至完全不需要真实数据。

两种用法有同一个问题:生成器只能还给你模型里有的东西。模型没有表达的两列之间的关系,在每一条合成行里都不存在,抽一百万行也补不回来。反过来的失败同样真实:模型记住的太多,生成器就只是绕了个弯的真实数据副本。所以每张合成表都要面对两个互相拉扯的问题:它离真实数据够不够近,近到有用,这是保真度。它离真实行够不够远,远到安全,这是泄露风险。

02

数学

真实行来自某个未知分布 PP。生成器用它们拟合一个模型 P^θ\hat{P}_\theta,再从模型里抽新行。

x1,…,xn∼P⟶P^θ⟶x~1,…,x~m∼P^θx_1, \dots, x_n \sim P \quad\longrightarrow\quad \hat{P}_\theta \quad\longrightarrow\quad \tilde{x}_1, \dots, \tilde{x}_m \sim \hat{P}_\theta

拟合出来的模型表达不了的东西,任何一条合成行里都不会有。

衡量保真度,要把两份样本当作分布来比较,而不是只比几个汇总数字。一个朴素的办法是把空间切成 JJ 个格子,算出每个格子里真实行的比例 pjp_j 和合成行的比例 qjq_j,再把差值加起来。这就是总变差距离。

TV⁡(p,q)=12∑j=1J∣pj−qj∣\operatorname{TV}(p, q) = \frac{1}{2} \sum_{j=1}^{J} \lvert p_j - q_j \rvert

0 表示每个格子的比例都一样,1 表示两份样本没有落在任何同一个格子里。

单看一个分数意义不大,因为同一个来源的两份老实样本也会有差别。基准是另一份新抽的真实数据,生成器训练时没见过它。如果合成行的分数接近这份新样本,生成器在这个指标上已经差不多到头了。如果合成行比新的真实数据还要好得多,就该起疑,因为最容易赢过新样本的办法,就是照抄训练用的那些行。

衡量泄露,最简单的检查是到最近记录的距离。对每一条合成行,找出离它最近的真实行。

di=min⁡1≤j≤n∥x~i−xj∥d_i = \min_{1 \le j \le n} \lVert \tilde{x}_i - x_j \rVert

把这些距离的分布,和新抽真实行的同一种距离对比。

新抽的真实行和训练行之间有一个典型的距离。合成行如果比这个距离近得多,就是在泄露个人记录。距离正好为零,说明某条真实行被原样发布了。

如果目标是一组类别的比例,而不是一团点,保真度检查就变成拟合优度检验。数出 KK 个类别里各自观测到的行数 OkO_k,和目标比例下的期望数 EkE_k 对比,并且在 p 值旁边报告效应量,免得样本一大,很小的差距也显得很重要。

χ2=∑k=1K(Ok−Ek)2Ek,w=χ2/n\chi^2 = \sum_{k=1}^{K} \frac{(O_k - E_k)^2}{E_k}, \qquad w = \sqrt{\chi^2 / n}

Pearson 检验,自由度为 K − 1,要求每个期望数大约都不小于 5。

03

动手试

工具里的“真实数据”本身也是虚构的:三个簇里的 100 行。每个生成器从这些行里学习,再抽出 100 条新行。表格把合成行和同样三个簇里新抽的一份样本放在一起打分,后者就是任何生成器所能期望的最好结果。

生成器

0.05
种子 1
  • 真实行
  • 合成行

浅色线是计算形状差距用的 5 × 5 网格。

真实行的相关系数为 0.55。

“正态拟合”生成器的相关系数为 0.61,真实数据为 0.55。形状差距为 0.53,明显高于新抽真实样本的 0.16,形状丢了。合成行离真实行比新的真实数据更远(0.174,对比 0.033),复制的成分很少。

一份新抽的真实样本和合成行的得分,都以真实行为参照。
数据r形状差距最近真实行复制
新抽的真实样本0.570.160.0330
“正态拟合”生成器0.610.530.1740
这里的每一份数据都来自带种子的生成器,同一个种子和同一组设置总是给出同样的行。圆圈是真实行,实心点是合成行。
  • 先选“正态拟合”。它的相关系数和真实数据很接近,形状差距却是三者里最大的,因为一个正态分布把簇之间的空白都填满了。汇总统计量对上了,说明不了多少问题。
  • 换成“打乱列”。每一列的取值原封不动,相关系数却掉到接近零,左上角还冒出一个真实数据里根本没有的簇。
  • 换成“复制加噪”,把 σ 拖到 0。形状差距反而赢过了新抽的真实样本,100 行全是副本。完美的保真度,恰恰就是隐私上的失败。
  • 慢慢调高 σ。到 0.05 左右,到最近真实行距离的中位数和新样本对上了。超过 0.2 之后,簇开始糊掉,形状差距跟着上升。
  • 在一些种子下,包括第一个,“打乱列”纯属偶然地拼回了一条真实行。生成器不必有意复制,也可能把真实记录发布出去。

04

我在哪用到它

05

容易出错的地方

06

参考资料

  • Synthetic Data: what, why and how?Jordon、Szpruch、Houssiau 等,arXiv:2205.03257,2022。一份面向英国皇家学会写的综述,读起来不累,讲清楚合成数据能承诺什么、不能承诺什么,对保真度、效用和隐私之间的权衡讲得很好。
  • synthpop: Bespoke Creation of Synthetic Data in RNowok、Raab 与 Dibben,Journal of Statistical Software 第 74 卷第 11 期,2016。来自官方统计领域的实用工具包和论文。它一次拟合一列,以前面的列为条件,并附带效用检查。
  • Synthetic Data: Anonymisation Groundhog DayStadler、Oprisanu 与 Troncoso,USENIX Security Symposium,2022。在宣称一份合成数据是隐私安全的之前,应该先读这篇。它攻击了好几种生成器,说明少见的记录依然暴露在外。