整个遍历阈值的过程可以用ROC曲线来表示,横轴是误判率(fpr),纵轴是准确率(tpr/recall/sensitivity)。但是给你两个分类器想要直接比较谁的ROC曲线会有点困难,所以我们用一个scaler来描述ROC曲线就是AUC - Area under curve。 ROC曲线下的面积越大越接近完美的分类器,而对角线50%是随机猜正负就可以得到的AUC。
Kaggle链接 https://www.kaggle.com/c/santander-customer-transaction-prediction/overview/evaluation
AUC 适用于正负样本相对balance的情况,且分类问题对模型预测概率的准确度没有要求的情况。详见【实战篇】
precision + recall = AUCPR(AP)和上述ROC-AUC的思路相同。随着阈值从1下降到0,预测为正的样本变多,被正确筛选出的正样本增多,但同时预测为正的准确率会下降。
这样我们得到PR曲线,以及曲线下的面积AUCPR。有时AUCPR也被称作AP,就是对所有recall取值对应的precision求平均。第一眼看上去我也被糊弄了,一直当成两个概念来记。但是式子一写出来,妈呀这俩不是一个东西么。
\[
AUCPR = \sum_1^K\Delta{r(k)} * p(k) = \int_o^1 {p(r) dr} = AP
\]
AP 刚好弥补AUC曲线的不足,适用于正负样本imbalance的情况,或者我们更关心模型在正样本上表现的情况。但AP同样不能保证模型预测概率的准确率。详见【实战篇】
cross-entropy losscross-entropy放在这里会有点奇怪,因为本质上它是和这里其他所有指标都不同的存在。其他的评价指标评价的是0/1的分类效果,或者更准确说是对排序效果(根据阈值把预测值从大到小分成0/1两半)进行评价。但是cross-entropy是直接对预测概率是否拟合真实概率进行评价。
\[
L = -\sum_{i=1}^N y_i * log p_i + (1-y_i) * log(1-p_i)
\]
kaggle链接 https://www.kaggle.com/c/statoil-iceberg-classifier-challenge/overview/evaluation
cross-entropy弥补了AP和AUC的不足。如果分类目标其实是获得对真实概率的估计的话,使用cross-entropy应该是你的选择。详见【实战篇】
*Mean F1 Scorekaggle链接 https://www.kaggle.com/c/instacart-market-basket-analysis/overview/evaluation
第一次见到这个指标是在Instacart的kaggle比赛里面。这里的mean不是指的对所有阈值下的F1求平均值而是对每个order_id的多个product_id求F1,再对所有order_id的F1求平均,有点绕...
之所以把这个评价指标也放在这里是因为这个特殊的评价方法会对你如何split训练集/测试集,以及如何选定最优的阈值产生影响。有兴趣的可以来试一试,反正我觉得自己是把能踩的坑都踩了一个遍,欢迎大家一起来踩坑 >_<
Reference
Alaa Tharwat,Classification assessment methods,Applied Computing and Informatics
Nan Ye,Kian Ming A. Chai,Wee Sun Lee,Hai Leong Chieu,Optimizing F-Measures: A Tale of Two Approaches,
https://en.wikipedia.org/wiki/Confusion_matrix