如何在GCP BigQuery中批量为多时间序列创建ARIMA模型并生成预测?
BigQuery批量多时间序列ARIMA预测实现方案
核心逻辑
BigQuery ML原生支持多时间序列批量拟合ARIMA模型,只需通过TIME_SERIES_ID_COL参数指定序列唯一标识字段,即可自动为1000条序列分别独立建模,无需创建多个模型资源。
前置要求
你的原始时间序列表需要包含至少3类字段:
- 时间字段:类型为DATE或TIMESTAMP,记录每个数据点的时间
- 序列标识字段:类型任意,用来唯一区分1000条不同的时间序列
- 预测目标字段:数值类型,你需要做预测的指标值
步骤1:创建批量ARIMA模型
执行以下SQL即可一次性完成所有序列的ARIMA拟合:
CREATE OR REPLACE MODEL `你的项目ID.你的数据集ID.批量ARIMA模型名` OPTIONS( MODEL_TYPE = 'ARIMA_PLUS', -- BigQuery官方优化的ARIMA扩展模型,也可改为普通'ARIMA' TIME_SERIES_TIMESTAMP_COL = '你的时间列名', TIME_SERIES_DATA_COL = '你的预测目标列名', TIME_SERIES_ID_COL = '你的序列标识列名', -- 核心参数,自动拆分序列分别建模 HORIZON = 3, -- 固定预测3个周期 DATA_FREQUENCY = 'AUTO_FREQUENCY' -- 自动识别原始数据的时间粒度(日/周/月等) ) AS SELECT 你的时间列名, 你的序列标识列名, 你的预测目标列名 FROM `你的项目ID.你的数据集ID.你的原始表名`;
步骤2:生成预测结果并追加到原表
使用ML.FORECAST函数批量生成所有序列的3周期预测值,直接插入原表即可,建议新增标记字段区分原始数据和预测数据:
INSERT INTO `你的项目ID.你的数据集ID.你的原始表名` ( 你的时间列名, 你的序列标识列名, 你的预测目标列名, is_forecast -- 可选新增字段,BOOLEAN类型,标记是否为预测值 ) SELECT forecast_timestamp AS 你的时间列名, 你的序列标识列名, forecast_value AS 你的预测目标列名, TRUE AS is_forecast FROM ML.FORECAST( MODEL `你的项目ID.你的数据集ID.批量ARIMA模型名`, STRUCT(3 AS horizon) )
补充说明
- 可通过
SELECT * FROM ML.ARIMA_EVALUATE(MODEL \你的项目ID.你的数据集ID.批量ARIMA模型名`)`查看每条序列的建模效果、参数和异常信息 - 若部分序列数据量不足(小于5个时间点),模型会自动跳过该序列的预测
- 原始数据更新后,只需重跑步骤1的建模型语句再生成新的预测即可,无需修改其他逻辑
内容的提问来源于stack exchange,提问作者Alejandro Salazar
相关产品推荐
相关产品推荐

