为存储在BigQuery表中的数据计算ROC曲线的有效方法



我有一个BigQuery表,它包含"得分;以及";地面真相";领域等。我想用这两个字段来计算ROC曲线。

一个解决方案是使用scikit-learn在python中完成这项工作。然而,这需要使用BigQuerypythonneneneba API,它只在行上返回迭代器。这听起来效率很低,因为我在表中有几十万行。

我想知道是否有任何有效的方法可以直接在查询中实现这个ROC曲线。

有一些指针可供选择:

  1. 有一些Javascript库(一个示例(可用于BigQuery Javascript UDF
  2. 我不熟悉ROC曲线,但我认为算法适用于输入数组,而不是单个行。请注意,BigQuery本机不支持用户定义的聚合函数,您需要用一种稍微有点技巧的方式来实现这一点,比如:
CREATE FUNCTION yourFunction(input ARRAY< STRUCT<score FLOAT64, groundTruth STRING> >)
RETURNS INT64
LANGUAGE js
AS """
// Javascript code to calculate ROC curve
""";
-- To use the function in query
SELECT yourFunction(ARRAY_AGG(STRUCT(score, groundTruth)))
FROM yourTable
GROUP BY some_condition

限制是,如果有太多的数据被聚合到ARRAY_AGG(...)中,BigQuery可能会耗尽内存,试图准备将数组作为函数的输入。

单独的JS UDF调用也有5分钟的超时时间。

最新更新