7.1 结案质检:评估指标体系


7.1 结案质检:评估指标体系

本节摘要:节点级任务用宏平均指标与曲线下面积抗类别失衡,边级任务用命中率与逆排序等排序指标对齐业务目标,图级任务按分类或回归选指标,生成任务看有效性与独特性;协议层面要求多种子重复、分布偏移测试与泄漏检查。本节给出全任务的指标速查表与质检代码。

质检台的第一课:指标选错,全案推翻

质检台的老检验员有个口头禅:先审指标再审结论。同一套预测,报"总体准确率"是九成七,报"少数类召回"可能不到一半——结论完全相反,而两份报告在数学上都"没算错"。图任务的指标坑比表格任务更多:类别失衡是常态(欺诈、疾病、异常检测),排序语义是主流(推荐、补全),结构泄漏是特有风险(第五章与第四章反复强调)。本节是全册的验收环节,把三级任务加生成任务的指标体系整理成速查表,并给出三条协议纪律。它承接第四章各任务场景里散落的指标提示,做一次系统性归档。

节点级指标:抗失衡是第一诉求

节点分类的默认组合是"宏平均精确率、召回率与调和均值+曲线下面积"。宏平均先在各类内算指标再取平均,少数类与多数类同权,天然抗失衡;微平均(等价于总体准确率)在失衡场景会美化模型。曲线下面积不依赖判定阈值,衡量打分的整体排序力,适合"阈值待定"的风控场景。二分类还有一个易错点:正负类定义不同,精确率与召回率的含义完全不同——欺诈检测里"正类=欺诈"时高召回意味着抓得全,换个定义指标语义就翻转,报告里必须写明约定。回归任务用平均绝对误差(量纲可解释)、均方误差(惩罚大偏差)与决定系数(相对基线的改善幅度)三件套,长尾目标建议同时报告分位数误差。

# 节点级指标的完整核算(含失衡场景的对照) import numpy as np from sklearn.metrics import (accuracy_score, f1_score, roc_auc_score, classification_report) rng = np.random.default_rng(9) n = 5000 y_true = rng.choice([0, 1], size=n, p=[0.97, 0.03]) # 极度失衡:正类占百分之三 # 一个"摆烂模型":全部预测负类 y_pred_lazy = np.zeros(n, dtype=int) score = np.where(y_true == 1, rng.uniform(0.45, 0.9, n), rng.uniform(0.05, 0.55, n)) print("摆烂模型 总体准确率:", accuracy_score(y_true, y_pred_lazy)) # 0.97——虚高 print("摆烂模型 宏平均F1:", f1_score(y_true, y_pred_lazy, average="macro")) # 大跌 print("打分模型 AUC:", round(roc_auc_score(y_true, score), 4)) # 阈值无关的排序力 print(classification_report(y_true, (score > 0.5).astype(int), digits=3)) # 结论模板:总体准确率必须与宏平均、少数类召回并列呈现,缺一即视为选择性报告

边级指标:排序即业务

链接预测的业务形态几乎都是"给候选对排序取前列",因此排序指标是主语。命中率看真实答案是否出现在前列;逆排序取真实答案排名倒数的均值(第一名得一分,越靠前越高);两者常组合成"M 列表内的命中率+全局逆排序"的汇报惯例。均方误差类指标在链接预测里几乎没有地位——业务不关心分数的绝对值,只关心顺序。负采样口径必须与指标核算一致:训练采的负例分布、评测枚举的候选集,任何一处变化都会让指标失去可比性(第四章的教训重申)。滤波协议在知识图谱补全里是硬要求:已知正确的三元组要从候选中剔除,否则逆排序被"已见答案"抬高。

# 排序类指标的核算:命中率与逆排序 import numpy as np def hits_at_k(ranked_list, true_item, k): return 1.0 if true_item in ranked_list[:k] else 0.0 def mrr(ranked_list, true_item): rank = ranked_list.index(true_item) + 1 return 1.0 / rank # 某用户的真实"下一个交互"是商品 7,模型给出的排序: ranking = [3, 5, 7, 1, 9, 2] print("Hits@3:", hits_at_k(ranking, 7, 3)) # 命中(第三名) print("Hits@1:", hits_at_k(ranking, 7, 1)) # 未命中 print("MRR:", mrr(ranking, 7)) # 三分之一 # 批量核算:对每个用户各自排序后取均值(工业汇报的标准形态) users = {"u1": ([2, 7, 4, 1], 7), "u2": ([9, 3, 5, 8], 8), "u3": ([0, 6, 2, 5], 5)} print("全体 MRR:", round(np.mean([mrr(r, t) for r, t in users.values()]), 4)) print("全体 Hits@2:", np.mean([hits_at_k(r, t, 2) for r, t in users.values()]))

图级与生成级指标

图分类沿用节点级的指标家族(宏平均、曲线下面积),但必须叠加第四章强调的分布划分检验:随机划分的指标只能说明"认家族"能力,结构差异划分才检验真泛化。图回归用误差三件套,注意报告分位数误差(材料性质预测里"最差样本的表现"往往是研发决策的关键)。生成任务的指标自成体系:有效性(生成的图能否对应合法结构,分子场景即化学有效性比例)、独特性(去重后的比例,检测模式坍缩与记忆化抄袭)、分布贴近度(生成集与参考集的统计距离)。三者缺一不可——只报有效性会奖励"反复生成最平庸的合法结构",只报独特性会奖励"生成怪异但无害的东西"。

协议纪律:三种子、偏移、检查单

指标之外,协议决定数字的可信度。多种子重复:图任务的随机划分与初始化方差大,单次结果的波动可能超过方法间差距,至少报告多种子的均值与标准差。分布偏移测试:按时间或按结构族划分数据,模拟真实部署时"训练过去、服务未来"的落差——随机划分的高分在偏移测试中可能大幅缩水,这个落差本身就是要报告的指标。泄漏检查单:逐项确认测试边未参与消息传递、特征统计量只来自训练集、验证与测试的边界在所有预处理之前就已划定、增广与采样没有跨越数据边界。质检台的放行标准是"检查单全勾+多种子数字+至少一次偏移测试",三者齐备才算结案。

指标速查表

任务 主指标 辅助指标 失真陷阱
节点分类(均衡) 准确率 宏平均调和均值 随机划分高估
节点分类(失衡) 宏平均调和均值 曲线下面积、少数类召回 总体准确率虚高
节点回归 平均绝对误差 均方误差、分位数误差 长尾目标不报告尾部分位
链接预测 逆排序、前列命中率 曲线下面积 负采样口径漂移
图分类 宏平均、曲线下面积 偏移测试落差 随机划分"认家族"
图生成 有效性+独特性 分布贴近度 单指标奖励作弊解

⚠️ 常见坑:拿曲线下面积比较"阈值已定"的业务系统。阈值一旦确定,业务感受的是该阈值下的精确率与召回率,曲线下面积只是选阈值的参考——上线报告要回到工作点指标。

本节要点

  • 指标抗性:宏平均抗失衡、曲线下面积抗阈值依赖、逆排序对齐排序业务——先问"抗什么"再选用。
  • 生成三件套:有效性、独特性、分布贴近度互相制衡,缺项即作弊空间。
  • 协议三纪律:多种子重复、偏移测试、泄漏检查单,是数字可信度的底线。
  • 报告规范:失衡场景必须并列总体与宏平均指标,约定正类与阈值定义。

验收规范立好,下一节盘点侦探社至今未破的悬案——它们划定了当前技术的能力边界,也指明了值得投入的方向。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U