使用ARIMA_PLUS的BigQuery ML预测(大多数)忽略了假日效应



我正在尝试使用过去5年的每日销售历史来预测企业的每日销售额。这个业务有非常清晰的假日销售模式,复活节/感恩节/圣诞节的销售为零,而情人节、母亲节等的销售异常高。

结果模型中只有两个日期具有非零假日效应:12月23日和总统日。我不明白为什么。

我在BigQuery ML中使用ARIMA_PLUS模型类型,holiday_region设置为'US'。数据仅为datesales

CREATE OR REPLACE MODEL `model_name`
OPTIONS(MODEL_TYPE='ARIMA_PLUS',
time_series_timestamp_col='date',
time_series_data_col='sales',
data_frequency='DAILY',
holiday_region='US') AS
( SELECT date, sales FROM `table_name`);

一个明显的预测错误的例子是2023年4月9日(复活节)被预测为正常销售日(而不是零),并且2023年4月17日被预测为零。由于复活节,该业务于2022年4月17日关闭,因此该模型显然忽略了复活节假期,因此提供了不准确的预测。

我使用EXPLAIN_FORECAST函数来查看是否有任何日子有假日效应,这是我发现它只是12月23日和总统日。在5年的历史中,每年的这两天都有调整。其余日期的holiday_effect字段为零。

SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `model_name`, STRUCT(14 AS horizon, 0.8 AS confidence_level));

知道为什么模型忽略了除了这两个假期以外的所有假期吗?这是BigQuery ML的缺陷,还是我的设置有问题?

2023-04-17的下降可能是YEARLY的季节性影响的结果。

在您的模型创建设置中,SEASONALITY默认为AUTO。假设您的数据频率为DAILY,时间序列长度大于2 years,它将自动推断SEASONALITYWEEKLYYEARLY。这一次确实是YEARLY的季节性导致了2022的下降。

为了解决这个问题,您可以在OPTIONS子句中显式地设置SEASONALITY = ['WEEKLY'],以避免使用YEARLY季节性进行建模。

相关内容

  • 没有找到相关文章

最新更新