算法工程师除了准确率(Accuracy)之外,经常会用F1值(F1 Score)评判模型的优劣。虽然F1值好用,但解释起来颇为困难。翻阅了网上很多介绍F1值的文章,大部分只会介绍F1 值是怎么计算的,而很少从业务角度介绍F1值,所以整理这篇文章,作为备忘。
首先,什么是模型的准确率?以二元分类模型为例,模型对10个样本进行推理,每次推理的结果要么正确要么错误,准确率就是正确推理的样本数所占百分比,如果只出现1次错误就是90%,出现2次错误就是80%,以此类推。
事实上准确率存在一个问题,不管什么类型的样本,推理错误都一样对待,统计比较粗糙,而F1值就不一样,它会把错误和正确根据样本的不同再细分,考虑问题更细致全面。我们假设做一个模型来玩扫雷游戏,扫雷游戏的规则是雷区判断错误游戏马上结束,但在安全区标雷区游戏还能继续。
每一个推理错误,F1值会统计是雷区的错误还是安全区的错误,而模型准确率(Accuay)只统计错误的数量而不管是不是碰了雷区,这就是F1值统计更细更准的原因,如下图所示。
10个样本出现2次错误模型的准确率(Accuary)永远都是80%,而按照F1的统计方法,这两次错又会细分成27种情况,F1值可以统计出最优的情况,而模型准确率不管哪种情况都是80%。
最后看一下怎么细分这27种情况,这要用到迷惑矩阵,把模型推理结果分为四大类,分别是雷区的错误FP(False Positive),雷区的正确TP(True Positive),安全区的错误(False Negative),安全区的正确(True Negative),用一个二维矩阵来表示就构成迷惑矩阵,如下图所示。
具体F1值的计算就根据 TP,FP,TN,TN的代入下面的公式得到:
准确率80%和不同F1的对照表如下:
总结:
F1值之所以比模型准确率更能评判模型的优劣,根本原因是其统计的更精细更全面,如果把准确率比作一把测量模型的直尺,那么F1值就是一把千分尺。