如何在BigQuery的ARIMA_PLUS中用补零替代插值做预测?
在BigQuery中用ARIMA_PLUS处理缺失零销售日期的预测方案
不用提前给原销售表填充零行,而是通过动态生成完整日期-产品序列的方式,在查询时临时补全无销售日期的零值,再喂给ARIMA_PLUS模型。这种方式不会增大原表体积,完全在查询层处理。
具体实现步骤
- 生成每个产品的完整日期范围:用
GENERATE_DATE_ARRAY生成需要覆盖的日期区间,结合从销售表去重得到的产品列表交叉连接,得到每个产品每天的组合。 - 左关联销售表:将生成的完整序列和原销售表关联,没有匹配到销售记录的行,用
COALESCE把销售金额设为0。 - 用补全后的完整序列作为ARIMA_PLUS的输入,进行训练或预测。
示例SQL代码
WITH product_dates AS ( -- 生成所有目标产品的完整日期序列 SELECT p.product_id, date FROM ( -- 从销售表提取所有需要预测的产品 SELECT DISTINCT product_id FROM `your-project.your-dataset.sales_table` ) p CROSS JOIN UNNEST( GENERATE_DATE_ARRAY( DATE('2022-01-01'), -- 序列起始日期(根据你的数据调整) CURRENT_DATE(), -- 序列截止到当前日期 INTERVAL 1 DAY ) ) AS date ), full_sales_sequence AS ( -- 补全无销售日期的零值 SELECT pd.product_id, pd.date, COALESCE(s.sales_amount, 0) AS sales_amount FROM product_dates pd LEFT JOIN `your-project.your-dataset.sales_table` s ON pd.product_id = s.product_id AND pd.date = s.date ) -- 训练ARIMA_PLUS模型并预测未来30天 SELECT product_id, date, sales_amount, forecast_value, lower_bound, upper_bound FROM ML.FORECAST( MODEL `your-project.your-dataset.sales_forecast_model`, STRUCT(30 AS horizon), -- 预测未来30天,可调整 (SELECT * FROM full_sales_sequence) );
关键说明
- 这个方案完全基于查询动态生成完整序列,原销售表保持不变,不会产生额外存储开销。
- ARIMA_PLUS接收到的是包含零值的完整时间序列,训练和预测逻辑会自动识别无销售日期的零值,无需依赖模型的插值默认行为。
- 如果已经提前训练好模型,只需在预测阶段用同样的
full_sales_sequence逻辑构造输入数据即可。
内容的提问来源于stack exchange,提问作者federico giner
相关产品推荐
相关产品推荐

