做出决定时的正确评分规则(例如垃圾邮件与非正常电子邮件)

机器算法验证 机器学习 分类 模型评估 准确性 计分规则
2022-01-30 23:44:41

在这里,Frank Harrell 坚持使用适当的评分规则来评估分类器。这是有道理的。如果我们有 500 s 和和 500 s 和,我们可以通过将阈值设置为来获得一个完美的分类器。然而,这真的是一个比给出 s 所有 s 所有的分类器更好的分类器,除了一个有0P(1)[0.45,0.49]1P(1)[0.51,0.55]0.500P(1)[0.05,0.07]1P(1)[0.93,0.95]P(1)=0.04?

Brier score 表示第二个分类器粉碎了第一个分类器,即使第二个分类器无法达到完美的准确度。

set.seed(2020)
N <- 500
spam_1 <- runif(N, 0.45, 0.49) # category 0
ham_1 <- runif(N, 0.51, 0.55) # category 1
brier_score_1 <- sum((spam_1)^2) + sum((ham_1-1)^2)
spam_2 <- runif(N, 0.05, 0.07) # category 0 
ham_2 <- c(0.04, runif(N-1, 0.93, 0.95)) # category 1
brier_score_2 <- sum((spam_2)^2) + sum((ham_2-1)^2)
brier_score_1 # turns out to be 221.3765
brier_score_2 # turns out to be 4.550592

但是,如果我们使用第二个分类器,我们最终会将“火腿”电子邮件称为“垃圾邮件”并将其发送到垃圾邮件文件夹。根据电子邮件的内容,这可能是个坏消息。对于第一个分类器,如果我们使用的阈值,我们总是将垃圾邮件分类为垃圾邮件,将火腿分类为火腿。第二个分类器没有阈值可以提供完美的分类准确度,这对于电子邮件过滤来说非常棒。0.50

我承认我不知道垃圾邮件过滤器的内部工作原理,但我怀疑将电子邮件发送到垃圾邮件文件夹或让它通过收件箱是一个艰难的决定。即使这不是电子邮件过滤的特定示例的工作方式,也存在必须做出决定的情况。

作为必须做出决定的分类器的用户,与找到最佳阈值然后根据该阈值进行分类时评估性能相比,使用适当的评分规则有什么好处?当然,我们可能会重视敏感性或特异性而不仅仅是准确性,但我们无法从适当的评分规则中获得任何这些。我可以想象以下与经理的对话。

:“所以我建议我们使用第二种模型,因为它的 Brier 分数要低得多。”

老板:“所以你想用更经常[傻瓜]的模型去?安全!”

我可以看到一个论点,即从长远来看,具有较低 Brier 分数(好)但准确性较低(坏)的模型可能会表现得更好(在分类准确性方面),并且不应该因为侥幸而受到如此严厉的惩罚指出尽管其他模型的性能通常较差,但如果我们正在进行样本外测试并查看这些模型如何处理它们在期间未暴露的数据,那么给经理提供的答案仍然令人不满意训练。

另一种选择是基于分类器确定的概率的某种掷骰子。假设我们得到然后从绘制观察并将其发送到垃圾邮件文件夹 iff然而,在某些时候,会决定将电子邮件发送到何处,没有“23% 将其发送到垃圾邮件文件夹,77% 将其发送到收件箱”。P(spam)=0.23XBernoulli(0.23)X=1

2个回答

我想我是“其中之一”,所以我会插话。

简短版本:恐怕你的例子有点像稻草人,我认为我们不能从中学到很多东西。

在第一种情况下,是的,您可以将预测阈值设置为 0.50 以获得完美的分类。真的。但我们也看到你的模型实际上很差。取垃圾邮件组中的第 127 项,并将其与火腿组中的第 484 项进行比较。他们预测成为垃圾邮件的概率为 0.49 和 0.51。(那是因为我选择了垃圾邮件中最大的预测和火腿组中的最小预测。)

也就是说,对于该模型,它们在成为垃圾邮件的可能性方面几乎无法区分。但他们不是!我们知道第一个肯定是垃圾邮件,第二个肯定是火腿。“几乎可以肯定”,如“我们观察了 1000 个实例,并且截止总是有效”。说这两个实例实际上同样可能是垃圾邮件,这清楚地表明我们的模型并不真正知道它在做什么。

因此,在目前的情况下,对话不应该是我们应该使用模型 1 还是使用模型 2,或者我们是否应该根据准确性或 Brier 分数在两个模型之间做出决定。相反,我们应该将两个模型的预测都提供给任何标准的第三种模型,例如标准逻辑回归。这会将模型 1 的预测转换为非常自信的预测,本质上是 0 和 1,从而更好地反映数据中的结构。这个布赖尔分数元模型会低得多,大约为零。同样,来自模型 2 的预测将被转换为几乎一样好但稍差的预测 - Brier 分数略高一些。现在,两个元模型的 Brier 分数将正确地反映应该首选基于(元)模型 1 的模型。


当然,最终决定可能需要使用某种阈值。根据类型 I 和 II 错误的成本,成本最优阈值可能与 0.5 不同(当然,在本示例中除外)。毕竟,正如您所写,将火腿误分类为垃圾邮件可能比反之亦然的代价高得多。但正如我在别处写的,成本最优决策也可能包括多个阈值!很有可能,一个非常低的预测垃圾邮件概率可能会将邮件直接发送到您的收件箱,而一个非常高的预测概率可能会在您从未看到它的情况下在邮件服务器上过滤它 - 但介于两者之间的概率可能意味着 [SUSPECTED SPAM ] 可能会插入主题中,邮件仍会发送到您的收件箱。准确性作为评估措施在这里失败,除非我们开始查看多个存储桶的单独准确性,但最终,所有“中间”邮件将被归类为一个或另一个,它们不应该被发送到首先正确的桶?另一方面,适当的评分规则可以帮助您校准概率预测。


老实说,我不认为像你在这里给出的那样的确定性例子很有用。如果我们知道发生了什么,那么我们一开始就不会进行概率分类/预测,毕竟。所以我会争论概率的例子。这是一个这样的。我将生成 1,000 个真实的潜在概率,这些概率均匀分布在[0,1],然后根据这个概率生成实际值。现在我们没有完美的分离,我认为上面的例子模糊了。

set.seed(2020)
nn <- 1000
true_probabilities <- runif(nn)
actuals <- runif(nn)<true_probabilities

library(beanplot)
beanplot(true_probabilities~actuals, 
    horizontal=TRUE,what=c(0,1,0,0),border=NA,col="lightgray",las=1,
    xlab="True probability")
points(true_probabilities,actuals+1+runif(nn,-0.3,0.3),pch=19,cex=0.6)

豆图

现在,如果我们有真实的概率,我们可以使用上述基于成本的阈值。但通常情况下,我们不会知道这些真实概率,但我们可能需要在每个输出此类概率的竞争模型之间做出决定。我认为寻找一个尽可能接近这些真实概率的模型是值得的,因为例如,如果我们对真实概率有偏见的理解,那么我们在改变过程中投入的任何资源(例如,在医学应用:筛查、接种、传播生活方式的改变……)或更好地理解它可能会被错误分配。换句话说:使用准确性和阈值意味着我们根本不在乎我们是否预测概率p^1或者p^2只要超过阈值,p^i>t(反之亦然t),所以我们在理解和调查我们不确定的实例方面的动机为零,只要我们让它们到达阈值的正确一侧。

让我们看几个校准错误的预测概率。具体来说,对于真实概率p,我们可以看一下幂变换p^x:=px对于某个指数这是一个单调变换,所以我们想基于使用的任何阈值也可以被变换以用于或者,从开始并且不知道,我们可以优化阈值以获得与,因为单调性。的真实概率时,准确性毫无用处x>0pp^xp^xpt^x(p^x,t^x)(p^y,t^y)x=1但是(鼓声),正确的评分规则(如 Brier 或日志评分)确实会在正确的的预期中得到优化。x=1

brier_score <- function(probs,actuals) mean(c((1-probs)[actuals]^2,probs[!actuals]^2))
log_score <- function(probs,actuals) mean(c(-log(probs[actuals]),-log((1-probs)[!actuals])))

exponents <- 10^seq(-1,1,by=0.1)
brier_scores <- log_scores <- rep(NA,length(exponents))
for ( ii in seq_along(exponents) ) {
    brier_scores[ii] <- brier_score(true_probabilities^exponents[ii],actuals)
    log_scores[ii] <- log_score(true_probabilities^exponents[ii],actuals)
}
plot(exponents,brier_scores,log="x",type="o",xlab="Exponent",main="Brier score",ylab="")
plot(exponents,log_scores,log="x",type="o",xlab="Exponent",main="Log score",ylab="")

分数

我认为值得区分性能评估和模型选择标准。

在性能评估中,您想根据您现在可用的数据了解您的系统在运行中可能表现如何。在评估性能时,您需要使用适合您任务的指标。因此,如果您有分类问题(即您确实需要做出艰难的“是”/“否”决定)并且假阳性和假阴性成本相同,那么分类准确性是一个合适的性能评估标准。显然,您可能想要评估性能估计的不确定性,可能使用引导复制。

另一方面,对于模型选择标准,如果我们想在竞争方法之间进行选择,准确性可能不是一个好的标准,即使它是主要的兴趣量。问题是准确性很脆弱,如果您再次运行实验,但使用不同的训练数据样本,您可能会得到稍微不同的决策边界,从而在相同的测试数据上给出非常不同的准确性。在这种情况下,因为第一个分类器的边距非常小,如果它在与第二个不同的数据样本上训练,决策边界更有可能发生变化。同样,如果分类器在不同的测试数据集上进行评估,则第一个分类器比第二个分类器更容易​​出错。由于边距很小,新的测试数据必须与决策边界附近的旧数据略有不同,才会有错误分类。因此,Brier 分数奖励了第二个分类器,因为它具有更高的稳定性。这很重要,因为我们想要一个在操作中表现良好的分类器,而不仅仅是在这个特定的测试集上。

我使用了最小二乘支持向量机(和内核逻辑回归),你需要一个模型选择标准来调整超参数。显而易见的事情是使用交叉验证的准确性作为选择标准,以解决准确性是主要兴趣数量的问题。然而,通常最好使用交叉验证的 Brier 分数(或在我的情况下等效的 PRESS 标准),它不那么脆弱。通过使用适当的评分规则作为模型选择标准,您可以从最终模型中获得更好的准确性。

我从参加由会议主办的“性能预测挑战赛”中了解到这一点,您不仅要提供预测,还要估计您的模型在测试数据上的准确度(在这种情况下为平衡准确度) . 所以这是基于实验和经验的——像这样的挑战是一个很好的地方来找出什么是真正有效的,什么是无效的,因为在评估中没有稻草人或“操作员偏见”问题。论文在这里FWIW(预印本在这里)。