【问题标题】:How this method or formula for calculating ROC AUC works?这种计算 ROC AUC 的方法或公式如何工作?
【发布时间】: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


    【解决方案1】:

    简答:这是 Wilcoxon-Mann-Whitney 统计量,见 https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve 该页面也有证据。

    公式的底部与 wiki 中的公式相同。顶部更棘手。 wiki 中的f 对应于数据中的pt_0t_1 是数据框中的索引。请注意,我们首先按p 排序,这让我们的生活更轻松。

    注意,双和可以分解为

    Sum_{t_1 such that y(t_1)=1} #{t_0 such that p(t_0) < p(t_1) and y(t_0)=0}
    

    这里#代表此类索引的总数。

    对于每个行索引t_1(如y(t_1) =1),有多少t_0 满足p(t_0) &lt; p(t_1)y(t_0)=0?我们知道 pt_1 值恰好小于或等于 t_1,因为值已排序。我们的结论是

    #{t_0: p(t_0) < p(t_1) and y(t_0)=1) = t_1 - #{t_0: t_0 <= t_1 and y(t_0)=1}
    

    现在想象向下滚动已排序的数据框。第一次遇到y=1#{t_0: t_0 &lt;= t_1 and y(t_0)=1}=1,第二次遇到y=1,同样数量是2,第三次遇到y=1,数量是3,以此类推。因此,当我们对所有索引 t_1y=1 求和时,我们得到

    Sum_{t_1: y(t_1)=1}#{t_0: p(t_0) < p(t_1) and y(t_0)=1) = Sum_{t_1: y(t_1)=1} t_1 - (1 + 2 + 3 + ... + n),
    

    其中ny 列中的总数。现在我们需要再做一个简化。请注意

    Sum_{t_1: y(t_1)=1} t_1 = Sum_{t_1: y(t_1)=1} t_1 y(t_1)
    

    如果y(t_1) 不是一,则为零。因此,

    Sum_{t_1: y(t_1)=1} t_1 = Sum_{t_1: y(t_1)=1} t_1 y(t_1) = Sum_{t} t y(t)
    

    将它插入我们的公式并使用它

    1 + 2+ 3 + ... + n = n(n+1)/2
    

    完成了你找到的公式的证明。

    附:我认为将这个问题发布在数学或统计溢出上会更有意义。

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2017-11-12
      • 2016-01-23
      • 1970-01-01
      • 2021-06-12
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多