城南有家老王包子铺,招牌大包子皮薄馅大,每天卖出一千个——这就是“真实数据”。隔壁小李想开分店,买了一批老王的包子反复研究,仿制出一批“合成包子”。问题来了:小李的包子到底像不像?当然不能只尝一个就下结论,得整笼整笼地比——先单看大小分布像不像(只盯一个特征),再看大小和重量的搭配像不像(多个特征的关系),还可以按大小分档、数一数每档数量对不对(分档数数),或者把两条“小于某直径的包子占比”曲线叠在一起、量它们的最大落差(曲线比差距)。本文就是带你当一回“统计评审”,学会用这些朴素又严谨的尺子,定量回答:合成数据到底有没有在统计上忠实于真实数据?这是合成数据上线前必须闯过的质检关,也是差分隐私数据发布前的最后一道闸门。

岗位关联

学完本节,你将掌握合成数据统计保真度的整套评估方法:用 KS 检验、卡方检验、MMD 与降维可视化,在数据发布和模型训练前守住质量底线——这是数据算法工程师的基本功,也是面试高频考点。

目录
  1. 可视化演示
  2. 保真度总览:为什么不能只“尝一个包子”
  3. 边缘分布度量:单看“包子大小”一个维度
  4. 联合分布度量:大小与重量的“搭配”也要像
  5. KS检验:量出两条曲线的“最大落差”
  6. 卡方检验:分档数数再对比
  7. 多维特征对比:十几项属性整体打包
  8. 高维降维可视化:把几十维“拍扁”到一张图上
  9. 方法选型实战:什么时候用哪把尺子
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

\u53ef\u89c6\u5316\u5c55\u793a\u5408\u6210\u6570\u636e\u4e0e\u771f\u5b9e\u6570\u636e\u7684\u7edf\u8ba1\u4fdd\u771f\u5ea6\u68c0\u9a8c\u65b9\u6cd5\uff0c\u5305\u62ecKS\u68c0\u9a8c\u7684ECDF\u5bf9\u6bd4\u3001\u8054\u5408\u5206\u5e03\u6563\u70b9\u5bf9\u6bd4\u4e0e\u964d\u7ef4\u53ef\u89c6\u5316\u91cd\u53e0\u5ea6\u5206\u6790\uff0c\u4ea4\u4e92\u5207\u6362\u89c2\u5bdf\u4fdd\u771f\u5ea6\u8bc4\u4f30\u6838\u5fc3\u73af\u8282\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

KS\u68c0\u9a8c\u4e0eECDF\u5bf9\u6bd4 \u771f\u5b9e\u6570\u636e\u4e0e\u5408\u6210\u6570\u636e\u7684\u7ecf\u9a8c\u7d2f\u79ef\u5206\u5e03\u51fd\u6570\u5bf9\u6bd4 KS\u7edf\u8ba1\u91cfD\u8861\u91cf\u4e24\u6761ECDF\u7684\u6700\u5927\u5dee\u503c D = sup|F\u2081(x) - F\u2082(x)| \u70b9\u51fb\u5207\u6362\u67e5\u770b\u8054\u5408\u5206\u5e03

保真度总览:为什么不能只“尝一个包子”

老王每天卖一千个包子(真实数据),小李仿制了一批(合成数据)。评审要回答“像不像”——但绝不能只咬一口就拍板:单个包子可能恰好很接近,也可能恰好差很远。正确姿势是把两批包子各自看成一个整体,比较“整笼的统计长相”——这就是统计保真度。

统计保真度(statistical fidelity)衡量的是:合成数据的概率分布与真实数据的概率分布有多接近。分布不是某个包子,而是“所有可能包子出现的规律”。如果两批包子的直径都集中在 7 厘米附近、散布程度也相似,我们才说统计上是忠实的。这个概念是差分隐私合成数据的关键质检项:模型既要在统计上像真实数据,又不能原样记住任何一条真实记录。

技术定义可以用“分布总偏差”来写:两堆包子直径密度曲线之间夹的面积越小,保真度越高。

就像评审画下两堆包子的直径曲线、量出阴影面积,面积越小,小李离“出师”越近。需要提醒的是:保真度追求“统计像”,而不是“逐条还原”——这正是合成数据与复制粘贴的本质区别。

Fidelity=1−12∫−∞+∞∣Preal(x)−Psynth(x)∣ dx\displaystyle \text{Fidelity} = 1 - \frac{1}{2} \int_{-\infty}^{+\infty} \left| P_{\text{real}}(x) - P_{\text{synth}}(x) \right| \, dx
这个分数等于 1 说明两条密度曲线完全重合;等于 0 说明完全不重叠。中间值越大,合成越“像”。
  1. 真实/合成密度P_real 和 P_synth 分别是真实包子与合成包子在直径 x 上的概率密度函数,描述“某个直径出现的可能性”。
    Preal(x), Psynth(x)P_{\text{real}}(x),\ P_{\text{synth}}(x)
  2. 绝对值差对每个直径 x,求两个密度值差多少,取绝对值避免正负抵消。
    ∣Preal(x)−Psynth(x)∣\left| P_{\text{real}}(x) - P_{\text{synth}}(x) \right|
  3. 全区间积分从最小到最大的所有直径上把偏差累加,得到“总差异面积”。
    ∫−∞+∞∣Preal(x)−Psynth(x)∣ dx\int_{-\infty}^{+\infty} \left| P_{\text{real}}(x) - P_{\text{synth}}(x) \right| \, dx
  4. 归一化与取补乘 1/2 把面积压到 [0,1],再用 1 减,得到保真度分数。
    Fidelity=1−12∫−∞+∞∣Preal(x)−Psynth(x)∣ dx\displaystyle \text{Fidelity} = 1 - \frac{1}{2} \int_{-\infty}^{+\infty} \left| P_{\text{real}}(x) - P_{\text{synth}}(x) \right| \, dx

边缘分布度量:单看“包子大小”一个维度

评审的第一招:只关心一个特征。比如单看直径——把老王的一千个包子和小李的一千个包子分别画成直方图,一条“直径分布”就出来了。这种只盯着某一个变量、把其他变量都“忽略掉”的分布,叫边缘分布。

边缘分布是从联合分布“压扁”出来的。假设每个包子有两个属性:直径 X 和重量 Y。老王的联合分布 P_XY 描述“直径和重量同时取某值的概率”;而边缘分布 P_X 就是把这个联合分布对 Y 维度求和/积分,相当于问:“不管多重,光看直径长什么样”。

对比边缘分布时,常用直方图叠加、均值与方差对比等工具,后面要讲的 KS 检验也主要作用在这一层。评审先确认“单项指标像不像”,再决定要不要深挖更复杂的结构。

PX(x)=∫yPX,Y(x,y) dy\displaystyle P_X(x) = \int_{y} P_{X,Y}(x,y)\, dy
中文翻译:想知道“只按直径看,包子长什么样”,就把直径相同但重量不同的所有情况全部累加在一起。
  1. 联合密度P_XY(x,y) 是直径和重量同时出现的概率密度,张成一张二维“地形图”。
    PX,Y(x,y)P_{X,Y}(x,y)
  2. 对 y 积分固定直径 x,把所有可能的重量 y 累加,相当于把地形图沿“重量轴”压扁。
    ∫yPX,Y(x,y) dy\int_{y} P_{X,Y}(x,y)\, dy
  3. 边缘密度积分结果是只关于 x 的一维函数 P_X(x),即直径的边缘分布。
    PX(x)P_X(x)

联合分布度量:大小与重量的“搭配”也要像

只看直径可能被骗:小李也许把直径仿得很像,但包子又大又轻、空心塌陷。于是评审要看第二个维度——直径和重量的搭配关系是否一致。这就是联合分布:多个特征同时取值的概率规律。

机械地比较联合分布不容易(二维以上样本越来越稀疏),实践中常用“相关性”作为抓手。皮尔逊相关系数衡量直径和重量呈同向变化的强度:老王的包子明显“越大越重”,小李的若是“大小和重量各管各”,相关性就露馅。

除了相关系数,还可以对比条件分布,例如“重量超过 100 克的包子,直径分布是否一致”。小李要学的不仅是“长得像”,还有“内在搭配像”——这正是联合分布度量的价值所在。

ρXY=Cov⁡(X,Y)σX σY\displaystyle \rho_{XY} = \frac{\operatorname{Cov}(X,Y)}{\sigma_X \, \sigma_Y}
取值范围在 -1 到 1 之间:接近 1 表示正相关强,接近 0 表示几乎无关。真实和合成的相关系数差得越远,联合分布就越不保真。
  1. 协方差Cov(X,Y) 描述两个特征一起偏离各自均值的倾向,正数表示同向变动。
    Cov⁡(X,Y)=E[(X−μX)(Y−μY)]\operatorname{Cov}(X,Y) = \mathbb{E}[(X-\mu_X)(Y-\mu_Y)]
  2. 标准差之积σ_X 与 σ_Y 的乘积是各自波动幅度的缩放,用来把协方差“无量纲化”。
    σX σY\sigma_X \, \sigma_Y
  3. 相除归一得到相关系数 ρ,相当于“标准化的协方差”,与量纲无关,可直接跨数据集对比。
    ρXY=Cov⁡(X,Y)σX σY\rho_{XY} = \frac{\operatorname{Cov}(X,Y)}{\sigma_X \, \sigma_Y}

KS检验:量出两条曲线的“最大落差”

现在评审要给出明确结论。KS 检验(Kolmogorov–Smirnov test)是两样本连续分布对比的经典方法。思路很朴素:先各自画出“经验分布函数”——横轴是直径,纵轴是“直径不超过该值的包子占比”,得到一条阶梯上升的曲线;然后量两条曲线之间最大的垂直落差 D。

这个最大落差 D 就是 KS 统计量。如果两批包子真是同一锅出的,两条曲线应该像双胞胎一样贴近,D 很小;如果小李的包子明显偏大,曲线就会整体右移,在某处拉开一道大口子。把 D 换算成 p 值——在“两分布相同”的假设下,出现这么大落差的概率。p 值小于 0.05 是常用的入行门槛:评审觉得“这不像巧合,两批包子确实不一样”。

可视化演示里红色双箭头标出的就是这个 D。KS 检验适合连续特征(直径、重量),一次只比一个特征;对比整个分布形状而不只是均值方差,是它最宝贵的特性。

D=sup⁡x∣Freal(x)−Fsynth(x)∣\displaystyle D = \sup_{x} \left| F_{\text{real}}(x) - F_{\text{synth}}(x) \right|
通俗说:把两条“小于某直径的包子占比”曲线叠在一起,找它们上下相差最大的那个垂直距离,就是 D。D 越大,分布差异越大。
  1. 经验分布函数F_real(x) 表示真实包子里直径不超过 x 的比例,样本越多,它越接近真实分布的累积函数。
    Freal(x)=1n∑i=1n1{Xi≤x}F_{\text{real}}(x) = \frac{1}{n} \sum_{i=1}^{n} \mathbf{1}\{X_i \le x\}
  2. 垂直落差固定 x,两曲线纵坐标之差的绝对值,描述“这个直径档位上两批包子差多少”。
    ∣Freal(x)−Fsynth(x)∣\left| F_{\text{real}}(x) - F_{\text{synth}}(x) \right|
  3. 上确界sup 表示在所有 x 里取最大的落差,等价于“两条曲线之间最宽的那条缝”。
    sup⁡x∣Freal(x)−Fsynth(x)∣\sup_{x} \left| F_{\text{real}}(x) - F_{\text{synth}}(x) \right|

卡方检验:分档数数再对比

包子直径不止能画连续曲线,也可以“分档”:小号(小于 6cm)、中号(6–8cm)、大号(大于 8cm)。分档后,每批包子各档个数就是频数。此时可以用卡方检验(chi-square test)比较“各档数量结构”是否一致。

做法:先按真实包子的各档占比,折算成“同样总数下,合成包子各档应有的期望个数 E_i”;再数合成包子各档实际个数 O_i。如果 O_i 和 E_i 处处接近,说明分档结构和真实数据一致;如果某个档位差得离谱,偏差会被放大进统计量。最后根据自由度 k-1 查卡方分布得到 p 值。

小李要保证从小号到大号各档占比都跟老王接近,不能“平均像但结构不一样”。卡方检验正是抓这种“结构性走样”的利器。

χ2=∑i=1k(Oi−Ei)2Ei\displaystyle \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}
卡方统计量把每一档“实际数与期望数的偏差”平方后除以期望数再求和。适合离散特征(如包子馅料口味、大小档位),也适合把连续数据离散化后的场景。
  1. 分档与频数把直径等属性切成 k 档,O_i 是合成包子落在第 i 档的实际个数。
    Oi,i=1,…,kO_i,\quad i=1,\dots,k
  2. 期望频数E_i 是按真实数据第 i 档占比乘以合成数据总数得到的“如果完全像,应该有多少个”。
    Ei=nsynth×p^i(real)E_i = n_{\text{synth}} \times \hat{p}_i^{(\text{real})}
  3. 偏差归一每档偏差平方后除以 E_i,放大小档位的相对偏差,避免大档位天然数大就主导结果。
    (Oi−Ei)2Ei\frac{(O_i - E_i)^2}{E_i}
  4. 全档求和把所有档的贡献加起来,得到卡方统计量,再结合自由度 k-1 查表得 p 值。
    χ2=∑i=1k(Oi−Ei)2Ei\chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}

多维特征对比:十几项属性整体打包

包子的属性远不止两个:直径、重量、褶数、馅料比例、卖相评分……特征一多,逐个比较既不高效,还会漏掉跨特征的组合关系。这一节的思路是“整体打包对比”。

实践中有两类做法。一是比较协方差矩阵:真实数据的协方差矩阵编码了所有特征两两之间的联动关系,合成数据的矩阵应与之接近。二是用 MMD(最大均值差异,Maximum Mean Discrepancy):把两批数据都映射到一个高维特征空间,分别求“重心”(均值嵌入),再量两个重心之间的距离。距离为零,说明两批数据在统计上无法区分。

协方差矩阵对比适合特征较少的情况,MMD 适合特征多且关系复杂的场景。两者都是小李“出师考核”的高阶科目——单项过关不算数,整体气质要一致。

MMD2=∥1m∑i=1mϕ(xi)−1n∑j=1nϕ(yj)∥2\displaystyle \text{MMD}^2 = \left\| \frac{1}{m}\sum_{i=1}^{m} \phi(x_i) - \frac{1}{n}\sum_{j=1}^{n} \phi(y_j) \right\|^2
可以把它想成:把每个包子的十几个属性“翻译”成一个高维坐标,然后问“两批包子的平均坐标差多远”。差得越近越保真。
  1. 特征映射φ(x) 把单个包子的原始特征映射到高维空间,让原本复杂的非线性差异可以被线性比较。
    ϕ(xi)\phi(x_i)
  2. 均值嵌入对真实和合成各求平均坐标,得到两个“重心”,代表各自分布的典型位置。
    1m∑i=1mϕ(xi),1n∑j=1nϕ(yj)\frac{1}{m}\sum_{i=1}^{m} \phi(x_i),\quad \frac{1}{n}\sum_{j=1}^{n} \phi(y_j)
  3. 距离平方两个重心之差的范数平方——重心靠得越近,两批数据的高维统计特征越一致。
    MMD2=∥⋅∥2\text{MMD}^2 = \left\| \cdot \right\|^2

高维降维可视化:把几十维“拍扁”到一张图上

特征再多,人眼也只能看二维或三维。高维保真度验证的常用辅助手段是降维可视化:把每个包子从高维坐标投影到二维平面上,让“真实点”和“合成点”在图上重叠展示。重叠得好,直观说明整体分布接近;重叠得差,哪里偏了也一目了然。

PCA(主成分分析)是其中最经典的线性方法:找到数据方差最大的几个方向,把点投影上去。它对应一个特征分解问题——数据的协方差矩阵 Σ 分解为方向矩阵 W 和方差缩放 Λ。t-SNE 则是非线性方法,更擅长展示局部邻域结构,但它会人为拉开或聚拢点,距离不完全保真,只能作为参考,不能替代定量检验。

降维图是“示意图”而不是“判决书”。评审以 KS、卡方、MMD 的数值为准,PCA 与 t-SNE 负责帮忙讲故事——直观汇报给老板看,但最终拍板靠数字。

ΣW=WΛ\displaystyle \Sigma W = W \Lambda
说人话:协方差矩阵“浓缩”了所有属性两两联动的信息,把它分解成“主方向”和“方向上的方差”,取前两个主方向就得到二维投影坐标。
  1. 协方差矩阵Σ 是全部特征两两协方差组成的矩阵,q 个特征就是 q×q 的方阵。
    Σ∈Rq×q\Sigma \in \mathbb{R}^{q \times q}
  2. 特征分解把 Σ 分解成 W 和 Λ,其中 W 的每一列是一个主方向(特征向量)。
    ΣW=WΛ\Sigma W = W \Lambda
  3. 主方向与方差Λ 对角线上是各主方向的方差(特征值),数值越大说明该方向数据散布越开;选最大两个方向即可投影到二维。
    Λ=diag⁡(λ1,λ2,…,λq)\Lambda = \operatorname{diag}(\lambda_1, \lambda_2, \dots, \lambda_q)

方法选型实战:什么时候用哪把尺子

评审工具箱已经齐了,最后是组合出题。实际工作中选型遵循简单原则:连续特征用 KS 检验逐维筛查;离散或分档数据用卡方检验;低维联合关系用相关系数与协方差矩阵对比;高维整体用 MMD;超高维先 PCA/t-SNE 可视化探路。没有一把尺子能一次覆盖全部,通常要组合出击。

阈值设定是工程中容易踩坑的地方。先约定显著性水平 α(常见 0.05),再决定“失败标准”:是任一特征 KS 的 p 值小于 0.05 就判不通过,还是要求所有指标同时超阈值。建议把 p 值、D 值、MMD、相关差异等归一化后合成一个综合保真度分数,作为版本迭代的追踪指标:生成模型每调一版,分数上升说明更保真。

小李最终出师要过“组合考核”:KS 查单维、卡方查结构、MMD 查多维、降维图给老板汇报,最后综合分数写进质检报告。这套流程,就是合成数据发布前的统计保真度验收标准。

S=∑i=1mwi mi,∑i=1mwi=1\displaystyle S = \sum_{i=1}^{m} w_i\, m_i, \qquad \sum_{i=1}^{m} w_i = 1
综合保真度分数 = 各检验指标(KS 的 D、卡方的 χ²、MMD、相关差异等)归一化后的加权和。权重由业务优先级决定。
  1. 指标项m_i 是第 i 个归一化后的保真度指标(0 最差、1 最好)。
    mi∈[0,1]m_i \in [0,1]
  2. 权重归一w_i 是各指标的重要程度,由数据敏感性和业务目标决定,所有权重加起来等于 1。
    ∑i=1mwi=1\sum_{i=1}^{m} w_i = 1
  3. 加权求和总分 S 越接近 1,表示整体统计保真度越高;每轮模型迭代后重算并记录趋势。
    S=∑i=1mwi miS = \sum_{i=1}^{m} w_i\, m_i

AI 应用场景

场景 1:差分隐私合成数据的发布前质检

阶段:数据生成与验证(合成数据管线的质量门禁)

解决的问题:传统做法只看均值方差,或人工抽查,既慢又漏;用 KS + 卡方 + MMD 自动比对真实与合成分布,把“像不像”变成一份可审计的质检报告。

具体案例:某政务数据开放平台要发布脱敏的市民出行数据。算法工程师用差分隐私生成模型合成 10 万条记录,再用本文流程逐特征跑 KS 检验、对离散字段跑卡方检验、整体算 MMD,全部指标通过后才准发布。

场景 2:金融反欺诈模型训练的少数类增强

阶段:训练数据增强

解决的问题:欺诈样本太少,模型学不到规律;直接复制又过拟合。用合成数据扩充少数类,但必须先验证合成样本的分布与真实欺诈样本一致,否则模型学到的是“假规律”。

具体案例:风控团队用生成模型合成欺诈交易记录,上线前把真实欺诈样本和合成样本放在一起跑 KS 检验和协方差对比,发现“交易金额”特征的 p 值显著,于是调整生成模型重新训练,直到所有指标通过。

场景 3:医疗电子病历的科研共享

阶段:隐私保护数据发布

解决的问题:病历数据涉及隐私,不能直接给科研机构;差分隐私合成病历既要脱敏,又要保证统计规律(年龄分布、诊断共病关系等)不失真。

具体案例:某医院生成合成病历数据集用于多中心研究。研究团队用边缘分布直方图对比、卡方检验检查诊断类别频数、t-SNE 可视化观察整体重叠,出具统计保真度报告后开放下载。

Python 演示

python34 行
import numpy as npfrom scipy import stats  def fidelity_report(real, synth, feat_names, bins=10):    """统计保真度评估:逐特征KS + 卡方 + 相关性对比"""    report = {}    for i, name in enumerate(feat_names):        ks_stat, ks_p = stats.ks_2samp(real[:, i], synth[:, i])        report['KS_' + name] = (round(ks_stat, 4), round(ks_p, 4))     shared = np.histogram_bin_edges(        np.concatenate([real[:, 0], synth[:, 0]]), bins=bins)    real_hist, _ = np.histogram(real[:, 0], bins=shared)    synth_hist, _ = np.histogram(synth[:, 0], bins=shared)    scale = real_hist.sum() / synth_hist.sum()    chi2_stat, chi2_p = stats.chisquare(synth_hist * scale, f_exp=real_hist)    report['chi2_' + feat_names[0]] = (round(chi2_stat, 4), round(chi2_p, 4))     real_corr = np.corrcoef(real[:, 0], real[:, 1])[0, 1]    synth_corr = np.corrcoef(synth[:, 0], synth[:, 1])[0, 1]    report['corr_diff'] = round(abs(real_corr - synth_corr), 4)    return report  if __name__ == '__main__':    rng = np.random.default_rng(42)    n = 2000    real = np.column_stack([rng.normal(50, 10, n),                            rng.normal(6000, 1500, n)])    synth = np.column_stack([rng.normal(52, 11, n),                             rng.normal(5800, 1600, n)])    for key, val in fidelity_report(real, synth, ['age', 'income']).items():        print(key, val)
目的:用一组真实数据和一组注入偏差的合成数据,演示 KS 检验、卡方检验、相关性对比三种保真度指标的完整计算流程。
  1. ks_stat, ks_p = stats.ks_2samp(real[:, i], synth[:, i])对每个特征做两样本 KS 检验,返回统计量 D 和 p 值。
  2. shared = np.histogram_bin_edges(...)用两组数据共同划定统一的分箱边界,保证频数可比。
  3. synth_hist, _ = np.histogram(synth[:, 0], bins=shared)统计合成数据在各箱的观察频数 O_i。
  4. chi2_stat, chi2_p = stats.chisquare(synth_hist * scale, f_exp=real_hist)卡方检验比较实际频数与期望频数。
  5. real_corr = np.corrcoef(real[:, 0], real[:, 1])[0, 1]计算真实数据两个特征的相关系数。
  6. report['corr_diff'] = round(abs(real_corr - synth_corr), 4)记录相关系数差异,作为联合分布保真度指标。
  7. rng = np.random.default_rng(42)固定随机种子,让结果可复现。

常见误区

误区跑完 KS 检验,看到 p 值 0.32,心里一块石头落地:“通过了,两批数据完全相同!”

正解p 值只是“反证法”的证据强度——p 大说明没有足够证据拒绝“两分布相同”的假设,但不等于证明了两分布相同。就像评审只尝了三个包子没吃出差别,不能说明两锅包子一模一样。样本量小时,即使差异明显,p 值也可能偏大。应结合 D 值等效应量和样本量一起判断。

为何常见:“不显著就等于相等”是假设检验最常见的直觉误区,把“无法证伪”误当成了“证实”。

误区算一下真实数据和合成数据的均值、方差,发现差不多,就直接宣布“保真度合格”。

正解经典的“Anscombe 四重奏”用四组均值、方差、相关几乎完全一样的数据,画出来却是四种完全不同的散点形状。合成数据完全可能均值方差都对,但分布是双峰的、或者特征间的相关方向反了。必须对比分布形状和联合结构,而不能只停留在均值方差。

为何常见:均值方差是描述性统计最先学到的指标,最容易想到,也最容易上手,于是被当成“够了”的标准。

误区拿到合成数据,不管特征是连续的还是离散的,全部丢给 ks_2samp,结果发现离散特征的 p 值忽大忽小,不知道怎么解读。

正解KS 检验的前提是两样本来自连续分布,对离散特征或大量相同取值(结)会很敏感、容易失真;此时卡方检验更合适。此外,KS 是逐特征独立检验,会漏掉跨特征的联合差异,需要配合 MMD 或协方差对比使用。

为何常见:scipy 一行 API 太方便,让人忽略了检验方法的前提假设和适用边界。

误区t-SNE 图画出来两团点几乎完全重叠,于是结论写成“统计保真度验证通过”。

正解t-SNE 优先保留局部邻域关系,全局距离会被拉伸或压缩,可能把真实差异“藏”起来;PCA 只保留线性方差最大的方向,非线性差异会被丢弃。可视化只能提供线索和汇报素材,最终必须回到 KS、卡方、MMD 等定量检验下结论。

为何常见:人眼对图形有天然的信任感,可视化直观、有说服力,容易让人忽略它的失真本质。

误区合成数据的目标就是保真度满分,最好连真实数据里某个人的身高体重组合都能还原出来。

正解差分隐私合成数据有两大目标——保真度与隐私,二者互相牵制。保真度越高,模型越可能“记住”原始记录,隐私泄露风险越大;反过来,隐私预算越小,保真度必然下降。评估保真度是配合差分隐私机制做的“平衡”动作,目标是“统计像”,而不是“逐条像”。

为何常见:把“生成质量”简单理解为“还原度”,忽略了合成数据存在的隐私保护初衷。

面试题

Q1. 关于 KS 检验的原假设(零假设),下列说法正确的是?

单选题 · easy

  • A.两组样本来自同一分布← 正确答案
  • B.两组样本的均值相等
  • C.两组样本的方差相等
  • D.两组样本相互独立

答案:A。KS 检验的原假设是“两样本来自同一连续分布”。均值(B)、方差(C)相等只是分布相同的必要而非充分条件;独立性(D)是完全不同的命题。就像评审先假设“两锅包子同一锅出的”,再去找反证。

Q2. 统计保真度的核心目标是?

单选题 · easy

  • A.合成数据包含所有真实数据点
  • B.合成数据的方差尽可能地大
  • C.合成分布贴近真实数据的统计分布← 正确答案
  • D.合成数据均值与真实数据完全一致

答案:C。统计保真度追求“分布贴近”而非“逐点还原”。逐条包含(A)是记忆而非生成,方差尽量大(B)会失真,均值一致(D)只是分布相等的一个方面。就像小李的目标是“整笼气质像老王”,而不是背下每一个包子。

Q3. KS 统计量 D 衡量的是什么?

单选题 · easy

  • A.两个直方图的面积之差
  • B.两经验分布函数的最大垂直距离← 正确答案
  • C.两组样本均值差除以标准差
  • D.两组样本相关系数之差

答案:B。KS 统计量定义为两个经验分布函数的最大垂直距离,B 正确。直方图面积差(A)是错误想象,均值差标准化(C)是 t 检验思路,相关系数差(D)衡量的是联动关系而非分布差距。

Q4. 卡方检验适合用于哪些场景?

多选题 · mid

  • A.分箱后频数数据的对比← 正确答案
  • B.类别属性频数的对比← 正确答案
  • C.未分箱连续数据的对比
  • D.大样本连续分布精确对比

答案:AB。卡方检验以分箱或类别频数为输入,A、B 正确。未分箱的连续数据(C、D)应首选 KS 检验;若要强行分箱,也可以间接用卡方,但直接把原始连续值作为频数输入不符合卡方检验的设定。

Q5. 关于边缘分布与联合分布的关系,正确的是?

单选题 · mid

  • A.边缘分布由联合分布对其他变量积分得到← 正确答案
  • B.边缘分布在任何情况下都等同于联合分布
  • C.联合分布总是两个边缘分布的乘积
  • D.两者之间没有任何数学上的联系

答案:A。边缘分布由联合分布对无关变量做积分(离散则求和)得到,A 正确。B 混淆了两者的定义差别;C 只对独立变量成立;D 完全错误。就像只看包子直径,就要把重量维度全部累加撇掉,只留下直径的规律。

Q6. 若真实数据与合成数据确实来自同一分布,KS 检验得到的 p 值通常会?

单选题 · mid

  • A.恰好为 0,且检验结果显著
  • B.通常较大,不足以拒绝两分布相同← 正确答案
  • C.恰好为 1,且两分布完全重叠
  • D.通常小于显著性水平 0.05

答案:B。原假设成立时,p 值在 0 到 1 之间近似均匀分布,小于 0.05 的概率只有 5%,所以通常较大,B 正确。恰好为 0(A)或恰好为 1(C)只在极端理论情况出现,D 与显著性水平的定义正好相反。

Q7. 哪项指标最适合整体比较两批多维数据的分布差异?

单选题 · hard

  • A.单特征的 KS 检验统计量
  • B.卡方检验的统计量
  • C.MMD 最大均值差异指标← 正确答案
  • D.单个特征的均值与方差

答案:C。MMD 把两批数据映射到高维空间比较重心距离,适合多维整体对比,C 正确。单特征 KS(A)和均值方差(D)只能逐维看,卡方(B)适用于分箱频数而非连续多维整体。就像十几项属性的包子要整体打包比,不能只看单项。

Q8. 关于 t-SNE 在保真度可视化中的作用,说法正确的是?

单选题 · hard

  • A.t-SNE 距离完全保真,可替代定量检验
  • B.t-SNE 展示局部结构清晰,但全局距离失真← 正确答案
  • C.t-SNE 与 PCA 的原理完全等价
  • D.t-SNE 适合大样本精确度量分布差异

答案:B。t-SNE 擅长保留局部邻域结构,但全局距离会被拉伸或压缩,B 正确。A 说“完全保真”不对,它不能替代 KS、MMD 等定量检验;C 混淆了线性与非线性方法;D 中 t-SNE 计算量大且不适合精确度量。

Q9. 关于 p 值的理解,下列正确的有?

多选题 · mid

  • A.p 值大不能证明两分布完全一致← 正确答案
  • B.p 值小于 0.05 常被视为差异显著← 正确答案
  • C.p 值等于两分布的重叠面积
  • D.p 值大小会受样本量的影响← 正确答案

答案:ABD。p 值只是“反证法”的证据强度:大 p 说明没有足够证据拒绝原假设(A),不能证明完全一致;p 小于 0.05 是常用显著阈值(B);p 与重叠面积无关(C 错);样本量越大,即使差异很小 p 也可能显著(D 对)。

Q10. 实战中评估合成数据保真度,合理的做法有?

多选题 · hard

  • A.结合边缘分布与联合分布一起检验← 正确答案
  • B.高维时用降维可视化辅助观察← 正确答案
  • C.仅凭均值方差相等就判定通过
  • D.结合差分隐私预算权衡保真度← 正确答案

答案:ABD。保真度验证要立体化,同时查边缘与联合分布(A)、用降维可视化辅助(B)是标准做法;只看均值方差(C)是最常见的偷懒误区;D 提醒我们保真与隐私互斥,不能只追保真而牺牲差分隐私保护。