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 分类指标关系图
下图展示分类指标之间的逻辑关系与计算路径,帮助理解混淆矩阵到各指标的推导过程。
4.4 回归指标对比图
下图对比 MSE、MAE、R² 在误差处理方式上的差异,帮助理解各指标对异常值的敏感度。
4.5 指标选择策略
在实际 Champion vs. Challenger 对比中,建议按以下步骤选择指标:
- 明确业务目标:是减少误报(高精确率)还是减少漏报(高召回率)?
- 分析数据分布:正负样本是否均衡?是否存在异常值?
- 选择主指标:分类问题优先选 F1 或 AUC;回归问题优先选 MAE 或 MSE。
- 辅以辅助指标:至少再选 1-2 个互补指标,避免单一指标误导。
- 设定阈值:对于分类问题,明确概率阈值(默认 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 上分别调用,输出对比报告,快速定位优势策略。