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

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 Negative
		b+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,254
		b+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.07087

0.54390 0.27397 0.07874

0.53939 0.28767 0.08661

0.52937 0.30137 0.09055

0.51633 0.31507 0.09449

0.50583 0.32877 0.09843

0.48368 0.36301 0.10236

0.47445 0.36986 0.10630

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

你可能感兴趣的:(PYTHON_机器学习)