4. 策略效果评估指标

在 Champion vs. Challenger 对比中,评估指标是衡量策略优劣的“裁判”。不同业务问题需选用不同指标:分类问题关注预测类别是否准确,回归问题关注数值偏差大小。本章系统梳理核心指标的定义、适用场景与对比方法。

4.1 分类指标

分类指标用于评估模型预测离散标签的能力。以下为最常用的 5 个指标,适用于二分类与多分类场景。

指标 公式 / 定义 核心含义 适用场景
准确率 (Accuracy) (TP+TN) / (TP+TN+FP+FN) 全部预测中正确的比例 正负样本均衡时
精确率 (Precision) TP / (TP+FP) 预测为正例中真正为正例的比例 误报成本高(如垃圾邮件过滤)
召回率 (Recall) TP / (TP+FN) 真实正例中被正确找出的比例 漏报成本高(如疾病筛查)
F1 分数 2 × (P×R) / (P+R) 精确率与召回率的调和平均 正负样本不平衡,需平衡 P 与 R
AUC (ROC 曲线下面积) ROC 曲线下积分面积 模型对正负样本排序能力的综合度量 排序/评分任务,样本极度不平衡
关键对比: 准确率在正负样本比例悬殊时可能产生误导(如 99% 负样本,全判负即可达 99% 准确率)。此时应优先关注 AUC 或 F1。

4.2 回归指标

回归指标衡量模型预测连续数值的误差大小与拟合优度。以下为 3 个最常用指标。

指标 公式 核心含义 适用场景
MSE (均方误差) (1/n) Σ(yᵢ - ŷᵢ)² 误差平方的平均值,对大误差惩罚大 需要避免大偏差(如金融风控)
MAE (平均绝对误差) (1/n) Σ|yᵢ - ŷᵢ| 误差绝对值的平均值,对异常值更稳健 数据含异常值,需直观解释误差
R² (决定系数) 1 - (SS_res / SS_tot) 模型解释的方差比例,越接近 1 越好 评估模型整体拟合优度
选型建议: 若业务对极端误差敏感(如预测股价),优先看 MSE;若希望误差解释更直观(如预测销量),优先看 MAE;R² 适合作为模型间对比的标准化指标。

4.3 分类指标关系图

下图展示分类指标之间的逻辑关系与计算路径,帮助理解混淆矩阵到各指标的推导过程。

分类指标关系图 分类指标关系图 TP (真阳性) 预测为正,实际为正 FP (假阳性) 预测为正,实际为负 FN (假阴性) 预测为负,实际为正 TN (真阴性) 预测为负,实际为负 精确率 = TP/(TP+FP) 召回率 = TP/(TP+FN) F1 = 2·P·R/(P+R) 调和平均 AUC (ROC 面积) 说明: 混淆矩阵四格(TP/FP/FN/TN)是计算精确率、召回率的基础;F1 综合两者;AUC 独立于阈值,反映整体排序能力。 Champion vs. Challenger 对比时,需同时观察多个指标,避免单一指标误导。

4.4 回归指标对比图

下图对比 MSE、MAE、R² 在误差处理方式上的差异,帮助理解各指标对异常值的敏感度。

回归指标对比图 回归指标对比图 MSE 均方误差 对大误差惩罚大 MAE 平均绝对误差 对异常值稳健 R² 决定系数 解释方差比例 指标对比总结 • MSE:误差平方放大异常值影响,适合需要避免大偏差的场景(如金融风控)。 • MAE:误差绝对值平均,对异常值不敏感,适合数据含噪声或需要直观解释误差的场景。 • R²:取值范围 [0,1],越接近 1 表示模型拟合越好;可跨模型比较,但无法反映误差绝对值。 • Champion vs. Challenger 建议:同时报告 MSE 与 MAE,辅以 R²,避免单一指标偏差。 • 注意:R² 在非线性模型或过拟合时可能虚高,需结合残差图诊断。

4.5 指标选择策略

在实际 Champion vs. Challenger 对比中,建议按以下步骤选择指标:

  1. 明确业务目标:是减少误报(高精确率)还是减少漏报(高召回率)?
  2. 分析数据分布:正负样本是否均衡?是否存在异常值?
  3. 选择主指标:分类问题优先选 F1 或 AUC;回归问题优先选 MAE 或 MSE。
  4. 辅以辅助指标:至少再选 1-2 个互补指标,避免单一指标误导。
  5. 设定阈值:对于分类问题,明确概率阈值(默认 0.5 是否合适?)。
常见陷阱: 仅用准确率评估不平衡数据集;仅用 R² 判断回归模型好坏而不检查残差;在 Champion vs. Challenger 对比中只报告一个指标而忽略其他维度。务必多指标交叉验证。

4.6 代码示例:计算分类与回归指标

以下 Python 代码展示如何使用 scikit-learn 快速计算上述指标,便于 Champion vs. Challenger 自动化对比。

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

# 分类指标示例
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
y_prob = [0.9, 0.2, 0.8, 0.4, 0.3, 0.95, 0.1, 0.7]

print("分类指标:")
print(f"准确率: {accuracy_score(y_true, y_pred):.3f}")
print(f"精确率: {precision_score(y_true, y_pred):.3f}")
print(f"召回率: {recall_score(y_true, y_pred):.3f}")
print(f"F1 分数: {f1_score(y_true, y_pred):.3f}")
print(f"AUC: {roc_auc_score(y_true, y_prob):.3f}")

# 回归指标示例
y_true_reg = [3.0, 5.0, 2.5, 7.0, 4.5]
y_pred_reg = [2.8, 5.2, 2.6, 6.8, 4.7]

print("\n回归指标:")
print(f"MSE: {mean_squared_error(y_true_reg, y_pred_reg):.3f}")
print(f"MAE: {mean_absolute_error(y_true_reg, y_pred_reg):.3f}")
print(f"R²: {r2_score(y_true_reg, y_pred_reg):.3f}")
自动化对比建议: 将上述代码封装为 evaluate_model(y_true, y_pred, y_prob, task_type) 函数,在 Champion 与 Challenger 上分别调用,输出对比报告,快速定位优势策略。