2. 评测指标体系构建

好,咱们进入第二个环节。说实话,评测指标体系这块,是我在项目中踩坑最多的地方。很多人一上来就盯着准确率看,结果模型跑得挺准,但系统扛不住并发,延时高得离谱。嗯,评测不是单点游戏,得搭一个完整的指标体系。

2.1 核心指标概览

我个人习惯把指标分成三类:效果指标、性能指标、资源指标。这三类缺一不可。你想想看,光效果好但跑不动,等于白搭;跑得快但结果全是错的,那更没用。

核心原则:评测指标的选择,取决于你的业务场景。自动驾驶场景更看重延时,推荐系统更看重召回率,没有万能指标。

下面这张图是我自己总结的指标体系结构,你一看就明白了:

评测指标体系 效果指标 性能指标 资源指标 准确率 召回率 F1-Score 延时 吞吐量 并发数 CPU占用 内存占用 磁盘I/O 图:评测指标体系三层结构 💡 选择建议: 离线场景 → 侧重效果指标(准确率、F1) 在线场景 → 侧重性能指标(延时、吞吐量) 资源受限场景 → 侧重资源指标(CPU、内存)

2.2 效果指标详解

准确率(Accuracy)

准确率是最直观的指标。说白了就是:所有预测中,猜对了多少。公式很简单:

Accuracy = (TP + TN) / (TP + TN + FP + FN)

但这里有个坑。我在项目中遇到过样本严重不平衡的情况——正样本只占1%,负样本占99%。这时候你就算全部预测为负样本,准确率也有99%。看起来很美,实际上模型就是个废物。

注意:样本不平衡时,准确率会骗人。这时候别只看准确率,得结合召回率和F1一起看。

召回率(Recall)

召回率关注的是:所有真正的正样本中,你找出来了多少。

Recall = TP / (TP + FN)

举个例子。假设有100个异常交易,你的模型只抓到了80个,那召回率就是80%。剩下的20个漏掉了,那就是风险。

我曾经做过一个反欺诈项目,客户要求召回率必须达到99%以上。为什么?因为漏掉一笔欺诈交易,可能损失几十万。这时候宁可误报多一些,也不能放过。

F1-Score

F1-Score是准确率和召回率的调和平均。公式:

F1 = 2 * (Precision * Recall) / (Precision + Recall)

为什么要用调和平均?因为算术平均会被大数带偏。举个例子:

  • 模型A:准确率90%,召回率10% → 算术平均50%,F1只有18%
  • 模型B:准确率50%,召回率50% → 算术平均50%,F1是50%

你看,算术平均一样,但F1能真实反映模型B更好。我个人习惯把F1作为效果指标的最终裁决者。

小技巧:如果你不确定该优化准确率还是召回率,先看F1。F1上去了,说明整体效果在变好。

2.3 性能指标详解

延时(Latency)

延时就是从请求发出到收到响应的时间。通常关注三个分位值:

分位值 含义 典型要求
P50 50%的请求在这个时间内完成 < 100ms
P95 95%的请求在这个时间内完成 < 200ms
P99 99%的请求在这个时间内完成 < 500ms

嗯,这里要注意。平均延时是个陷阱。我记得有一次,系统平均延时只有50ms,但P99延时高达2秒。这意味着每100个用户里,就有1个要等2秒。用户体验极差。

吞吐量(Throughput)

吞吐量是单位时间内能处理的请求数。常用单位:QPS(每秒查询数)、TPS(每秒事务数)。

吞吐量 = 总请求数 / 总时间

吞吐量和延时是跷跷板关系。你想想看,系统资源是有限的,请求越多,单个请求的等待时间就越长。所以评测时,我一般会固定一个指标,看另一个。

实战经验:我习惯用「吞吐量-延时曲线」来评估系统性能。找到拐点——那个吞吐量再增加、延时就会急剧上升的点。这个点就是系统的极限承载能力。

2.4 资源指标详解

资源指标说白了就是系统跑起来要花多少本钱。主要看三个:

  • CPU占用率:别超过80%,超过就报警。我见过CPU飙到95%还在跑的,结果系统直接卡死。
  • 内存占用:注意内存泄漏。我曾经排查过一个项目,内存占用每小时涨2%,跑两天就OOM了。
  • 磁盘I/O:读写速度。如果磁盘I/O成为瓶颈,加内存或换SSD是常见解法。

2.5 指标选择策略

说了这么多,到底怎么选?我总结了一个简单的决策树:

  1. 先看业务场景:是离线评测还是在线评测?
  2. 离线场景:重点看效果指标(准确率、召回率、F1)
  3. 在线场景:重点看性能指标(延时、吞吐量)
  4. 资源受限场景:加上资源指标(CPU、内存)
  5. 最终:至少选3个指标,覆盖效果、性能、资源三个维度

我的习惯:每次评测至少选4个指标。比如「F1 + P99延时 + QPS + CPU占用」,这样效果和性能都能覆盖到。

2.6 避坑指南

最后分享几个我踩过的坑:

  • 只看平均值:平均值会掩盖极端情况。一定要看分位值。
  • 忽略冷启动:系统刚启动时性能往往较差。我一般会预热5分钟再开始采集数据。
  • 指标之间互相矛盾:比如准确率和召回率往往此消彼长。这时候F1就是你的裁判。
  • 测试环境与生产环境不一致:尽量用和生产环境一样的配置,否则评测结果没有参考价值。