BigQuery ML中支持多变量多时间序列的销售预测模型选型咨询
多品类带事件变量的销售预测解决方案
BigQuery原生批量多变量多序列模型实现
利用ARIMA_PLUS_XREG的分区训练能力
无需手动循环300次,通过指定TIME_SERIES_ID_COL参数,BigQuery会自动为每个品类(序列ID)单独训练带外生变量的模型。具体SQL示例:CREATE OR REPLACE MODEL `your_project.your_dataset.multi_category_forecast` OPTIONS( MODEL_TYPE='ARIMA_PLUS_XREG', TIME_SERIES_TIMESTAMP_COL='日期', TIME_SERIES_DATA_COL='销售额', TIME_SERIES_ID_COL='品类ID', -- 按品类ID自动分区训练每个序列 AUTO_ARIMA=TRUE, DATA_FREQUENCY='DAILY' ) AS SELECT 品类ID, 日期, 销售额, 是否有促销事件 AS event_promotion, -- 事件变量作为外生输入 是否有节日 AS event_holiday FROM `your_project.your_dataset.sales_history_with_events`;训练完成后,直接用该模型批量预测所有品类的销售额,无需单独调用每个序列的模型。
关键注意点
- 保证每个品类的时间序列数据有足够长度(建议至少1年历史数据)
- 事件变量需与时间戳严格对应,避免时间错位导致模型偏差
其他简易多变量多序列可选模型
如果BigQuery方案不符合需求,可考虑以下轻量实现:
- Facebook Prophet批量训练
Prophet原生支持添加事件/节假日作为外生变量,通过Python并行库可快速处理300个序列。示例代码:from prophet import Prophet import pandas as pd from joblib import Parallel, delayed def train_single_category(df, cat_id): # 筛选当前品类数据 cat_data = df[df['品类ID'] == cat_id].rename(columns={'日期': 'ds', '销售额': 'y'}) model = Prophet() # 添加事件变量 model.add_regressor('event_promotion') model.add_regressor('event_holiday') model.fit(cat_data) # 生成未来预测时间范围并填充事件变量 future = model.make_future_dataframe(periods=30) future['event_promotion'] = get_future_events(future, 'promotion') future['event_holiday'] = get_future_events(future, 'holiday') # 生成预测结果 forecast = model.predict(future) return forecast.assign(品类ID=cat_id) # 并行训练所有品类 sales_data = pd.read_gbq('SELECT * FROM your_project.your_dataset.sales_history_with_events') all_forecasts = Parallel(n_jobs=-1)( delayed(train_single_category)(sales_data, cat_id) for cat_id in sales_data['品类ID'].unique() ) final_forecast_df = pd.concat(all_forecasts) - 统一式树模型(LightGBM/XGBoost)
将时间特征(滞后销售额、滚动均值)、事件变量、品类属性作为输入,训练一个全局模型预测销售额。这种方式无需为每个序列单独训练,适合品类间存在共性规律的场景,实现成本低且推理速度快。
内容的提问来源于stack exchange,提问作者Cristian Avendaño
相关产品推荐
相关产品推荐

