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
相关产品推荐
相关产品推荐

