sql计算AUC

AUC可以直接根据ROC曲线,利用梯形积分进行计算。此外,还有一个比较有意思的是,可以利用AUC与Wilcoxon-Mann-Whitney检验的U统计量的关系,来计算AUC。这可以从AUC的概率意义推导而来。

假设我们将测试集的正负样本按照模型预测得分从小到大排序,对于第j个正样本,假设它的排序为 r j r_j rj,那么说明排在这个正样本前面的总样本有 r j − 1 r_j - 1 rj1个,其中正样本有 j − 1 j - 1 j1个(因为这 j j j个正样本在所有的正样本里面排第 j j j),所以排在第 j j j个正样本前面(得分比它小)的负样本个数为 r j − j r_j - j rjj。也就是说,对于第 j j j个正样本来说,其得分比随机挑的一个负样本(排在它后面的概率)是:

r j − j N − \frac{r_j - j}{N_-} Nrjj

其中 N − N_- N是总的负样本数目。所以,平均下来,随机挑的正样本得分比负样本大的概率为:

1 N + ∑ j = 1 N + r j − j N − = ∑ j = 1 N + r j − N + ( N + + 1 ) / 2 N + N − \frac{1}{N_+} \sum_{j=1}^{N_+} \frac{r_j - j}{N_-} = \frac{\sum_{j=1}^{N_+} r_j - N_+ (N_+ + 1) / 2}{N_+ N_-} N+1j=1N+Nrjj=N+Nj=1N+rjN+(N++1)/2

所以:

A U C = ∑ j = 1 N + r j − N + ( N + + 1 ) / 2 N + N − AUC = \frac{\sum_{j=1}^{N_+} r_j - N_+ (N_+ + 1) / 2}{N_+ N_-} AUC=N+Nj=1N+rjN+(N++1)/2

因此,很容易写出计算AUC的SQL代码:

select
	(ry - 0.5*n1*(n1+1))/n0/n1 as auc
from(
	select
		sum(if(y=0, 1, 0)) as n0,
		sum(if(y=1, 1, 0)) as n1,
		sum(if(y=1, r, 0)) as ry
	from(
		select y, row_number() over(order by score asc) as r
		from(
			select y, score
			from some.table
		)A
	)B
)C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值