首先,你不能使用传统的准确度或AUC曲线的原因是因为你是不平衡的
假设你有99个好的交易和1个欺诈,你想发现欺诈。在
通过简单地预测好的交易(100个好的交易),你将有99%的准确率。这不可能是好事,因为你错过了欺诈交易。在
要计算不平衡的数据集,应该对给定的非多数类使用精度、召回和f1 score。在
召回是您在整个数据集中正确发现的欺诈数量超过欺诈数量。E、 g.您在算法中发现了12个欺诈,数据集中有100个欺诈,因此您的召回将是:
召回=12/100=>;12%/0.12
精度是您正确发现的欺诈数量超过您发现的欺诈数量。E、 g.你的算法说你发现了12个欺诈,但在这12个欺诈中,只有8个是真正的欺诈,所以你的精度将是:
精度=8/12=>;66%/0.66
F1得分是前两个测量值之间的调和平均值:
F1=(2*精度*召回)/(精度+召回)
所以这里,F1=(2*0.12*0.66)/(0.12+0.66)=0.20=>;20%
20%不是很好。完全。在
总的来说,我们的目标是最大化F1分数,有时是te精度,有时是回忆,这取决于你的需要。在
但这是一个权衡,当你改进一个时,另一个就会降低,反之亦然。在
欲了解更多信息,请查看维基百科:
它们也可以在sklearn(sklearn.metrics)中找到:from sklearn.metrics import precision_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> precision_score(y_true, y_pred)
0.22
from sklearn.metrics import recall_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> recall_score(y_true, y_pred, average='macro')
0.33
from sklearn.metrics import f1_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> f1_score(y_true, y_pred, average='macro')
0.26
另一个要遵循的指标是精确召回曲线:
这是在计算不同阈值下的精确度与召回率。在
^{pr2}$
怎么读这个?轻松一点!在
这意味着在0.6召回,你有0.9的精确度(或相反)
在1次回忆中,你有0.6的精确度等等。。在