Hive SQL 计算AUC

本文介绍了一种使用SQL来计算AUC(Area Under the Curve)的方法,适用于正负样本标签及预测分值已知的情况。通过两个示例展示了如何创建数据表、插入数据,并最终计算出AUC值。

前置条件:
    数据表中已有正负样本标签,和预测分值。

TRUE,    9
FALSE,  8
TRUE,   7
FALSE,  6
这四个样本对应的AUC是0.75。

-- ########## 测试一:##########

Lable为True / False.

create table tmp.test_score_label(
  score int,
  label boolean
);

insert into tmp.test_score_label values (9, true),(8, false),(7, true),(6, false);

select * from tmp.test_score_label;

select
    (ry - 0.5*n1*(n1+1))/n0/n1 as auc
from(
    select
        sum(if(y=false, 1, 0)) as n0,
        sum(if(y=true, 1, 0)) as n1,
        sum(if(y=true, r, 0)) as ry
    from(
        select y, row_number() over(order by score asc) as r
        from(
            select label y, score
            from tmp.test_score_label
        )A
    )B
)C
;

-- ########## 测试二:##########

Lable为 0 / 1.

create table tmp.test_score_label2(
  score int,
  label TINYINT
);

insert into tmp.test_score_label2 values (9, 1),(8, 0),(7, 1),(6, 0);

select * from tmp.test_score_label2;

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 label y, score
            from tmp.test_score_label2
        )A
    )B
)C
;


 

代码参考:

sql 计算 auc https://tracholar.github.io/

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值