2. 评估指标体系:常用收益评估指标(AUC、KS、Lift、Profit Curve)详解

在风控模型上线后,仅关注模型精度(如准确率、召回率)远远不够。业务收益才是衡量模型价值的最终标尺。本章将深入解析四个最核心的收益评估指标:AUC、KS、Lift 和 Profit Curve,并说明它们在 Spark 大规模评估场景下的计算逻辑与业务含义。

2.1 指标全景与适用场景

不同指标从不同维度刻画模型收益,下表总结了它们的核心差异与典型用途:

指标 核心含义 取值范围 主要用途 对业务收益的反映
AUC 模型对正负样本的排序能力 [0.5, 1.0] 模型整体区分度评估 间接:排序越好,策略空间越大
KS 正负样本累积分布的最大差异 [0, 1.0] 模型在某个阈值下的最佳区分能力 间接:KS 越高,分箱效果越好
Lift 模型筛选相比随机筛选的提升倍数 [1, +∞) 营销响应、催收优先级排序 直接:提升倍数越高,单位成本收益越大
Profit Curve 不同阈值下的累计利润曲线 (-∞, +∞) 最优决策阈值选择、业务盈亏平衡分析 直接:利润最大化的阈值即为最优策略
评估优先级建议:在风控收益复盘时,建议按 Profit Curve → Lift → KS → AUC 的顺序进行诊断。Profit Curve 直接反映利润,Lift 反映筛选效率,KS 和 AUC 用于排查模型排序能力是否退化。

2.2 AUC:排序能力的黄金标准

AUC(Area Under the ROC Curve)衡量模型将正样本排在负样本之前的概率。在 Spark 中,AUC 的计算通常基于排序后的预测概率与真实标签。

Spark 计算要点:

  • 使用 BinaryClassificationMetrics 类直接计算 AUC。
  • 对于大规模数据,先按预测概率降序排序,再通过累加正负样本数计算 ROC 曲线下的面积。
  • AUC 对样本不平衡不敏感,但无法反映具体阈值下的业务收益。
// Spark Scala 示例:计算 AUC
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics

val scoreAndLabels = predictions
  .select("probability", "label")
  .rdd.map(row => (row.getAs[Double]("probability"), row.getAs[Double]("label")))

val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auc = metrics.areaUnderROC()
println(s"AUC = $auc")
复盘异常信号:如果 AUC 低于 0.6,说明模型排序能力接近随机,此时 Lift 和 Profit Curve 通常也会表现极差,需要立即检查特征分布偏移或模型过拟合。

2.3 KS:最大区分力阈值

KS(Kolmogorov-Smirnov)统计量衡量正负样本累积分布之间的最大垂直距离。KS 值越高,模型在某个阈值下的区分能力越强。

KS 计算步骤:

  1. 将预测概率分为 N 个等频分箱(通常 10 箱或 20 箱)。
  2. 计算每个分箱中正样本占比(TPR)和负样本占比(FPR)。
  3. 计算累积 TPR 与累积 FPR 的差值,取最大值即为 KS。
-- Spark SQL 示例:分箱计算 KS
WITH bins AS (
  SELECT
    NTILE(10) OVER (ORDER BY probability DESC) AS bin_id,
    label
  FROM predictions
),
bin_stats AS (
  SELECT
    bin_id,
    SUM(IF(label=1, 1, 0)) AS pos_cnt,
    SUM(IF(label=0, 1, 0)) AS neg_cnt
  FROM bins
  GROUP BY bin_id
)
SELECT
  MAX(ABS(cum_pos / total_pos - cum_neg / total_neg)) AS ks_value
FROM (
  SELECT
    SUM(pos_cnt) OVER (ORDER BY bin_id) AS cum_pos,
    SUM(neg_cnt) OVER (ORDER BY bin_id) AS cum_neg,
    (SELECT SUM(pos_cnt) FROM bin_stats) AS total_pos,
    (SELECT SUM(neg_cnt) FROM bin_stats) AS total_neg
  FROM bin_stats
)
业务解读:KS 在 0.3~0.5 之间通常表示模型有较好的区分能力。如果 KS 超过 0.7,需要警惕过拟合或特征泄露;如果 KS 低于 0.2,模型基本不可用。

2.4 Lift:筛选效率的放大镜

Lift 曲线展示模型筛选出的 Top N% 样本中,正样本浓度是随机筛选的多少倍。Lift 越高,说明模型在头部样本的命中效率越高。

Lift 计算公式:

  • Lift@k% = (Top k% 样本中的正样本率) / (全量样本中的正样本率)
  • 例如:全量坏账率 2%,模型筛选 Top 10% 样本的坏账率为 12%,则 Lift@10% = 6。

在 Spark 中计算 Lift:

-- Spark SQL 示例:计算 Lift@10%
WITH ranked AS (
  SELECT
    probability,
    label,
    PERCENT_RANK() OVER (ORDER BY probability DESC) AS pct_rank
  FROM predictions
),
top10 AS (
  SELECT AVG(IF(label=1, 1.0, 0.0)) AS top_rate
  FROM ranked
  WHERE pct_rank <= 0.1
),
overall AS (
  SELECT AVG(IF(label=1, 1.0, 0.0)) AS overall_rate
  FROM predictions
)
SELECT top_rate / overall_rate AS lift_at_10
FROM top10, overall
复盘关注点:如果 Lift 曲线在头部(如 5%~20%)出现快速下降,说明模型只对极少数样本有效,泛化能力不足。此时应检查特征是否过度拟合了少数异常样本。

2.5 Profit Curve:直接衡量业务利润

Profit Curve 将模型输出概率与业务成本、收益直接挂钩,计算不同阈值下的累计利润。这是风控收益复盘中最具决策价值的指标。

Profit Curve 构建步骤:

  1. 定义业务参数:审批通过后的平均收益(Revenue)、坏账损失(Loss)、审批成本(Cost)。
  2. 按预测概率降序排序,依次计算每个样本的边际利润。
  3. 绘制累计利润随样本比例变化的曲线。
  4. 曲线最高点对应的阈值即为最优决策点。
// Spark Scala 示例:计算 Profit Curve 数据点
val revenuePerGood = 100.0   // 好客户平均收益
val lossPerBad = 500.0       // 坏客户平均损失
val costPerCheck = 10.0      // 审批成本

val profitData = predictions
  .orderBy(col("probability").desc)
  .select(
    when(col("label") === 1.0, revenuePerGood).otherwise(-lossPerBad) - costPerCheck
      .alias("profit_per_sample")
  )
  .select(
    sum("profit_per_sample").over(Window.orderBy("probability").rowsBetween(Long.MinValue, 0))
      .alias("cumulative_profit")
  )
异常复盘关键:如果 Profit Curve 的最高点出现在样本比例极低(如 5%)或极高(如 95%)的位置,说明模型对业务参数的敏感性极高,需要重新校准成本收益参数,或检查是否存在严重的样本偏差。

2.6 四指标联动分析框架

在实际复盘时,四个指标需要联动分析,才能定位收益异常的根本原因。下图展示了四指标之间的逻辑关系与诊断路径:

四指标联动分析框架 模型收益异常 AUC 下降 KS 偏低 Lift 衰减 Profit Curve 异常 排序能力退化 → 检查特征分布偏移 区分力不足 → 检查分箱单调性 头部效率下降 → 检查样本选择偏差 利润阈值偏移 → 重新校准成本参数 联动诊断结论 AUC 与 KS 定位模型能力,Lift 定位筛选效率,Profit Curve 定位业务收益 四指标一致恶化 → 模型失效;仅 Profit Curve 异常 → 业务参数需调整

2.7 异常复盘检查清单

在 Spark 模型收益评估异常复盘时,请对照以下清单逐项排查:

检查项 指标 异常信号 可能原因 排查动作
排序能力 AUC 环比下降 > 0.05 特征分布偏移、数据质量下降 PSI 检测、特征空值率检查
区分力 KS KS < 0.2 或 > 0.7 模型欠拟合 / 过拟合 分箱单调性检验、学习曲线检查
筛选效率 Lift Lift@10% 环比下降 > 20% 样本选择偏差、营销策略变化 PSM 匹配检验、策略回溯分析
业务收益 Profit Curve 最优阈值偏移 > 10% 成本收益参数变化、外部环境变化 参数敏感性分析、A/B 测试验证
最佳实践:建议在 Spark 中建立自动化评估 Pipeline,每天产出四指标报表,并设置环比告警阈值。当任意指标触发告警时,自动触发特征分布诊断和参数校准流程,将异常发现时间从周级缩短到小时级。