我正在尝试使用过去5年的每日销售历史来预测企业的每日销售额。这个业务有非常清晰的假日销售模式,复活节/感恩节/圣诞节的销售为零,而情人节、母亲节等的销售异常高。
结果模型中只有两个日期具有非零假日效应:12月23日和总统日。我不明白为什么。
我在BigQuery ML中使用ARIMA_PLUS模型类型,holiday_region
设置为'US'。数据仅为date
和sales
。
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
,它将自动推断SEASONALITY
为WEEKLY
和YEARLY
。这一次确实是YEARLY
的季节性导致了2022
的下降。
为了解决这个问题,您可以在OPTIONS
子句中显式地设置SEASONALITY = ['WEEKLY']
,以避免使用YEARLY
季节性进行建模。