使用混淆矩阵对分类模型进行评估-Confusion matrix

我们在前面的文章中介绍过很多分类算法,如决策树,朴素贝叶斯,逻辑回归等。通过这些算法获得的模型表现如何?能否准确的对数据进行分类和预测?本篇文章我们介绍一种对分类模型进行效果评估的方法:混淆矩阵(Confusion matrix)。

Multi-Ethnic Group of People and Evaluation Concept
混淆矩阵是对有监督学习分类算法准确率进行评估的工具。通过将模型预测的数据与测试数据进行对比,使用准确率,覆盖率和命中率等指标对模型的分类效果进行度量。

我们通过一个示例来说明混淆矩阵的使用方法,下面是一组用户贷款信息的数据,其中包括用户的城市,性别,来源渠道等信息,以及用户最终是否还款。我们使用逻辑回归算法通过这组数据对新用户是否还款进行分类预测,并使用混沌矩阵对预测模型的准确率进行评估。

首先我们将用户贷款信息的数据分为两组,第一组为训练集,占所有数据的70%,我们通过训练集的数据计算参数并生成模型。第二组数据为测试集,占所有数据的30%。我们使用测试集的数据对模型的分类结果进行测试,并使用混淆矩阵对测试结果进行评估。由于本篇文章的重点是介绍混淆矩阵,因此算法方面的内容只会简单介绍。详细方法和步骤请参考之前的文章。

原始数据
在使用训练集数据生成逻辑回归模型之前,我们先使用“互信息”计算出贷款数据中每个类别与最终还款结果的相关度。具体的计算方法请参考之前的文章《决策树分类和预测算法的原理及实现》。通过下面表中的“互信息”数据排名可以发现,金额和年龄类别与用户最终是否还款相关度较高。因此我们使用金额和年龄两个类别来生成模型。

互信息
通过对数据进行清洗和整理,我们获得了下面这个表,其中包含年龄,金额和用户最终是否还款的状态信息。0代表用户已还款,1代表用户未还款。

选择类别
对上面的数据使用逻辑回归算法,获得下面的分类模型。具体计算方法和步骤请参考之前的文章《逻辑回归算法的原理及实现(LR)》以下是逻辑回归模型。

逻辑回归模型
将变量替换为用户还款预测的场景中,就是下面的这个模型。接下来,我们将使用这个模型对测试集数据的状态(未还款)进行分类预测,并将分类预测的结果与测试集数据中真实的状态进行对比。使用混淆模型对模型预测的效果进行评估。

逻辑回归模型1

首先我们列出测试集中的状态,就是下表中的历史数据。其中显示了每个用户的还款状态。然后,我们根据逻辑回归模型和测试集中的金额和年龄信息计算出每一条数据未还款的概率。并根据概率值判断模型的预测结果,也就是这条数据最终是否还款。由于我们将未还款标记为1,因此概率值越高表示此条数据属于未还款的概率越高。这里我们使用P=0.5作为判断还款状态的依据。因为0.5是一个中间值,对两种结果都没有任何的倾向性。不过这里需要说明的是P=0.5这个值是可以依据实际情况手动进行调整的。在P=0.5的情况下,下表中模型概率大于0.5的数据被分类为未还款。

模型预测结果

完成对模型预测结果的分类后,我们使用混淆矩阵对预测的结果进行评估。下表是混淆矩阵,其中列是历史数据,也就是测试集。行是模型预测,也就是根据预测概率的分类结果。历史数据和模型预测都分为Positive(正)和Negative(负)两类。模型的准确率数据就是根据Positive(正)和Negative(负)相互交叉的4组数据计算得出。下面我们将分别介绍混淆矩阵中每一个数据的含有和计算方法。

混淆矩阵含义
Positive表示我们感兴趣的值,也就是为1的值。Negative表示另外一个值,为0的值。历史数据中Positive表示为1的值,对于前面示例来说就是测试集中的未还款。Negative则表示已还款。模型预测中的Positive表示通过预测分类为未还款,Negative表示已还款。

  • True Positive简称TP,表示测试集中是Positive,模型预测结果是Positive的数据条目。
  • False Positive简称FP,表示测试集中是Negative,模型预测结果是Positive的数据条目。
  • False Negative简称FN,表示测试集中是Positive,模型预测结果是Negative的数据条目。
  • True Negative简称TN,表示测试集中是Negative,模型预测结果是Negative的数据条目。
  • Sensitivity又称为Recall,简称TPR,表示模型正确预测Positive在测试集中所有Positive的比率。
  • Specificity简称SPC,表示模型正确预测Negative在测试集中所有Negative的比率。
  • Positive Predictive Value简称PPV,表示模型正确识别Positive的比率。
  • NegativePredictive Value简称NPV,表示模型正确识别Negative的比率。
  • Accuracy简称ACC,表示模型正确预测Positive和Negative的比率。

混淆矩阵套入示例
将混淆矩阵代入到我们的模型预测场景中,Positive对应的是未还款,也就是我们标记为1的状态。Negative对应的是已还款,标记为0的状态。历史数据的Positive表示测试集中的未还款数据,Negative表示已还款数据。模型预测中的Positive表示模型预测为已还款的数据,Negative表示为模型预测为已还款的数据。

  • True Positive简称TP,表示测试集中是未还款,模型预测结果是未还款的数据条目。
  • False Positive简称FP,表示测试集中是已还款,模型预测结果却是未还款的数据条目。这里犯了第一类错误“取伪”。
  • False Negative简称FN,表示测试集中是未还款,模型预测结果却是已还款的数据条目。这里犯了第二类错误”弃真”。
  • True Negative简称TN,表示测试集中是已还款,模型预测结果是已还款的数据条目。
  • Sensitivity又称为Recall,简称TPR,表示模型正确预测未还款在测试集中所有未还款的比率。
  • Specificity简称SPC,表示模型正确预测已还款在测试集中所有已还款的比率。
  • Positive Predictive Value简称PPV,表示模型正确识别未还款的比率。
  • NegativePredictive Value简称NPV,表示模型正确识别已还款的比率。
  • Accuracy简称ACC,表示模型正确预测未还款和已还款的比率。

为了方便计算和说明计算过程,我们使用a,b,c,d来代替TP,FP,FN和TN。以下为简化后的混淆矩阵,及指标的计算方法。下面我们分别说明每个指标的计算公式。

混淆矩阵简化

准确率
准确率是模型正确预测未还款(Positive)和已还款(Negative)条目的比率,在P值=0.5的情况下,如果测试集的状态是未还款(Positive),模型也预测是未还款(Positive)(P>0.5)则说明模型对这条数据的预测是正确的。已还款(Negative)数据也是同理。模型对未还款(Positive)和已还款(Negative)预测正确的数量与所有预测条目的比率就是准确率。以下为具体的计算公式。

预测准确率公式ACC

误分类率
误分类率与准确率正好相反,是指模型错误预测未还款(Positive)和已还款(Negative)条目的比率,在P值=0.5的情况下,如果测试集的状态是未还款(Positive),模型预测是已还款(p<0.5)则说明模型对这条数据的预测是错误的。已还款(Negative)数据也是同理。模型对未还款(Positive)和已还款预(Negative)测错误的数量与所有预测条目的比率就是误分类率。还有一种计算方法就是1-准确率。以下为具体的计算公式。

预测错误率公式

命中率
命中率是模型预测的正确未还款(Positive)数量与模型预测的未还款(Positive)总量的比率。例如在P值=0.5的情况下,模型一共预测了100个未还款(Positive)条目,其中65个在测试集中是未还款(Positive)状态,另外35个在测试集中是已还款(Negative)状态。那么覆盖率就是65/(65+35)=65%。

命中率公式PPV

负例命中率
负例命中率是模型预测的正确已还款(Negative)数量与模型预测的已还款(Negative)总量的比率。例如在P值=0.5的情况下,模型一共预测了100个已还款(Negative)条目,其中75个在测试集中是已还款(Negative)状态,另外25个在测试集中是未还款(Positive)状态。那么负例覆盖率就是75/(75+25)=75%.

负例命中率公式NPV

覆盖率
覆盖率是模型预测的正确未还款(Positive)数量与测试集中未还款(Positive)总数的比率。简单的说就是模型的预测结果覆盖真实情况的比率。例如在P值=0.5的情况下,模型一共预测了55个未还款(Positive)条目,而测试集中一共有100个未还款(Positive)条目,55个被模型正确预测,45个没有被模型正确预测,那么覆盖率就是55/(45+55)=55%

覆盖率公式TRR

负例覆盖率
负例覆盖率与覆盖率类似,是指模型预测的正确已还款(Negative)数量与测试集中已还款(Negative)总数的比率。例如在P值=0.5的情况下,模型一共预测了45个已还款条目,而测试集中一共有100个已还款条目,45个被模型正确预测,55个没有被模型正确预测,那么负例覆盖率就是45/(45+55)=45%

负例覆盖率公式SPC

在了解了混淆模型中的指标含义及计算方法后,我们对用户还款模型的预测效果进行评估。在P值=0.5的情况下,所有大于0.5的值被标记为未还款。通过与训练集中的历史数据进行对比,所有预测数据被分为a,b,c,d四类。

第一条数据历史数据为未还款(Positive),模型预测为未还款(Positive),属于a类。
第二条数据历史数据为已还款(Negative),模型预测为已还款(Negative),属于d类。
第三条数据历史数据为未还款(Positive),模型预测为已还款(Negative),属于c类。
… …

混淆矩阵0.5

对所有历史数据和模型预测结果进行对比和分类后,我们获得了混淆矩阵的数据表。在P值=0.5的前提下,覆盖率为0.55,说明所有真实的未还款数据中有55%被模型正确预测,负例覆盖率为0.97,说明所有真实的已还款数据中有97%被正确预测。命中率0.79,说明模型预测的所有未还款数据中有79%是正确的。负例命中率是0.91,说明模型预测的所有已还款数据中有91%是正确的。模型对于未还款和已还款的整体预测准确率为0.90。

混淆矩阵2
单从模型整体准确率来看90%是个不错的结果。但我们的感兴趣的是那些未还款的用户,也就是说我们希望预测出哪些用户最终不会还款。从这个角度来看,测试集中所有真实的未还款数据只有0.55被模型准确预测出来。覆盖率仅为55%,这个结果并不能让人满意。同时模型做出的所有未还款预测中命中率79%也并不高。模型还需要进一步调整和优化。

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

Speak Your Mind

*