假设你是一家老字号饭店的店主,后厨有位徒弟要复刻招牌菜。他能不能把做出来的菜端上客人的餐桌?你绝不会只凭鼻子闻一下就做决定——你会请品鉴团把关:先看单道菜的色香味,再尝整桌菜的味道搭配,接着端给不知情的客人试吃,然后用显微镜对比真菜和仿制菜的细节纹路,最后还要确认这道菜有没有偷偷泄露祖传秘方。 表格合成数据的世界里,这份品鉴流程真实存在。所谓合成数据,就是让算法照着真实表格“学做菜”——从年龄、收入、城市这些列里学出统计规律,再生成一张新表。问题是,合成表能不能用于接下来的数据分析、模型训练甚至对外发布?这就要靠一套评估指标来回答。本篇文章会把每一道“品鉴工序”拆开:列分布相似度看单品、列间相关性看搭配、TSTR看试吃效果、距离比指标看细节、隐私攻击看秘方,最后给出综合评分方案。看懂这些,你就能像老店主一样,在合成数据上桌前做出明智判断。
掌握这套评估体系,你才能在合成数据项目里做出“可用还是不可用”的硬判断,避免把劣质数据送进模型或对外发布。
可视化演示
展示合成表格数据质量评估三维度:列分布相似度KS检验、TSTR机器学习效用评估与多指标综合评分体系。
本节配有交互动效(进入视口后自动加载,约 3KB)。
列分布相似度KS检验 原始数据与合成数据的边缘分布对比 KS统计量衡量累积分布函数最大差异 KS = max|F_real(x) - F_synth(x)| p值越大分布越相似
一、为何要评估
一家老字号饭店有一座祖传菜谱库,徒弟照着学做仿制菜。客人点单之前,主厨必须先请品鉴团把关:这盘仿制菜端出去会不会砸招牌?如果只看一眼就上桌,轻则口味不对,重则惹出食品安全问题。表格合成数据也是一样——生成器输出的新表格看起来整整齐齐,但喂给下游模型前,必须回答三个问题:它像不像真实数据?它能不能承担实际任务?它有没有泄露原始记录?
这三个问题对应三大质量维度:保真度、机器学习效用和隐私保护。保真度考察单列分布和列间结构是否接近;机器学习效用考察“在合成数据上训练出的模型,拿到真实数据上是否还能打”;隐私保护则考察攻击者能不能从合成数据中反推出真实样本。一套完整的评估框架,就是围绕这三个维度组合出若干可计算的指标。
从统计视角看,评估的核心目标可以用一句话概括:让合成数据的生成分布尽可能逼近真实数据的分布。设真实数据表为 \( T \),合成数据表为 \( S \),我们希望对于任意一列特征 \( X \):
定完标准,品鉴团就要按工序入场了。第一道工序,是看每一道菜的单独卖相。
- 真实分布 \( P_T(X) \)真实表格里某一列变量 \( X \) 服从的概率规律,比如“年龄列偏年轻”“收入列右偏”。这是仿制菜的“原始味道”。
- 合成分布 \( P_S(X) \)合成表格里同一列变量 \( X \) 表现出的概率规律。它由生成模型学出来,不一定和真实分布完全相同。
- 约等于 \( \approx \)评估目标不是一字不差地复制真实数据,而是在统计上“看不出明显区别”,同时还要保留隐私。
二、列分布相似度
品鉴团第一位评委只负责“单道菜的色香味”。他端详红烧肉是不是那个色泽,糖醋鱼是不是那个酸甜口。他不关心鱼和肉之间的搭配,只看每一道菜本身过不过关。表格数据也一样,最先检查的是每一列的取值分布是否接近真实表。
这一环节在专业术语里叫“列分布相似度”。一张表通常有几十列:年龄、收入、城市、会员等级……每一列都有自己的取值规律。合成器如果连单列分布都学不像,后面的结构分析就无从谈起。
衡量单列分布最经典的工具是 KS 检验(Kolmogorov-Smirnov 检验)。它的思路很直观:把真实列和合成列各自的经验累积分布画出来,找这两条曲线在哪个位置差得最远。具体公式为:
单道菜卖相过关只是入场券。接下来,第二位评委要动筷子了。
- 经验分布函数 \( \hat{F} \)把一列数据从小到大排好,在位置 \( x \) 处函数值就是“该列中小于等于 \( x \) 的样本占比”。它是一条不断爬升的阶梯曲线。
- 取差值绝对值 \( |\cdot| \)对同一个 \( x \),分别算真实列和合成列的累积占比,两者相减再取绝对值,表示这个位置上的累计偏差。
- 上确界 \( \sup_x \)遍历所有可能的 \( x \),找出最大的那个偏差。它回答“两条曲线最明显分道扬镳的地方差了多少”。
- 判断标准\( D_{KS} \) 越小说明两列分布越接近;实践中常要求小于 0.05 或 0.1。连续列还常用沃瑟斯坦距离做补充,它对整体形状的平移更敏感;类别列则看每个类别的覆盖率。
三、列间相关性
第二位评委开始尝搭配:红烧肉配米饭是绝配,糖醋鱼配红酒就串味。单道菜再完美,整桌菜搭配乱了也是失败。表格数据的“搭配”就是列间相关性——年龄和收入是否协同变化,城市和消费水平是否互相影响。这些关联模式决定了一张表在数据分析中的“骨架”。
如果合成器把单列学得很好,却把列与列之间的相关性打散了,那相当于每道菜单独吃不错,但整桌菜东拼西凑。下游模型学习的是特征之间的联合关系,相关性一旦失真,模型照样学歪。
衡量列间相关性的常规做法是:先计算真实表的相关系数矩阵 \( \mathbf{C}_T \),再计算合成表的相关系数矩阵 \( \mathbf{C}_S \),最后用 F 范数量化两个矩阵的整体差异:
搭配协调了,仿制菜算是在“神”上继承了几分。但评委说了不算,顾客说了才算。
\displaystyle \rho_{ij} = \frac{\mathrm{Cov}(X_i, X_j)}{\sigma_i \sigma_j}, \qquadd = \left\| \mathbf{C}_T - \mathbf{C}_S \right\|_F- 协方差 \( \mathrm{Cov}(X_i, X_j) \)它衡量两列变量是否一起波动。同涨同落为正,反向波动为负。这是“两盘菜味道是否互相成就”的量化。
- 标准差 \( \sigma_i \sigma_j \)两个标准差放在分母上,把协方差归一化到 \([-1, 1]\),消除量纲影响,得到相关系数 \( \rho_{ij} \)。
- 相关矩阵 \( \mathbf{C} \)把所有两两之间的相关系数排成矩阵。主对角线全是 1,其余位置表示对应两列的关系强度。
- F 范数 \( \|\cdot\|_F \)把真实矩阵和合成矩阵逐元素相减,将所有差的平方求和后开方。\( d \) 越小,说明“整桌搭配”越接近真菜的协调度。
四、TSTR效用
前两位评委是内行,但真正的考验是把仿制菜端上当天餐桌,让不知情的客人试吃。客人不会分析色泽和搭配理论,他们只关心好不好吃、愿不愿买单。合成数据也一样:数据集的最终价值体现在它能训练出好模型。
这就是 TSTR(Train on Synthetic, Test on Real)的核心思想:只在合成数据上训练模型,然后拿到真实数据上做测试。如果模型在合成数据上学到的规律能迁移到真实场景,说明合成数据的“可用性”过关;如果表现崩盘,说明合成数据只是“看起来像”,本质上没用。
实际评估时会先做一个 TTR(Train on Real, Test on Real)作为性能上限,再用 TSTR 与它比较:
客人试吃通过后,评委还没收工。他们拿出放大镜,准备看细节。
- 基准 TTR在真实数据上训练一个模型,再在留出的真实测试集上评估,得到性能上限 \( \mathrm{AUC}_{TTR} \)。这是“原版菜的满客率”。
- 实验 TSTR在合成数据上训练同样的模型,用同一个真实测试集评估,得到 \( \mathrm{AUC}_{TSTR} \)。这是“仿制菜端上桌后的满客率”。
- 归一化比值两个 AUC 相除得到效用分。比值越接近 1,说明仿制菜“以假乱真”的能力越强。
- 判断口径一般要求比值不低于 0.8;低于 0.7 就要谨慎,可能需要重新调生成器的参数或增加训练数据。
五、距离比指标
评委的第四道工序是拿显微镜对比真菜和仿制菜:肉丝粗细、汤汁浓稠度、配菜切法。肉眼察觉不到的差异,在显微镜下无处遁形。表格数据的“显微镜”就是距离比指标——把每个样本看成特征空间里的一个点,量一量合成点和真实点之间的距离。
最基础的距离指标叫 DCR(Distance to Closest Record),即合成样本到最近真实样本的平均距离。如果这个距离特别小,说明合成样本几乎是真实样本的“复刻版”;如果特别大,说明合成样本飘在真实分布之外,像一道完全跑偏的菜。更精细的指标是 NNDR(Nearest Neighbor Distance Ratio),它比较合成点到最近真实点与第二近真实点的距离:
细节看完,最后一道工序最敏感——查秘方。
- 最近邻距离 \( d_1 \)在真实数据集里找到离合成样本 \( x \) 最近的那个点,量出距离。它代表“最像的一个原版样本离我有多远”。
- 次近邻距离 \( d_2 \)找到第二近的真实点,量出距离。它提供一个参照系。
- 取比值 \( d_1 / d_2 \)NNDR 接近 1 时,说明 \( x \) 与两个真实点几乎等距,很像两个真实点中间插值出来的“仿制品”,既可能质量不高,也可能有隐私翻版风险;NNDR 接近 0 时,说明附近只有一个孤立的真实点。
- 整体判断把全部合成点的 NNDR 分布画出来,再结合 DCR 的平均水平,就能判断合成数据整体是“紧紧贴着原型”还是“松散地铺在周围”。
六、隐私泄露评估
最关键的评审环节,是确认仿制菜不会泄露祖传秘方。如果客人吃一口就能说出“这跟我上周在贵宾厅吃的某位名人的定制菜一模一样”,那饭店的信任就崩塌了。合成数据同样面临这个问题:攻击者拿到一张合成表,能不能判断出某个真实样本是否被用于训练?
这种攻击叫成员推断攻击。攻击者把合成样本和候选真实样本做最近邻匹配:如果某个合成样本离某个真实样本特别近,几乎就是原样复制,那基本可以断定这个真实样本是训练集成员。隐私泄露的量化指标是攻击优势:
秘方安全审核通过后,品鉴团开始合议打分。
- 真正例率 \( \mathrm{TPR} \)攻击者宣称“这个真实样本是训练成员”,实际它确实是成员的比例。衡量攻击者“猜中了多少真正的成员”。
- 假正例率 \( \mathrm{FPR} \)攻击者宣称“是成员”,但实际该样本不在训练集中的比例。衡量攻击者“冤枉了多少非成员”。
- 两者相减 \( \mathrm{Adv} \)TPR 减去 FPR 得到超出猜测的优势。\( \mathrm{Adv}=0 \) 表示攻击完全无效,和抛硬币一样;接近 1 表示攻击几乎百发百中。
- 风险分级一般 \( \mathrm{Adv} < 0.1 \) 视为低风险,\( \mathrm{Adv} > 0.3 \) 就需要调整合成策略,比如加大差分隐私噪声或降低对真实样本的拟合程度。
七、综合评分方案
五道工序各有各的打分表,主厨最后要把卖相、搭配、试吃、显微、秘方五个分数合成一个总分。这不能简单相加——有的指标是越小越好,有的是越接近 1 越好,直接平均等于把“辣度、甜度、咸度”加在一起,毫无意义。必须先归一化,再按餐厅定位加权。
综合评分的第一步是把每个指标统一成“越大越好”的 0 到 100 分。比如 KS 距离越小得分越高,TSTR 比值越接近 1 得分越高,攻击优势越小得分越高。第二步是按业务场景分配权重:
合议结束,品鉴团给出结论:这版仿制菜可以上菜单,但要标注“复刻版”,并定期复检各项指标。你的合成数据,也应当这样被严谨对待。
- 归一化得分 \( q_i \)每个原始指标都要做方向统一和量纲转换,转成 0 到 100 分。这样“KS 距离”和“攻击优势”才能放在同一张打分表上比较。
- 权重 \( w_i \)衡量每个维度在业务里的相对重要性。所有权重之和为 1,保证综合分仍在 0 到 100 之间。
- 加权求和 \( Q \)各维度得分乘权重后累加,得到可排序、可设阈值的总评分。但总分高不代表没有短板,建议同时画雷达图或分项条形图,避免“偏科”被平均分掩盖。
AI 应用场景
金融风控:扩充欺诈样本前的质量把关
阶段:数据准备与增强
解决的问题:欺诈交易样本极少,直接训练风控模型容易漏检。生成合成欺诈样本可以扩充训练集,但如果合成数据质量不过关,模型学到的规律会失真。传统做法只凭人眼看分布,无法系统判断“合成数据教出来的模型在真实数据上是否可信”。
具体案例:某互金公司风控团队用生成器扩充出 1 万条欺诈样本,先做 TSTR 评测:在真实测试集上 AUC 比值达到 0.86,列相关性矩阵差异 0.12,通过阈值后才混入训练集,最终欺诈召回率提升 10%。综合评分方案帮团队在“效用”和“隐私”两个目标之间找到了平衡点。
医疗数据共享:对外发布前的隐私合规审查
阶段:数据发布与合规审查
解决的问题:医院想公开病历数据供科研,但直接发布会泄露患者隐私。合成数据可以作为替代,但必须主动检测“翻版样本”——如果合成样本离真实患者过近,相当于变相泄露。这是过去靠脱敏规则无法覆盖的风险。
具体案例:某三甲医院使用合成病历对外发布,发布前用成员推断攻击评估,攻击优势 \( \mathrm{Adv}=0.07 \),NNDR 平均大于 0.8,判定低风险后通过合规审查。后续每季度复检一次,确保新版合成数据没有出现隐私回退。
电商推荐:新用户画像补全后的可用性验证
阶段:特征工程与模型训练
解决的问题:新注册用户行为数据稀疏,可以用合成数据补全缺失的用户画像特征列。但补全后的数据必须保持“品类偏好”与“购买行为”之间的相关性结构,否则推荐模型会学到错误关联。列相关性指标和综合评分正好用来把关。
具体案例:某电商公司在推荐召回模型训练中,用合成数据填充新用户缺失的品类偏好列,列相关性差异 0.12,综合评分 87 分,上线后新用户点击率提升 6%,TSTR 效用比值稳定在 0.83 以上。
Python 演示
import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import roc_auc_scorefrom sklearn.preprocessing import StandardScalerfrom scipy import stats def make_synthetic(X, noise=0.08): # 用有放回抽样加高斯噪声模拟合成数据生成器 n = len(X) idx = np.random.choice(n, n, replace=True) S = X[idx] + np.random.normal(0, noise, X.shape) return S def ks_score(real, synth): # 逐列计算KS统计量, 返回平均值 total = 0.0 for col in range(real.shape[1]): stat, _ = stats.ks_2samp(real[:, col], synth[:, col]) total += stat return total / real.shape[1] def corr_diff(real, synth): # 计算真实表与合成表相关矩阵的F范数差异 cr = np.corrcoef(real.T) cs = np.corrcoef(synth.T) return np.linalg.norm(cr - cs, ord="fro") def tstr_ratio(real, synth, y): # 先计算TTR基线, 再计算TSTR比值 Xtr, Xte, ytr, yte = train_test_split(real, y, test_size=0.3, random_state=42) m1 = LogisticRegression(max_iter=500) m1.fit(Xtr, ytr) auc_ttr = roc_auc_score(yte, m1.predict_proba(Xte)[:, 1]) labels, counts = np.unique(y, return_counts=True) weights = counts / counts.sum() synth_y = np.random.choice(labels, size=len(synth), p=weights) m2 = LogisticRegression(max_iter=500) m2.fit(synth, synth_y) auc_tstr = roc_auc_score(yte, m2.predict_proba(Xte)[:, 1]) return auc_tstr / auc_ttr def main(): X, y = make_classification(n_samples=800, n_features=6, n_classes=2, random_state=0) X = StandardScaler().fit_transform(X) S = make_synthetic(X, noise=0.08) print("KS平均值:", round(ks_score(X, S), 4)) print("相关矩阵差:", round(corr_diff(X, S), 4)) print("TSTR/TTR:", round(tstr_ratio(X, S, y), 4)) if __name__ == "__main__": main()
S = X[idx] + np.random.normal(0, noise, X.shape)有放回抽样解决样本量问题,叠加高斯噪声模拟生成器的“发挥偏移”。stats.ks_2samp(real[:, col], synth[:, col])scipy 提供的双样本 KS 检验,返回两列分布的最大差距。total += stat把每一列的 KS 统计量累加,最后取平均,得到整体单列分布偏差。np.corrcoef(real.T)一行算出真实数据所有列两两之间的相关系数矩阵。np.linalg.norm(cr - cs, ord="fro")用 F 范数衡量两个相关矩阵的整体差异,数值越小说明列间搭配保留得越好。m1.fit(Xtr, ytr)在真实数据上训练逻辑回归,作为“原版菜试吃满意率”的基准。np.random.choice(labels, size=len(synth), p=weights)按真实标签比例给合成样本分配标签,保持类别分布一致。m2.fit(synth, synth_y)在合成数据上训练同一个模型,评估它的迁移能力。auc_tstr / auc_ttr两个 AUC 相除,得到 TSTR 效用比值,越接近 1 越好。if __name__ == "__main__":标准入口,保证脚本可以直接运行或作为模块导入。
常见误区
误区“我跑了一遍 KS 检验,每列 p 值都大于 0.05,说明合成数据跟真实数据没什么区别,可以放心用了!”
正解KS 检验只检查“单道菜的味道”。真实表格里列与列之间还有紧密的搭配关系,比如年龄和收入往往正相关。如果合成器把这种关联打散,单列分布再像,下游模型学出来的依然是错乱的知识。必须同时检查相关矩阵差异、TSTR 和距离比等结构性指标。
为何常见:单列检验最容易实现、结果直观,初学者自然会先看它;同时忽略了“分布很像”不等于“联合分布也很像”这一层。
误区“TSTR 比 TTR 少了 5 个点,这合成数据不能用,打回重做!”
正解5% 的差距要看基线。真实数据本身的模型重复训练误差可能就有 3-4 个点,5% 的差距未必显著。TSTR 更像“客人试吃评价”:只要客人觉得味道能接受(比值 ≥ 0.8),仿制菜就可以上菜单。正确做法是多次重复实验,看比值的均值和方差,再下结论。
为何常见:人习惯用绝对差值做判断,没考虑到模型训练本身的随机波动和任务难度差异。
误区“合成数据都是假的,里面没有真实用户,怎么可能泄露隐私?”
正解合成器是“从真菜学出来的仿制菜”。如果某个合成样本离某个真实样本过近(DCR 很小),相当于直接复刻了真实样本,攻击者可以通过最近邻匹配识别出训练成员。必须主动用成员推断攻击和 NNDR 做检测,不能因为“合成”二字就放松警惕。
为何常见:名字叫“合成”,大家默认它不包含真实记录,忽略了生成过程可能因过拟合而产生“翻版样本”。
误区“把 KS 距离、相关差、TSTR、DCR 算个平均,分数大于 60 就合格。”
正解这些指标量纲不同、方向也不同:KS 是越小越好,TSTR 是越接近 1 越好,攻击优势也是越小越好。直接平均等于把“辣度、甜度、咸度”加在一起求平均,结果毫无意义。必须先归一化到 0-100 分且统一为“越大越好”,再按业务场景加权求和。
为何常见:追求简单,看到“评分”两个字就自然想到平均;而归一化和加权需要额外设计,容易被跳过去。
面试题
Q1. KS 检验最常用于评估合成表格数据的哪方面?
- A.单列分布是否相似← 正确答案
- B.列间是否协同相关
- C.模型预测是否精准
- D.隐私是否足够安全
答案:A。KS 检验比较两条经验累积分布曲线的最大差距,对应“单道菜的色香味是否相似”。列间相关性要看相关矩阵,模型预测精度要看 TSTR,隐私安全要看成员推断攻击优势,因此只有 A 正确。
Q2. TSTR 中的“S”和“R”分别表示什么?
- A.合成上训练,真实上测试← 正确答案
- B.真实上训练,合成上测试
- C.合成上测试,真实上训练
- D.真实上测试,合成上训练
答案:A。TSTR 全称是 Train on Synthetic, Test on Real——在合成数据上训练,在真实数据上测试。这相当于把仿制菜端给真实顾客吃,而不是反过来。B 是 TTRT(真实训练合成测试),方向反了。
Q3. 下列哪项属于衡量列间相关性的指标?
- A.相关系数矩阵差异← 正确答案
- B.最近邻距离比率
- C.攻击者推断优势
- D.模型性能的比值
答案:A。列间相关性考察“整桌搭配是否协调”,对应真实表与合成表的相关系数矩阵差异。最近邻距离比率属于距离比指标,攻击优势属于隐私评估,模型性能比值属于 TSTR 效用。
Q4. DCR 指标主要用来衡量什么风险?
- A.合成样本与真实样本过于接近← 正确答案
- B.合成样本与真实样本完全无关
- C.模型在合成数据上过拟合
- D.模型在真实数据上欠拟合
答案:A。DCR 是 Distance to Closest Record,衡量合成样本到最近真实样本的距离。距离过小说明合成样本几乎是真实样本的“复刻版”,既可能质量失真,也带来隐私翻版风险。B 描述的偏离问题通常由分布外检测发现,与 DCR 的用途不同。
Q5. 综合评分时,第一步应该对每个单项指标做什么?
- A.统一归一化到相同量纲← 正确答案
- B.直接乘以各自权重
- C.保留原始数值大小
- D.随机分配一个分数
答案:A。不同指标的量纲和方向都不同:KS 越小越好,TSTR 越接近 1 越好,攻击优势越小越好。不能直接加权,必须先归一化到 0-100 分并统一方向为“越大越好”。这就像先把辣度、甜度、咸度都换算成一致的评分,再谈加权。
Q6. 若 TSTR/TTR 比值大于 1,最合理的解释是什么?
- A.合成数据带来了额外正则化效果← 正确答案
- B.合成数据完全复刻了真实数据
- C.评估流程中某个环节产生偏差
- D.真实数据模型彻底训练失败
答案:A。TSTR 偶尔超过 TTR,常见原因是合成过程中引入的随机噪声起到了正则化作用,让模型泛化能力略升。这并不代表合成数据更优,B 的“完全复刻”通常导致隐私风险而不是性能提升;若差距过大也要排查评估偏差。
Q7. NNDR 接近 1 说明合成样本具有什么特征?
- A.与两个真实样本几乎等距← 正确答案
- B.距离所有真实样本都非常远
- C.刚好与某个真实样本重合
- D.均匀分布在特征空间中心
答案:A。NNDR = 最近邻距离 / 次近邻距离。接近 1 说明合成样本到最近和第二近真实点的距离差不多,它“夹在”两个真实样本之间,很可能是插值产物,既可能质量不高也存在隐私风险。C 对应 NNDR 接近 0 的情况。
Q8. 下列哪些指标属于“分布相似度”类评估?
- A.KS 检验统计量← 正确答案
- B.沃瑟斯坦距离← 正确答案
- C.攻击优势比值
- D.类别覆盖率← 正确答案
答案:ABD。分布相似度关注“单道菜的色香味是否像”,KS 检验和沃瑟斯坦距离针对连续列,类别覆盖率针对离散列。攻击优势属于隐私泄露评估,不归入分布相似度类。
Q9. 关于合成数据隐私评估,下列说法正确的是?
- A.靠近真实样本的合成点有翻版风险← 正确答案
- B.合成数据总能彻底保护成员隐私
- C.攻击优势接近 0 代表低泄露← 正确答案
- D.隐私与效用完全无法兼顾
答案:AC。合成点离真实样本过近意味着“秘方泄露”,A 正确。攻击优势 TPR-FPR 接近 0 表示攻击者无法从合成数据中识别训练成员,C 正确。合成数据并不是天生安全,能否保护隐私取决于生成方式和参数,B 过于绝对;隐私与效用可以通过差分隐私等手段折中,D 也过于绝对。
Q10. 设计合成数据综合评分方案时,需要考虑哪些原则?
- A.指标方向是否统一为越大越好← 正确答案
- B.权重应结合业务场景分配← 正确答案
- C.必须把效用指标权重设为零
- D.分项雷达图能暴露短板← 正确答案
答案:ABD。综合评分必须先把方向统一为“越大越好”的 0-100 分,再按业务场景分配权重,因此 A、B 正确。总分高不代表没短板,雷达图能暴露偏科情况,D 正确。效用权重设为零等于放弃“能不能用”这个核心问题,违背评估初衷,C 错误。