Confusion Matrix, 混淆矩阵  

一个完美的分类模型就是,如果一个客户实际上(Actual)属于类别good,也预测成(Predicted)good,处于类别bad,也就预测成bad。但从上面我们看到,一些实际上是good的客户,根据我们的模型,却预测他为bad,对一些原本是bad的客户,却预测他为good。我们需要知道,这个模型到底预测对了多少,预测错了多少,混淆矩阵就把所有这些信息,都归到一个表里:

        预测1 0
实   1   d, True Positive    c, False Negative   c+d, Actual Positive
际   0   b, False Positive   a, True Negative    a+b, Actual Negativeb+d, Predicted Positive   a+c, Predicted Negative

其中,

  1. a是正确预测到的负例的数量, True Negative(TN,0->0)
  2. b是把负例预测成正例的数量, False Positive(FP, 0->1)
  3. c是把正例预测成负例的数量, False Negative(FN, 1->0)
  4. d是正确预测到的正例的数量, True Positive(TP, 1->1)
  5. a+b是实际上负例的数量,Actual Negative
  6. c+d是实际上正例的个数,Actual Positive
  7. a+c是预测的负例个数,Predicted Negative
  8. b+d是预测的正例个数,Predicted Positive

以上似乎一下子引入了许多概念,其实不必像咋一看那么复杂,有必要过一下这里的概念。实际的数据中,客户有两种可能{good, bad},模型预测同样这两种可能,可能匹配可能不匹配。匹配的好说,0->0(读作,实际是Negative,预测成Negative),或者 1->1(读作,实际是Positive,预测成Positive),这就是True Negative(其中Negative是指预测成Negative)和True Positive(其中Positive是指预测成Positive)的情况。

同样,犯错也有两种情况。实际是Positive,预测成Negative (1->0) ,这就是False Negative;实际是Negative,预测成Positive (0->1) ,这就是False Positive;

我们可以通过SAS的proc freq得到以上数字:

proc freq data=valid_p;
tables good_bad*good_bad_predicted/nopercent nocol norow;
run;

对照上表,结果如下:

   预测1                          0
实   1,bad   d, True Positive,48       c, False Negative,98  c+d, Actual Positive,146
际   0,good  b, False Positive,25          a, True Negative,229  a+b, Actual Negative,254b+d, Predicted Positive,7     a+c, Predicted Negative,327    400

根据上表,以下就有几组常用的评估指标(每个指标分中英文两行):

1. 准确(分类)率VS.误分类率

准确(分类)率=正确预测的正反例数/总数

Accuracy=true positive and true negative/total cases= a+d/a+b+c+d=(48+229)/(48+98+25+229)=69.25%

误分类率=错误预测的正反例数/总数

Error rate=false positive and false negative/total cases=b+c/a+b+c+d=1-Accuracy=30.75%

2. (正例的)覆盖率VS. (正例的)命中率

覆盖率=正确预测到的正例数/实际正例总数,

Recall(True Positive Rate,or Sensitivity)=true positive/total actual positive=d/c+d=48/(48+98)=32.88%

/*注:覆盖率(Recall)这个词比较直观,在数据挖掘领域常用。因为感兴趣的是正例(positive),比如在信用卡欺诈建模中,我们感兴趣的是有高欺诈倾向的客户,那么我们最高兴看到的就是,用模型正确预测出来的欺诈客户(True Positive)cover到了大多数的实际上的欺诈客户,覆盖率,自然就是一个非常重要的指标。这个覆盖率又称Sensitivity, 这是生物统计学里的标准词汇,SAS系统也接受了(谁有直观解释?)。 以后提到这个概念,就表示为, Sensitivity(覆盖率,True Positive Rate)。 */

命中率=正确预测到的正例数/预测正例总数

Precision(Positive Predicted Value,PV+)=true positive/ total predicted positive=d/b+d=48/(48+25)=65.75%

/*注:这是一个跟覆盖率相对应的指标。对所有的客户,你的模型预测,有b+d个正例,其实只有其中的d个才击中了目标(命中率)。在数据库营销里,你预测到b+d个客户是正例,就给他们邮寄传单发邮件,但只有其中d个会给你反馈(这d个客户才是真正会响应的正例),这样,命中率就是一个非常有价值的指标。 以后提到这个概念,就表示为PV+(命中率,Positive Predicted Value)*。/

3.Specificity VS. PV-

负例的覆盖率=正确预测到的负例个数/实际负例总数

Specificity(True Negative Rate)=true negative/total actual negative=a/a+b=229/(25+229)=90.16%

/*注:Specificity跟Sensitivity(覆盖率,True Positive Rate)类似,或者可以称为“负例的覆盖率”,也是生物统计用语。以后提到这个概念,就表示为Specificity(负例的覆盖率,True Negative Rate) 。*/

负例的命中率=正确预测到的负例个数/预测负例总数

Negative predicted value(PV-)=true negative/total predicted negative=a/a+c=229/(98+229)=70.03%

/*注:PV-跟PV+(命中率,Positive Predicted value)类似,或者可以称为“负例的命中率”。 以后提到这个概念,就表示为PV-(负例的命中率,Negative Predicted Value)。*/

以上6个指标,可以方便地由上面的提到的proc freq得到:

proc freq data=valid_p;tables good_bad*good_bad_predicted ;run;

其中,准确率=12.00%+57.25%=69.25% ,覆盖率=32.88% ,命中率=65.75% ,Specificity=90.16%,PV-=70.03% 。

或者,我们可以通过SAS logistic回归的打分程序(score)得到一系列的Sensitivity和Specificity,

proc logistic data=train;model good_bad=checking history duration savings property;score data=valid outroc=valid_roc;run;

数据valid_roc中有几个我们感兴趣的变量:

  • _PROB_:阈值,比如以上我们选定的0.5
  • _SENSIT_:sensitivity(覆盖率,true positive rate)
  • _1MSPEC_ :1-Specificity,为什么提供1-Specificity而不是Specificity,下文有讲究。
_PROB_ _SENSIT_ _1MSPEC_0.54866 0.26712 0.070870.54390 0.27397 0.078740.53939 0.28767 0.086610.52937 0.30137 0.090550.51633 0.31507 0.094490.50583 0.32877 0.098430.48368 0.36301 0.102360.47445 0.36986 0.10630

如果阈值选定为0.50583,sensitivity(覆盖率,true positive rate)就为0.32877,Specificity就是1-0.098425=0.901575,与以上我们通过列联表计算出来的差不多(阈值0.5)。

转:Confusion Matrix(混淆矩阵) 解释最全的一个相关推荐

  1. 模型评价(一) AUC大法 混淆矩阵

    题记: 都说混淆矩阵易混淆,哈哈,下面就来试着尝试一下,看能不能帮助你更好的 理解混淆矩阵,以及 AUC 大法. 问题: AUC是什么 AUC能拿来干什么 AUC如何求解(深入理解AUC) AUC是什 ...

  2. 分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵

    跑完分类模型(Logistic回归.决策树.神经网络等),我们经常面对一大堆模型评估的报表和指标,如Confusion Matrix.ROC.Lift.Gini.K-S之类(这个单子可以列很长),往往 ...

  3. 评估指标:混淆矩阵、PR、mAP、ROC、AUC

    文章目录 TP.TN.FP.FN 准确率 Accuracy 和 错误率 Error rate 混淆矩阵 confusion matrix 查准率 Precision 和 召回率 Recall PR 曲 ...

  4. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...

    深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...

  5. TP/FN/FP/TN(符号含义)与confusion matrix

    TP(True Positive):将正类预测为正类(的数目),真实为0,预测也为0; FN(False Negative):将正类预测为负类(的数目),真实为0,预测为1; FP(False Pos ...

  6. Python混淆矩阵(confusion_matrix)FP、FN、TP、TN、ROC,FROC,精确率(Precision),召回率(Recall),准确率(Accuracy),F1分数详述与实现

    目录 一.FP.FN.TP.TN 二.准确率(Accuracy).精确率(Precision).召回率(Recall).F1score 2.1.准确率(Accuracy) 2.2.召回率(Recall ...

  7. python 混淆矩阵_绘制混沌矩阵

    python因为有各种库的支持,所以功能格外强大.在可视化方面,目前用得较多的是matplotlib.在基于matplotlib.pyplot画带色标(colorbar)的图时候,往往为了美观和科研用 ...

  8. 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵

    机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...

  9. 机器学习模型评价指标 -- 混淆矩阵

    机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...

  10. python绘制混淆矩阵_使用python matplotlib绘制混淆矩阵

    使用python matplotlib绘制混淆矩阵 今天使用了python matplotlib包,绘制混淆矩阵.基本代码参考官网教程,在此基础上增加了格网显示. 代码说明: cm - 混淆矩阵的数值 ...

最新文章

  1. XINGNET交换机病毒防范
  2. mysql 5.7和8.0区别_前沿观察 | MySQL性能基准测试对比:5.7 VS 8.0
  3. 调查|73%的公司正使用存在漏洞的超期服役设备
  4. [css] 使用css3实现一个斑马线的效果
  5. 秒懂系列 | 史上最简单的Python Django入门教程
  6. python文字游戏源代码妈妈和我年纪_Python实现猜年龄游戏代码实例
  7. ModelSim6.3 使用教程By Sunev
  8. TensorFlow使用--MNIST分类学习(BP神经网络)
  9. 二十一天学通Java:调用对象为null值的引用
  10. wxpython画表格代码
  11. 常见问题_朗动常见问题
  12. c++运动学正反解 ros_MoveIt编程实现关节空间机械臂运动(正运动学)
  13. 计算机共享文件输入网络密码是什么,Win7共享文件时需要输入网络密码怎么办?...
  14. 嗅觉AI:为减少食物浪费出点力
  15. 周期性的方波 matlab,matlab产生方波脉冲和周期性方波信号 - 副本
  16. 中国凝油锅炉市场趋势报告、技术动态创新及市场预测
  17. USB-C PD接口DRP芯片功能介绍
  18. Windows下如何清除文件资源管理器搜索框中的搜索记录?
  19. 项目使用Spring Cloud做配置管理
  20. karma测试html,常用的前端自动化测试工具介绍 —— Karma(二)

热门文章

  1. 在VSAN实验环境下如何将普通HDD标注成SSD
  2. 【分治】寻找主元素的3种算法
  3. JAVA System.getProperty()参数
  4. 天涯社区用到的日历函数
  5. python实例 输出你好
  6. CodeForces 518E Arthur and Questions(贪心 + 思维)题解
  7. jieba库初识与运用
  8. 去除ios手机端input输入框上方有阴影
  9. XHTML中button加入超链接以及使插入图片与屏幕一样大
  10. 关于实现servlet中心控制的Front Controller Pattern