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

BigQuery ML中ML.EVALUATE评估ARIMA时序模型返回null问题

BigQuery ARIMA时序模型ML.EVALUATE返回空值的解决方法

返回全量null和字段配置、模型训练失败无关,核心是调用逻辑不符合时序模型的评估规则,具体原因和修正方案如下:

  • 核心触发原因:你设置了评估参数horizon=30,但传入的评估数据集仅包含模型训练用的历史数据,没有覆盖训练时间终点之后30个时间步的真实观测值。BigQuery对ARIMA类时序模型做样本外评估时,会自动取训练截止时间之后的真实数据,和同时间点的模型预测值比对计算误差指标;如果传入的数据全是训练阶段已经见过的历史数据,没有对应horizon窗口的真实值,自然无法计算误差,所有度量字段返回null。
  • 区分两种评估场景的正确写法:
    • 场景1:不需要额外新数据,仅需获取模型训练阶段的样本内回测指标
      这种场景不需要手动传入输入子查询,直接调用ML.EVALUATE即可,BigQuery会自动用训练时预留的回测窗口计算MAE、MAPE、RMSE等指标,不会返回空值,示例代码:
      SELECT
        *
      FROM
        ML.EVALUATE(MODEL `mydataset.my_arima_model`,
          STRUCT(TRUE AS perform_aggregation, 30 AS horizon))
      
    • 场景2:需要评估模型在新数据上的泛化能力
      这种场景才需要传入输入表,传入的数据集必须满足两个要求:一是包含训练用的全量历史数据,二是补充训练截止时间之后至少30个时间步的真实观测值;同时时间列的粒度必须和模型训练时的时间粒度完全一致(比如训练用天级粒度,传入数据不能是周级聚合结果),时间序列不能存在连续缺失步、指标值不能为null。
      修正后的示例代码:
      SELECT
        *
      FROM
        ML.EVALUATE(MODEL `mydataset.my_arima_model`,
          (
          SELECT
            timeseries_date,
            timeseries_metric
          FROM
            -- 替换为包含训练后30天真实观测值的表
            `mydataset.mytable_include_new_30days_actual_data`
          ),
          STRUCT(TRUE AS perform_aggregation, 30 AS horizon))
      
  • 额外排查点:如果按上述写法调整后依然返回空,可以先检查输入表的时间连续性:按时间字段升序排序,确认相邻时间点的间隔和训练粒度匹配,参与计算的指标字段无null值即可。你之前能正常生成30天预测结果,已经说明模型本身训练没有问题,不需要重新训练模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:03:18