如何评估模型好坏
介绍
“所有模型都是坏的,但有些模型是有用的”。我们建立模型之后,接下来就要去评估模型,确定这个模型是否‘有用’。当你费尽全力去建立完模型后,你会发现仅仅就是一些单个的数值或单个的曲线去告诉你你的模型到底是否能够派上用场。
在实际情况中,我们会用不同的度量去评估我们的模型,而度量的选择,完全取决于模型的类型和模型以后要做的事。下面我们就会学习到一些用于评价模型的常用度量和图表以及它们各自的使用场景。
内容
预测模型的类型
分类模型评价度量
混淆矩阵(Confusion Matrix)
ROC曲线
AUC(ROC曲线下面积)
Lift(提升)和Gain(增益)
K-S图
基尼系数
预测模型的类型
当说到预测模型时,我们会想到有回归模型和分类模型。用于评价这两种模型的度量是不相同的。我们首先要说的是分类问题。
在分类问题中,我们用两种算法:分类输出型:算法像支持向量机和KNN那样,输出的是分类型数据。例如一个二分类问题,它的输出不是0就是1。概率输出型:这个有逻辑回归、随机森林、梯度提升、Adaboost等算法,都是以概率作为输出的。要想把概率型输出变为分类型输出,只要为其设立一个阈值即可。
分类模型评价度量
混淆矩阵(Confusion Matrix)
判定方法:根据不同的模型选不同的参数。
原理:混淆矩阵是一个N X N矩阵,N为分类的个数。假如我们面对的是一个二分类问题,也就是N=2,我们就得到一个2 X 2矩阵。在学习这个矩阵之前,我们需要知道一些简单的定义。(个人不喜欢这部分的中文翻译,一直是保留英文)
Accuracy(准确度):预测正确的数占所有数的比例。
Positive Predictive Value(阳性预测值) or Precision(精度):阳性预测值被预测正确的比例。
Negative Predictive Value(阴性预测值):阴性预测值被预测正确的比例。
Sensity(灵敏度) or recall(召回率):在阳性值中实际被预测正确所占的比例。
Specificity(特异度):在阴性值中实现被预测正确所占的比例。
若我们得到一个模型的混淆矩阵如下:
我们可以看出,这个模型的准确度为88%,阳性预测值比较高而阴性预测值较低。对于灵敏度和特异度也是相同。这是因为我们选的阈值而导致的,若我们降低阈值,这两对数值就会变的相近。一般的情况下,我们只关心其中的一个定义度量。例如,在医药公司,一般会更加关心最小化误诊率,也就是他们需要的是高特异度。而在磨损模型中我们更关心的是灵敏度。可以看出混淆模型一般只能用于分类输出型模型中。
ROC曲线
判定方法:ROC曲线应尽量偏离参考线。
原理:ROC全称为Receiver Operation Characteristic Curve,中文名叫做‘接受者操作特征曲线’,中文名简直就是直翻。ROC曲线其实就是从混淆矩阵衍生出来的图形,其横坐标为1-Specificity,纵坐标为Sensitivity。
上面那条曲线就是ROC曲线,随着阈值的减小,更多的值归于正类,敏感度和1-特异度也相应增加,所以ROC曲线呈递增趋势。而那条45度线是一条参照线,也就是说ROC曲线要与这条曲线比较。
简单的说,如果我们不用模型,直接随机把客户分类,我们得到的曲线就是那条参照线,然而我们使用了模型进行预测,就应该比随机的要好,所以ROC曲线要尽量远离参照线,越远,我们的模型预测效果越好。
AUC(ROC曲线下面积)
判定方法:AUC应该大于0.5.
原理:ROC曲线是根据与那条参照线进行比较来判断模型的好坏,但这只是一种直觉上的定性分析,如果我们需要精确一些,就要用到AUC,也就是ROC曲线下面积。
看上图,参考线的面积是0.5,ROC曲线与它偏离越大,ROC曲线就越往左上方靠拢,它下面的面积(AUC)也就越大,这里面积是0.869。我们可以根据AUC的值与0.5相比,来评估一个分类模型的预测效果。
Lift(提升)和Gain(增益)
判定方法:lift应一直大于1.
原理:Lift=(d/b+d)/(c+d/a+b+c+d).它衡量的是,与不用模型相比,模型的预测能力提升了多少。不利用模型,我们只能利用正例的比例‘c+d/a+b+c+d’这个样本信息来估计正例的比例(baseline model),而利用模型之后,只需要从我们预测为正例的那个样本的子集(b+d)中挑选正例,这时预测的准确率为d/b+d.
由此可见,lift(提升指数)越大,模型的预测效果越好。如果这个模型的预测能力跟baseline model一样,那么这个模型就没有任何意义。
一个好的分类模型,就是要偏离baseline model足够远。在lift图中,表现就是,在depth为1之前,lift一直保持较高的(大于1的)数值,也即曲线足够陡峭。
Gain与Lift相当类似,Gain chart是不同阈值下d/b+d的轨迹,与Lift的区别就在于纵轴刻度的不同。
K-S图
判定方法:其值在0到100之间,值越大,模型表现越好。
原理:K-S图,英文为Kolmogorov-Smirnov chart,是用来评估分类模型表现的图。更准确的来说,K-S是用来度量阳性与阴性分类区分程度的。若我们把总体严格按照阳性和阴性分成两组,则K-S值为100,如果我们是随机区分阳性与阴性,则K-S值为0.所以分类模型的K-S值都在0到100之间,值越大,模型从阴性数据中区分阳性数据的能力越强。
基尼系数
判定方法:基尼系数应大于60%,就算好模型。
原理:基尼系数经常用于分类问题,其可以直接从AUC中得到。其公式为:
Gini = 2*AUC - 1
结束语
就在刚才,我问了一下已经工作了的前辈,他跟我说这些度量中一般用到的是混淆矩阵中的精确度,准确度和召回率。知识有这么多,实践中我们该如何选择,这又是另一门学问了。
参考
http://cos.name/2009/02/measure-classification-model-performance-lift-gain/
http://www.analyticsvidhya.com/blog/2015/01/model-performance-metrics-classification/