最小化 ROC 曲线下的面积以优化多项式预测器的参数

问题描述

我的预测变量 (x) 具有与二元结果 (y) 相关的 U 形分布,在 x 的低值和高值时都有积极的结果,导致双凹 roc 曲线下面积较差曲线 (auc)。
为了最大化其区分结果的能力,我试图通过使用 optim1 - auc 作为最小化成本函数来优化 x 的二阶多项式的参数。

x = c(13,7,1,100,3,4,2,14,8,5,12,13,9,10,6,79,9)

y = c(0,0)

theta = c(0,0)

min_auc <- function(theta,x,y) {
  (1 - roc(y,(theta[1] + theta[2]*x + theta[3]*x^2))$auc)
}

optim(theta,min_auc,x = x,y = y)

结果如下:

$par
[1] 0.0 0.1 0.0

$value
[1] 0.4380054

$counts
function gradient 
       8       NA 

$convergence
[1] 0

$message
NULL

但是,根据参数的手动定义,我知道可以进一步最小化 min_auc

theta = c(0,-40,1)
(1 - roc(y,(theta[1] + theta[2]*x + theta[3]*(x^2)))$auc)

[1] 0.2762803

谁能向我解释一下我做错了什么?可能是由于非凸成本函数造成的吗?

解决方法

一种可能性是共线性问题。缩放输入有助于:

min_auc <- function(theta,x,y) {
  (1 - roc(y,(theta[1] + theta[2]*scale(x) + theta[3]*scale(x)^2))$auc)
}

optim(theta,min_auc,x = x,y = y)
# $par
# [1] -0.02469136 -0.03117284  0.11049383
# 
# $value
# [1] 0.2762803
# 
# $counts
# function gradient 
# 30       NA 
# 
# $convergence
# [1] 0
# 
# $message
# NULL
# 

另一个潜在问题是您要优化的表面有一些平坦点。例如,假设我们将这个方程中的截距固定为 -2。这是关于如果您执行qlogis(mean(y)) 的结果。然后,您只优化了 2 个参数,以便更容易看到表面。这是两个水平轴上剩余的两个 theta 项和 y 轴上的 1-AUC 值的样子。

min_auc <- function(theta,(-2 + theta[1]*scale(x) + theta[2]*scale(x)^2))$auc)
}
s <- seq(-.25,.25,length=50)
o <- outer(s,s,Vectorize(function(z,w)min_auc(c(z,w),y)))

library(plotly)
plot_ly(x = ~s,y = ~s,z = ~o) %>% add_surface()

enter image description here

正如您在上面可能已经注意到的,该问题没有唯一的解决方案。有很多解似乎达到了最小值。