ML.ROC_CURVE 函数

ML.ROC_CURVE 函数

使用 ML.ROC_CURVE 函数评估特定于逻辑回归的指标。ML.ROC_CURVE 仅评估逻辑回归模型。

输出 ML.ROC_CURVE 函数包含多行针对模型不同阈值的指标。这些指标包括:

  • threshold
  • recall
  • false_positive_rate
  • true_positives
  • false_positives
  • true_negatives
  • false_negatives

ML.ROC_CURVE 限制

ML.ROC_CURVE 函数存在以下限制:

ML.ROC_CURVE 语法

ML.ROC_CURVE(MODEL model_name
            [, {TABLE table_name | (query_statement)}]
            [, GENERATE_ARRAY(thresholds)])

model_name

model_name 是要评估的模型的名称。如果您没有配置默认项目,请按照以下格式将项目 ID 添加到模型名称前面:`[PROJECT_ID].[DATASET].[MODEL]`(包括反引号);例如:`myproject.mydataset.mymodel`。

table_name

(可选)table_name 是包含评估数据的输入表的名称。如果您没有配置默认项目,请按照以下格式将项目 ID 添加到表名称前面:`[PROJECT_ID].[DATASET].[TABLE]`(包括反引号);例如:`myproject.mydataset.mytable`。

如果指定了 table_name,则模型中的输入列名称必须与表中的列名称匹配,并且根据 BigQuery 隐式强制转换规则,它们的类型应兼容。输入必须有一列与训练期间提供的标签列名称匹配。该值通过 input_label_cols 选项提供。如果未指定 input_label_cols,系统会使用训练数据中名为“标签”的列。

如果 table_namequery_statement 均未指定,则 ML.ROC_CURVE 按以下方式计算 ROC 曲线的结果:

  • 如果数据在训练期间拆分,则拆分评估数据用于计算 ROC 曲线结果。
  • 如果数据在训练期间未拆分,则整个训练输入都用于计算 ROC 曲线结果。

query_statement

(可选)query_statement 子句指定用于生成评估数据的标准 SQL 查询。请参阅标准 SQL 查询语法页面,了解 query_statement 子句支持的 SQL 语法。

如果指定了 query_statement,则查询中的输入列名称必须与模型中的列名称匹配,并且根据 BigQuery 隐式强制转换规则,它们的类型应兼容。输入必须有一列与训练期间提供的标签列名称匹配。该值通过 input_label_cols 选项提供。如果未指定 input_label_cols,系统会使用训练数据中名为“标签”的列。系统会忽略多余的列。

如果创建 model_nameCREATE MODEL 语句中存在 TRANSFORM 子句,则只有 TRANSFORM 子句中的输入列必须出现在 query_statement 中。

如果 table_namequery_statement 均未指定,则 ML.ROC_CURVE 按以下方式计算 ROC 曲线的结果:

  • 如果数据在训练期间拆分,则拆分评估数据用于计算 ROC 曲线结果。
  • 如果数据在训练期间未拆分,则整个训练输入都用于计算 ROC 曲线结果。

thresholds

(可选)thresholds 是通过 GENERATE_ARRAY 函数提供的预测输出的百分位值。所提供的值应为 DOUBLE 类型。

如果您没有指定要使用的阈值,系统会使用 100 个近似分位数基于预测输出的值自动选择阈值:APPROX_QUANTILES(predicted_label, 100)

ML.ROC_CURVE 示例

以下示例假定您的模型和输入表位于默认项目中。

评估逻辑回归模型的 ROC 曲线

以下查询返回的列为:thresholdrecallfalse_positive_ratetrue_positivesfalse_positivestrue_negativesfalse_negatives。召回率和假正例率可用于绘制 ROC 曲线。返回的阈值是基于预测输出的分位值而选择的。

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)

通过自定义阈值评估 ROC 曲线

以下查询返回的列与上一示例相同。返回的阈值是根据 GENERATE_ARRAY 函数的输出而选择的。

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`,
    GENERATE_ARRAY(0.4,0.6,0.01))

评估精确率召回率曲线

以下查询不是通过获得 ROC 曲线(召回率与假正例率),而是利用由真正例和假正例总数获得的精确率来计算精确率召回率曲线。

SELECT
  recall,
  true_positives / (true_positives + false_positives) AS precision
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)