机器学习模型的几种常用评估方法
测试
目录
概念
通过训练集产生的模型,利用测试数据来进行模型效果的评估,评估结果以模型评估报告的形式呈现,在报告中通过AUC值、模型准确率、模型召回率等一系列评估指标将帮助判断模型是否可行以及是否满足业务目标。
模型评估之 — 混淆矩阵
T——true,F——false,P——positive,N——negative
TP(实际为正预测为正,真正),TN(实际为负预测为负,真负),
FP(实际为负但预测为正,假正),FN(实际为正但预测为负,假负)
评估分类模型:
FPR=FP/(FP+TN) 表示所有实际违约客户中,被预测为不违约的客户的比例。越小越好
TPR=TP/(FN+TP) 表示所有实际为不违约客户中,被预测为不违约客户的比例。越大越好
指标 | 描述 | Scikit-learn函数 | 计算方式 |
Confusion Matrix | 混淆矩阵 | from sklearn.metrics import confusion_matrix | |
Precision | 精准度 | from sklearn.metrics import precision_score | Precision=TP / (TP+FP) |
Accuracy | 准确率 | Accuracy=(TP+TN) / (TP+FP+TN+FN) | |
Recall | 召回率 | from sklearn.metrics import recall_score | Recall=TP / (TP+FN) |
F1 | F1值 | from sklearn.metrics import f1_score | F1 Score=(2RecallPrecision) / (Recall+Precision) |
NPV | 阴性预测值 | NPV=TN / (TN+FN) | |
ROC | ROC曲线 | from sklearn.metrics import roc | |
AUC | ROC曲线下的面积 | from sklearn.metrics import auc | |
K-S | ks值 | from sklearn.metrics import roc_curve | max(TPR-FPR) |
评估回归模型:
指标 | 描述 | Scikit-learn函数 |
Mean Square Error (MSE, RMSE) | 平均方差 | from sklearn.metrics import mean_squared_error |
Absolute Error (MAE, RAE) | 绝对误差 | from sklearn.metrics import mean_absolute_error, median_absolute_error |
R-Squared | R平方值 | from sklearn.metrics import r2_score |
模型评估之 — K-S值
阈值:阈值就是一个分界线,用于判定正负例的,在模型预测后我们会给每条预测数据进行打分(0<score<1)。如:指定阈值为0.6,那么评分低于0.6的会被判定为负例(不好的),评分高于0.6的即会判定为正例(好的),随着阈值的减小,判定为正例的样本相应地就会增加。
正样本洛伦兹曲线记为f(x),负样本洛伦兹曲线记为g(x),K-S曲线实际上是f(x)与g(x)的差值曲线。K-S曲线的最高点(最大值)定义为KS值,KS值越大,模型分值的区分度越好,KS值为0代表是最没有区分度的随机模型。准确的来说,K-S是用来度量阳性与阴性分类区分程度的。由于ks值能找出模型中差异最大的一个分段,因此适合用于cut_off,像评分卡这种就很适合用ks值来评估。
KS的计算步骤如下:
1. 计算每个评分区间的好坏账户数。
2. 计算每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。
3. 计算每个评分区间累计坏账户占比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值即得此评分卡的K-S值。
模型评估之 — AR值
模型评估之 — ROC图和AUC
ROC(Receiver Operating Characteristic Curve):接受者操作特征曲线。ROC曲线及AUC系数主要用来检验模型对客户进行正确排序的能力。 Sensitivity=正确预测到的正例数/实际正例总数; 1-Specificity=正确预测到的负例数/实际负例总数; 纵坐标为Sensitivity(True Positive Rate),横坐标为1-Specificity(True Negative Rate),ROC曲线则是不同阈值下Sensitivity和1-Specificity的轨迹。随着阈值的减小,Sensitivity和1-Specificity也相应增加,所以ROC曲线呈递增态势。
ROC曲线描述了在一定累计好客户比例下的累计坏客户的比例,模型的ROC曲线越远离对角线,说明模型的分别能力越强;
AUC系数表示ROC曲线下方的面积。模型的AUC基线值大于0.5才有意义。AUC值越接近1模型的效果越好,模型的风险区分能力越强。
由于ks值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因此AUC值更能胜任。
评估指标之 — Lift提升图
Lift =[TP/(TP+FP)] / [(TP+FN)/(TP+FP+FN+TN)] = PV_plus / pi1,它衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好。
ROC曲线和lift曲线都能够评价逻辑回归模型的效果:类似信用评分的场景,希望能够尽可能完全地识别出有违约风险的客户,选择ROC曲线及相应的AUC作为指标;
类似数据库精确营销的场景,希望能够通过对全体消费者的分类而得到具有较高响应率的客户群从而提高投入产出比,选择lift曲线作为指标;
评估指标 — Gain增益图
Gains(增益) 与 Lift (提升)类似:Lift 曲线是不同阈值下Lift和Depth的轨迹,Gain曲线则是不同阈值下PV_plus和Depth的轨迹,而PV_plus=Lift*pi1= TP/(TP+FP),所以它们显而易见的区别就在于纵轴刻度的不同。
增益图是描述整体精准率的指标。按照模型预测出的概率从低到高排列,将每一个百分位数内的精准率指标标注在图形区域内,就形成了非累积的增益图。如果对每一个百分位及其之前的精准率求和,并将值标注在图形区域内,则形成累积的增益图。
评估指标 — GINI系数
GINI系数主要用于模型风险区分能力评估。GINI统计值是衡量坏账户数在好账户数上的累积分布与随机分布曲线之间的面积,好账户与坏账户分布之间的差异越大,GINI指标越高,表明模型的风险区分能力越强。
GINI系数的计算步骤如下:
1. 计算每个评分区间的好坏账户数。
2. 计算每个评分区间的累计好账户数占总好账户数比率(累计good%)和累计坏账户数占总坏账户数比率(累计bad%)。
3. 按照累计好账户占比和累计坏账户占比得出下图所示曲线ADC。
4. 计算出图中阴影部分面积,阴影面积占直角三角形ABC面积的百分比,即为GINI系数
D的面积可以看成是n个等高的梯形面积。GINI=(1/2 - n个梯形的面积)/(1/2)
假设高等于h=1/10,X轴数据按照从小到大排序,进行10等分,则GINI=1-1/10(2(x1+x2+……+x9+1))
评估指标 — Psi稳定性
公式: psi = sum((实际占比-预期占比)* ln(实际占比/预期占比))
一般认为psi小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做。
除了按概率值大小等距十等分外,还可以对概率排序后按数量十等分,两种方法计算得到的psi可能有所区别但数值相差不大。
过拟合与欠拟合
一方面,如果一个模型完全适应其训练数据,但是在训练数据外的数据集上却不能很好的拟合数据,那么它将会过度拟合。
出现这种情况时我们则需要采取一些措施,如:
- 增加训练数据可以有限的避免过拟合。
- 减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间。
- 交叉检验,通过交叉检验得到较优的模型参数。
- 正则化(即保留特征,但是减小特征变量的数量级)。
另一方面,如果模型在训练集表现差,不必说在测试集表现也会同样会很差,这可能是欠拟合导致。 出现这种情况时我们则需要采取一些措施,如:
- 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间;
- 尝试非线性模型,比如核SVM 等模型;
参考:
http://www.cdadata.com/data/roc%e6%9b%b2%e7%ba%bf
http://www.cnblogs.com/ooon/p/5715918.html
更多推荐
所有评论(0)