【发布时间】:2021-01-12 01:12:06
【问题描述】:
我试图使用 MySQL 为下表中的数据计算 AUC:
y p
1 0.872637
0 0.130633
0 0.098054
...
...
1 0.060190
0 0.110938
我遇到了以下 SQL 查询,它给出了正确的 AUC 分数(我使用 sklearn 方法进行了验证)。
SELECT (sum(y*r) - 0.5*sum(y)*(sum(y)+1)) / (sum(y) * sum(1-y)) AS auc
FROM (
SELECT y, row_number() OVER (ORDER BY p) r
FROM probs
) t
Using pandas this can be done as follows:
temp = df.sort_values(by="p")
temp['r'] = np.arange(1, len(df)+1, 1)
temp['yr'] = temp['y']*temp['r']
print( (sum(temp.yr) - 0.5*sum(temp.y)*(sum(temp.y)+1)) / (sum(temp.y) * sum(1-temp.y)) )
我不明白我们如何能够使用这种方法计算 AUC。 有人可以给出这背后的直觉吗?
我已经熟悉梯形法,它涉及对 ROC 曲线下小梯形的面积求和。
【问题讨论】:
标签: machine-learning metrics roc auc