paper2skills Playbook

Model Evaluation Metrics(模型评估体系)

Skill-Model-Evaluation-Metrics · 12-ML基础

causalexperimentforecastingrag广告与投放供应链与补货知识图谱与RAGMAS与智能体工程WF-A 智能补货WF-B 广告优化WF-G Listing内容优化WF-H 复购增长
年化 ROI5-8 万
实现难度⭐⭐☆☆☆
业务视角
适用角色数据分析师 / 数据工程师 · 运营负责人 · 产品经理
适用平台选品评分 · 差评预测 · 用户流失预警 · 广告出价预测
什么情况下用想用机器学习解决业务问题,但不知道该选什么模型;模型上线后效果越来越差不知道为什么
成功是什么样的选对算法工具减少 50% 试错时间,模型上线后可监控可解释,数据团队和业务团队建立共同语言
业务痛点
不知道该用什么模型模型准确率不稳定业务不相信模型结果模型黑盒说不清为什么这么预测

1. 解决的问题

模型评估体系解决"模型到底好不好"这个问题——不是凭感觉,而是用标准化的量化指标从多个维度衡量模型表现。这是所有预测建模的基础能力,也是 ML 工程中模型选型、A/B 测试结果判读、生产监控的必备技能。

2. 核心算法逻辑

模型评估体系解决"模型到底好不好"这个问题——不是凭感觉,而是用标准化的量化指标从多个维度衡量模型表现。这是所有预测建模的基础能力,也是 ML 工程中模型选型、A/B 测试结果判读、生产监控的必备技能。

3. 业务应用场景

业务问题: 我们训练了 3 个流失预测模型(XGBoost / LightGBM / Logistic Regression),需要决定用哪个模型上线到 WF-A 智能补货系统,触发对高风险用户的挽留优惠券。但流失用户只占 5%,简单看准确率会误判——一个"全预测不流失"的模型也有 95% 准确率但完全没用。

数据要求: - 测试集:30,000 条用户样本(1500 个实际流失 + 28500 个留存),需包含 ground truth 标签 - 概率预测:每个模型输出 predict_proba

预期产出: - 多维度评估报告:Precision/Recall/F1/AUC-ROC/PR-AUC - 业务敏感度分析:在不同阈值下(top-10%/top-20%/top-50%),实际能触达多少流失用户 - 模型选型建议 + 最佳决策阈值

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI 预估:模型评估能力贯穿所有 ML 项目。仅流失预测场景——正确的模型选型(从 60% Recall 提升到 85%)每月可多挽留价值 $75,000 的用户;A/B 评估避免"假阳性"上线每次节省 5-8 万试错成本。年化贡献 200-500 万元(中型品牌)。
  • 实施难度:⭐⭐☆☆☆(2 星)— scikit-learn 原生支持,纯评估逻辑无需训练,集成成本低
  • 优先级评分:⭐⭐⭐⭐⭐(5 星)— 所有模型工作流的前置基础,图谱被依赖度仅次于 Feature Engineering
  • 评估依据
  • 当前图谱中 16 个 Skill 依赖 Feature Engineering 作为前置,但无一指向评估体系——说明大量模型 Skill 的评估环节是空白的
  • 商业产出:ROI 高、实施难度低、影响面广

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Model Evaluation Toolkit
模型评估工具集 — 分类模型多维度评估

适用场景:模型选型、A/B测试结果判读、生产模型健康监控
"""

import numpy as np
import pandas as pd
from sklearn.metrics import (
    accuracy_score, precision_score, recall_score, f1_score,
    roc_auc_score, average_precision_score, log_loss,
    confusion_matrix, classification_report,
    roc_curve, precision_recall_curve, brier_score_loss
)
from sklearn.calibration import calibration_curve
from sklearn.model_selection import cross_val_score, StratifiedKFold
import matplotlib.pyplot as plt
from typing import Dict, Tuple, List, Optional
from dataclasses import dataclass


@dataclass
class EvaluationResult:
    """模型评估结果"""
    accuracy: float
    precision: float
    recall: float
    f1: float
    auc_roc: float
    auc_pr: float
    log_loss: float
    brier_score: float
    confusion: np.ndarray
    
    def summary(self) -> str:
        return (
            f"Accuracy={self.accuracy:.3f} | "
            f"Precision={self.precision:.3f} | "
            f"Recall={self.recall:.3f} | "
            f"F1={self.f1:.3f} | "
            f"AUC-ROC={self.auc_roc:.3f} | "
            f"AUC-PR={self.auc_pr:.3f} | "
            f"LogLoss={self.log_loss:.3f} | "
            f"Brier={self.brier_score:.3f}"
        )


def evaluate_classifier(
    y_true: np.ndarray,
    y_prob: np.ndarray,
    threshold: float = 0.5
) -> EvaluationResult:
    """
    分类模型完整评估
    
    Args:
        y_true: 真实标签 [0,1]
        y_prob: 预测概率 [0,1]
        threshold: 分类阈值

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。