我正在尝试使用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曲线下求小梯形的面积之和。