You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vertex AI AutoML批量预测在BigQuery返回Float64数组而非单值问题

Vertex AutoML批量预测BigQuery结果分数数组处理方案

问题原因

AutoML表格模型的批量预测结果中,prediction.score字段默认以Float64数组形式返回——哪怕是二分类任务,也会包含所有类别的预测分数(比如二分类对应[负类概率, 正类概率]),这就是你看到单值变成数组的核心原因。

解决方法

直接提取数组中的目标元素即可进行阈值判断,以下是具体操作:

1. 确认数组结构

先执行查询查看分数数组的对应类别,明确目标分数的索引:

SELECT prediction.score, prediction.display_names
FROM `your-project.your-dataset.your-prediction-table`
LIMIT 10;

display_names会显示数组中每个分数对应的类别名称(比如["class_0", "class_1"]),对应分数数组的索引0和1。

2. 提取单个分数并筛选

使用SAFE_OFFSET()(从0开始索引)或ORDINAL()(从1开始索引)提取数组元素,直接进行阈值比较:

  • 二分类示例(提取索引1的正类分数,筛选大于0.8的记录):
SELECT *
FROM `your-project.your-dataset.your-prediction-table`
WHERE prediction.score[SAFE_OFFSET(1)] > 0.8;
  • 多分类示例(提取第三个类别的分数,筛选大于0.7的记录):
SELECT *
FROM `your-project.your-dataset.your-prediction-table`
WHERE prediction.score[SAFE_OFFSET(2)] > 0.7;

3. 处理空值场景

如果存在数组为空的情况,SAFE_OFFSET()可以避免报错,也可结合IFNULL设置默认值:

SELECT *
FROM `your-project.your-dataset.your-prediction-table`
WHERE IFNULL(prediction.score[SAFE_OFFSET(1)], 0) > 0.8;

补充说明

  • 提取后的元素本身就是Float64类型,无需额外转换即可支持比较运算。
  • 若要将目标分数作为单独字段存储,可创建视图简化后续查询:
CREATE OR REPLACE VIEW `your-project.your-dataset.prediction-view` AS
SELECT 
  *,
  prediction.score[SAFE_OFFSET(1)] AS positive_class_score
FROM `your-project.your-dataset.your-prediction-table`;

内容的提问来源于stack exchange,提问作者Grant Rainey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:45:42