美文网首页
数据分析-评估指标(F1score和ROC曲线)

数据分析-评估指标(F1score和ROC曲线)

作者: feng_zhenrong | 来源:发表于2020-05-08 00:46 被阅读0次

    这里我介绍数据分析的两个评估指标,F1 scoreROC曲线,在介绍F1 score跟ROC曲线之前,我们要先了解以下概念:

    • 混淆矩阵
    • 准确率
    • 精准率
    • 召回率

    混淆矩阵

    什么是混淆矩阵,我们来看下图:


    i混淆矩阵

    注意,在上图中,蓝点是阳性,红点是阴性。
    一般从医学角度说,阳性(positive),代表有病或者有病毒,阴性(negative),代表正常。

    • 真阳性(true positive)是指确定有病或者有病毒,
    • 真阴性(true negative)是指确定正常,
    • 假阳性(false positive)是指因为种种原因把不具备阳性症状的人检测出阳性的结果。其实就是将没病的检查成有病的,假阳性检测结果易造成误诊,
    • 假阴性(false negative)就是将有病的检查为没病,假阴性结果导致漏诊。

    我们来上述模型有多少真阳性、真阴性、假阳性、假阴性?



    上图,这就是混淆矩阵。

    准确率

    下面我们来学习衡量模型性能的一种方式,准确率。
    准确率是什么?我们继续引用上面的图片


    准确率就是在图表所有数据里,正确分类的点有多少,就是正确分类的点和总点数的比例;数学公式就是准确率=正确分类的点/总点数。
    上图中,正确分类=真阳性(6)+ 真阴性(5)= 11;总点数为14

    上图的准确率=11/14=0.7857

    精准率

    在了解精准率之前,我们来看看下面的医学预测图:


    医学模型的混淆矩阵

    精准率的定义就是在所有预测阳性的点里有多少是真阳性?换种说法就是在所有诊断为病人中,有多少是真正的病人?

    在图中可以看出,精准率都在Diagnosed sick 这一列


    这一列都是诊断为阳性的数据。真阳性的数量是1000,所有阳性的数量是1000+800=1800;

    所以精准率(precision) = 1000/1800=55.6%

    那下图的精准率呢?


    精准率=6/8=75%

    召回率

    精准率是在所有预测所有诊断为病人中,有多少是真正的病人,召回率是在所有真正病人中,有多少是成功诊断为病人。召回率这里所有真正的病人是真阳性(true positive)跟 假阴性(false negative)的和,因为假阴性(false negative)是是将有病的检查为没病也是病人。

    所以召回率是统计sick 这一行


    这一列都是诊断为阳性的数据。真阳性的数量是1000,所有病人的数量是是真阳性(true positive)跟 假阴性(false negative)的和,1000+200=1200;

    所以召回率(recall) = 1000/1200=83.3%

    那下图的召回率呢?


    召回率(recall) =6/7=85.7%

    F1 score

    在上面我们已经学习了精准率(precision) 跟召回率(recall) 了,从上面我们知道医疗模型的精准率(precision) 55.6%,召回率(recall) 是 83.3%,这是个高召回率模型(如果精准率(precision) 高,召回率(recall) 低那就是高精准率模型)。

    现在问题是,这里有两个指标,我们每次判断模型是高精准率模型还是高召回率模型都要使用这个两个指标来判断么,这样很不方便,有没有一个指标就可以直接判断出来,这个指标就是F1 score。

    问题是我们怎么把这个两个分数合并在一起呢?你能想出方法来么,有个简单的方式就是取精准率(precision) 跟召回率(recall) 这个两个数的平均值,我们可以得到平均值(55.6%+83.3%)/2=69.45%,这是一个可以接受的指标,但是取平均值没有给我们提供更多的信息,我们来在一个极端的例子来检验平均值;

    比如以信用卡欺诈检测为例,图中我们有很多正常和欺诈的交易



    从图中可以算出,欺诈交易比例=472/(472+284335)=0.16%。

    • 如果我们定义一个极端的模型,所有交易都是好的。



      我们使用混淆矩阵来分析它,上面《全部交易都是好的》极端模型有真阳性(0)、真阴性(284335)、假阳性(0)、假阴性(472)
      该模型的精准率(precision)是就是所有我们判断为欺诈行为里面有多少真正的欺诈交易,因为我们定义所有交易都是正常的,所以我们没有发现任何欺诈交易,
      所以精准率(precision)=0/0,因为0不能相除,我们可以认为精准率(precision)是100%,召回率(recall) 就是真正的欺诈交易里,有多少我们成功判断为欺诈行为,
      所以召回率(recall)=0/472=0%。
      如果是取平均值作为指标来判断的话,这里平均值就是50%;
      在这样极端模型里面使用50%来判断欺诈交易分数太高了,我们应该给一个更低的分数,甚至是零分,所以使用平均值作为指标不合理;

    • 我们来再定义一个相反的极端模型,所有交易都是欺诈交易


    我们使用混淆矩阵来分析它,上面《全部交易都是欺诈交易》极端模型有真阳性(472)、真阴性(0)、假阳性(284335)、假阴性(0)
    该模型的精准率(precision)是就是所有我们判断为欺诈行为里面有多少真正的欺诈交易,因为我们定义所有交易都是欺诈交易,所以精准率(precision)=472/(472+284335)=0.16%,召回率(recall) 就是真正的欺诈交易里,有多少我们成功判断为欺诈行为,所以召回率(recall)=472/472=100%。

    如果是取平均值作为指标来判断的话,这里平均值就是50.08%;
    在这个极端模型里面使用50.08%来判断欺诈交易分数还是太高了,我们应该给一个更低的分数,甚至是零分,所以取平均值作为指标不是最好的方法。

    原则上如果精准率(precision)和召回率(recall)有一个值非常低,即使另一个指标非常高,我们也想给它一个低分,这里有一个解决方案,就是调和平均值
    它的工作原理如下:
    假设我们有两个值:x,y,x比y小,中间的值就是平均值,比平均值小的就是调和平均值,调和平均值总是小于平均值,如果两个x和y值相等,调和平均值就是平均值。调和平均值比较接近较小的数值,而不是较大的数值。所以调和平均值总是接近精准率(precision)和召回率(recall)之中的最小值。

    F1 得分练习
    接下来,请记住 F1 得分的公式为:


    F1 score

    ​F-β score

    注意,在 F-β 得分公式中,如果设β=0, 则



    因此, β 的最低值为 0,这时候就得出高精准率。

    注意,如果 N 非常大,则



    随着 Nˉ2 变成无穷大,可以看出,1/1+Nˉ2 变成 0,并且Nˉ2/1+Nˉ2会变成 1,
    因此,如果取极限值,则



    这时候就得出高召回率。

    因此,得出结论:β 的界限在 0 和 无穷大∞ 之间。

    • 如果 β=0, 则得出精度。
    • 如果 β=∞, 则得出召回率。
    • 对于 other values of β, 的其他值,如果接近 0,则得出接近精度的值,如果很大,则得出接近召回率的值,如果 β=1, 则得出精度和召回率的调和平均值(F1 score)

    练习:
    在下面的三个模型中,哪个的 F-β 得分应该是 2、1 和 0.5?每个模型的相应的得分应该是多少?

    • 检测宇宙飞船的故障零件
    • 向手机中发送关于用户可能喜欢的视频的通知
    • 向潜在客户寄送免费样品

    答案是宇宙飞船的β 值是2,手机通知是1,免费样品是0.5

    解答:对于宇宙飞船,我们不允许出现任何故障零件,可以检查本身能正常运转的零件。因此,这是一个高召回率模型,因此 β = 2。
    对于通知模型,因为是免费发送给客户,如果向更多的用户发送邮件也无害。但是也不能太过了,因为可能会惹怒用户。我们还希望找到尽可能多感兴趣的用户。因此,这个模型应该具有合适的精度和合适的召回率。β = 1 应该可行。
    对于免费样品模型,因为寄送样品需要成本,我们不希望向不感兴趣的用户寄送样品。因此是个高精度模型。β = 0.5 应该可行。

    ROC曲线

    在了解ROC曲线是怎么形成的,ROC将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴,根据多种划分方式,得到一组(x,y)轴数据来组成的曲线, 我们来看下图,假设红蓝点都在一条线上,我们怎么划分它们呢,可以有很多中划分,比如图中红色划线的5种划分方式;


    现在我们来说一下它们的伪阳性率(FPR)跟真阳性率(TPR)是多少?
    首先我们来看最左边的划线,算一下(x,y)的值是多少
    伪阳性率(flase positive rate)= false positives/ all negatives = 7/7=1;
    真阳性率(true positive rate)= true positives/ all positives = 7/7=1;

    然后我们来看最右边的划线,算一下(x,y)的值是多少
    伪阳性率(flase positive rate)= false positives/ all negatives = 0/7=0;
    真阳性率(true positive rate)= true positives/ all positives = 0/7=0;

    从中可以看出,不管数据极端怎么变好,计算的坐标值都是在(0, 0) 到 (1,1) 的之间;

    我们来看一下中间那条线的划分的(x,y)的值是多少
    伪阳性率(flase positive rate)= false positives/ all negatives = 2/7=0。286;
    真阳性率(true positive rate)= true positives/ all positives = 6/7=0.857;

    你们可以移动该线条,计算不同的(x,y)的值,这里我就不一一计算了,计算出来的(x,y)数组,就可以画出ROC曲线。



    从图中数据,我们可以计算ROC曲线的面积大概是area = 0.8;
    不用的模型画出的ROC曲线不同,大概有下图的三种不同模型的ROC曲线;


    不同模型的ROC曲线

    第一种是随机划分的模型,第二种是比较好的划分模型,第三种是完美划分模型,随机划分的模型ROC曲线面积大概接近0.5,比较好的划分模型ROC曲线面积大概接近0.8,完美划分模型ROC曲线面积大概接近1,总的来说,ROC曲线面积越来越接近1,模型就越好。

    相关文章

      网友评论

          本文标题:数据分析-评估指标(F1score和ROC曲线)

          本文链接:https://www.haomeiwen.com/subject/mwpzghtx.html