本文主要汇总一些常用于机器学习的评估指标,针对每个指标由浅入深,从”一句话解释“、定义及公式、计算/绘制步骤等方面一一总结。这些指标本身可用于很多业务场景,但因为我从事风控行业,本文涉及的例子都是风控的案例,重点介绍这些指标如何评估风控模型的效果。
1. 混淆矩阵
一句话解释 :混淆矩阵就是统计分类模型“归错类”和“归对类”的样本个数,然后把结果放在一个表里展示出来。
混淆矩阵 |
真实值 |
||
Positive |
Negative |
||
预测值 |
Positive |
TP |
FP |
Negative |
FN |
TN |
- TP(True Positive,真阳):被分类器正确分类的正样本个数,例如:事实上“逾期”且预测也“逾期”的账户数;
- TN(True Negative,真阴):被分类器正确分类的负样本个数,例如,事实上“未逾期”且预测也“未逾期”的账户数;
- FP(False Positive,假阳):被错误地标记为正样本的负样本个数,例如:事实上“未逾期”但预测“逾期”的账户数;
- FN(False Negative,假阴):被错误地标记为负样本的正样本个数,例如:事实上“逾期”但预测“未逾期”的账户数。
注:TP + TN + FP + FN = 总样本数
2. 准确率、精确率、召回率、F1 值
- 准确率(Accuracy):被预测得正确(包括正、负样本)的样本 占 总样本 的比重:
局限性:当两类样本数量很不均衡时,accuracy 就不能很好的反映模型的性能了。
- 精度/精确率/精准率/查准率(Precision):被预测正确的正样本 占 全部被预测为正的样本 的比重,例如,在所有我们预测“逾期”的贷款人中,事实上“逾期”的贷款人的百分比:
- 召回率/查全率(Recall):被预测正确的正样本 占 全部正样本 的比重,例如,在所有实际“逾期”的贷款人中,成功被预测“逾期”的贷款人的百分比:
- F1 值:Precision 和 Recall 的调和平均值。当 Precision 不变时,Recall 越大,F1 值越大;当 Recall 不变时,Precision 越大,F1 值越大。
- (简单)调和平均数公式:
,当 n=2,
调和平均数又称倒数平均数,是总体各统计变量倒数的算术平均数的倒数,是一种集中趋势的度量。
调和平均广泛存在于世界各种角落,调和平均的哲学意义是在一个过程中有多少条平行的路径。
算术平均值中每个参数的权重都是一样的。
查准率和查全率之间的权衡
给定二元模型和阈值,我们不能同时拥有高查准率和高查全率,这是因为:
默认情况下,二分类模型的阈值为 0.5
例 1【高准确率,低召回率】:假定我们用逻辑回归建立"病人是否患癌"的二分类模型,我们需要提升阈值来实现:
Predict 1 if
Predict 0 if
例 2【高召回率,低准确率】:假定我们用逻辑回归建立"贷款人是否有逾期倾向"的二分类模型,我们需要降低阈值来实现:
Predict 1 if
Predict 0 if
一个更直观的例子:
AUC/ROC
- ROC(Receiver Operating Characteristics)曲线
- AUC(Area Under Curve)值
ROC--深入浅出
一句话解释 :ROC(Receiver Operating Characteristic)曲线通过设置不同的临界值,来展示分类模型在不同临界值下的表现。
ROC 曲线图中:
- 横轴为 FPR(假阳率):FP/(FP+TN),等同于 1-TNR,FPR 越大,预测为正的样本中负类越多;
- 纵轴为 TPR(真阳率):TP/(TP+FN),TPR 越大,预测为正的样本中正类越多。
ROC 曲线绘制原理
假设使用逻辑回归分类器进行预测,分类器会给出每个样本为正的概率,可规定一个阈值 x,概率大于 x 的为正样本,概率小于 x 的为负样本。若取多个不同概率作为阈值,则可以得到一系列(FPR, TPR),绘制出 ROC 曲线。
总结一下,可分成三步:
- 先按分数升序排序,计算某个阈值 x 下的 TPR 与 FPR;
- 重复步骤(1),在不同阈值 x 下计算得到多组 TPR 与 FPR;
- 以 FPR 为横轴,TPR 为纵轴,画出 ROC 曲线。
注:
步骤(1)中,概率低于 x 时预测为 Bad。
TPR = (预测为 Bad & 真实为 Bad)/整体真实为 Bad
FPR = (预测为 Bad & 真实为 Good)/整体真实为 Good
因此可将 TPR 理解为累积正样本率 Cum Bad Rate,FPR 理解为累积负样本率 Cum Good Rate。
样本分布与 ROC 曲线之间的关系:
ROC 曲线绘制例子
假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图*有 20 个测试样本,“Class”一栏表示每个测试样本真正的标签(p 表示正样本,n 表示负样本),“Score”表示每个测试样本属于正样本的概率。
接下来,从高到低将“Score”值作为阈值 threshold,当测试样本属于正样本的概率大于或等于这个 threshold 时,我们认为它为正样本,否则为负样本。
举例来说,对于图中的第 4 个样本,其“Score”值为 0.6,那么样本 1,2,3,4 都被认为是正样本,其中样本 1,2,4 预测正确,则 TP=3;样本 5-20 被认为是负样本,其中样本 5,6,9,11,13,17,19 实际为正样本,则 FN=7,故 TPR=TP/(TP+FN)=3/(3+7)=0.3。
每次选取一个不同的 threshold,我们就可以得到一组 FPR 和 TPR,即 ROC 曲线上的一点。这样一来,我们一共得到了 20 组 FPR 和 TPR 的值,将它们画在 ROC 曲线的结果如下图:
AUC--深入浅出
一句话解释 :ROC 曲线与 FPR 轴围成的面积记作 AUC,AUC 越大,说明分类器的性能越好。
以下图为例:
- L2 曲线与 FPR 轴之间的面积 > L1 曲线与 FRP 轴之间的面积,故 L2 曲线对应的分类器性能优于 L1 曲线,即:曲线越靠近 A 点(左上方)性能越好,曲线越靠近 B 点(右下方)曲线性能越差;
- 若 ROC 曲线与 CD 对角线一致,说明算法性能和随机猜测的效果差不多,如 C、D、E 点。若 ROC 曲线位于 CD 对角线上面(即位于白色三角形内),说明算法性能优于随机猜测,如 G 点(0.2, 0.7)。若 ROC 曲线位于 CD 对角线下面(即位于灰色三角形内)说明算法性能比随机猜测差,如 F 点(0.8, 0.3)。
AUC 的缺陷
- 忽略了预测的概率值和模型的拟合优度;
- AUC 反应的信息过于笼统,无法反应实际业务中关心的指标,如:召回率、精确率等;
- AUC 对 FPR 和 TPR 两种错误的代价同等看待;
- AUC 没有给出模型误差的空间分布信息;
- 最重要的一点,AUC 的 misleading 的问题:可能存在两个模型的 AUC 相等,但其在不同区域的预测能力是不同的。
拓展阅读: AUC的缺陷 (原文: AUC: a misleading measure of the performance of predictive distribution models )
KS
首先介绍一下什么是 KS-检验:
KS-检验(Kolmogorov-Smirnov text):KS-检验是比较一个频率分布 f(x)与理论分布 g(x)或者两个观测值分布的检验方法。其原假设 H0:两个数据分布一致或者数据符合理论分布。D=max| f(x)- g(x)|,当实际观测值 D>D(n,α)则拒绝H0,否则则接受H0假设。
一句话解释:KS(Kolmogrow-Smirnov)值是好样本与坏样本累计分布之间的差值。
计算公式:
在风控场景,上面的式子可以理解为:KS=max{|累计坏人占比-累计好人占比|}
举个例子,根据分数划分 20 个区间小组,针对各组分别统计如下指标:
- Count: 样本总数
- Bad: 坏样本数
- Good: 好样本数
- Cum_Bad: 累计坏样本数
- Cum_Good: 累计好样本数
- Cum_Count: 累计样本数
- Cum_Bad%: 累计坏样本占比
- Cum_Good%: 累计好样本占比
首先 mock 出 Score、Count、Bad、Good 四列数据,然后计算出后面五列累计指标,最后由 Cum_Bad%和 Cum_Good%的绝对值计算出 KS_Value,计算细节如下:
其中,40-45 分数区间的 KS_Value 最大,达到了 30.17%,即该结果对应的模型 KS 为 30.17%.
5. PSI
一句话解释:PSI(Population Stability Index)指标反映了验证样本在各分数段的分布与建模样本分布的稳定性。在建模中,我们常用来筛选特征变量、评估模型稳定性。
计算公式:
PSI = SUM( (Actual% - Expected%)* ln(Actual%/ Expected%) )
Actual% -- 实际占比
Expected% -- 预期占比
从业务上来看,PSI 指标值越小,实际分布和预期分布之间的差异就越小,表示当前模型在业务上的表现越稳定。
PSI 指标的计算可分为以下步骤:
- 对预期(Expected)分数作离散化处理,一般分成 10 或 20 个区间,按升序/降序排列, 并统计各分箱的样本数占比(Expected%);
- 按上一步的分箱区间,对实际分数在各区间的样本占比(Actual%)进行统计;
- 按每个分箱,计算其 (Actual%-Expected%)和 ln(Actual%/ Expected%),然后计算 (Actual% - Expected%)* ln(Actual%/ Expected%),得到每个分箱的 Index;
- 将每个分箱(每行)的 Index 值相加,得到 PSI 指标。
老规矩 -- 举个栗子,具体的计算过程如下:
在大多数场景下,目前较通用的 PSI 评判标准阈值如下:
- 若 PSI 小于 0.1,模型表现很稳定,无需对当前模型进行更新;
- 若 PSI 介于 0.1-0.2,模型在当前场景的稳定性有一定波动,需持续监控并探索波动原因;
- 若 PSI 大于 0.2,则需要对模型进行更新迭代。
6. Lift 曲线
一句话解释:Lift 衡量的是评分模型对坏样本的预测能力相比随机选择的倍数,Lift 大于 1 说明模型表现优于随机选择。
Lift 在风控场景一般用于贷前评分卡模型的效果评估,下面举个例子:算完 KS 的边角余料先不要丢掉,基于这些中间结果,再补充一列 Cum_total%,就可以针对每一行计算其 Lift 值了,即 Lift=Cum_bad%/Cum_total%,以 Cum_total%作为横轴,Lift 值作为纵轴,即可作出 Lift 曲线图,具体的中间计算过程和 Lift 曲线如下:
不过 Lift 指标更多用于营销场景。例如:若不使用营销模型,而是采用随机的营销方式,只有 1%的客户会成功转化;而使用模型进行精准营销后,会有 10%的客户成功转化。那么,lift=10%/1%=10。
7. Gain 曲线
Gain 曲线和 Lift 曲线可以放到一起对比来看:
- Lift=Cum_bad%/Cum_total%
- Gain=Cum_bad%
一句话解释:Lift 曲线主要表现的是相较于不使用模型时,预测效果的提升指数,而 Gain 曲线表现的则是模型整体的精度。从计算公式上来看,可以说 Gain 是 Lift 的分子。
即
如果要作图的话,接着用