BQML的多变量时间序列预测
BQML多变量时间序列预测
去年冬天,我在乌兹别克斯坦首都塔什干举办的GDG DevFest Tashkent 2022上做了一个关于“使用BQML进行更可预测的时间序列模型” 的演讲。
我原本计划在DevFest结束后分享演讲中使用的一些材料和代码,但是时间过去了,BQML发布了一些新功能,部分内容有重叠。
因此,我将简要提及新功能和一些仍然有效的内容。
时间序列模型和BQML
许多组织都使用时间序列数据进行各种目的,需要注意的是,“预测性分析”是关于时间中的“未来”。时间序列预测分析在短期、中期和长期中都有使用,虽然存在许多不准确性和风险,但也在不断改进。
由于“预测”似乎非常有用,如果你有时间序列数据,你可能会想应用时间序列预测模型。但是时间序列预测模型通常需要大量的计算资源,如果你有大量数据,计算资源需求会更大。因此,处理时间序列数据,加载到分析环境并进行分析是繁琐且困难的。
如果你正在使用Google BigQuery进行数据管理,你可以使用BQML(BigQuery ML)简单、易用、快速地将机器学习算法应用于数据。许多人使用BigQuery处理大量数据,其中很多数据通常是时间序列数据。BQML也支持时间序列模型。
目前BQML支持的时间序列模型的基础是自回归综合移动平均(ARIMA)模型。ARIMA模型仅利用现有时间序列数据进行预测,已知在短期预测性能上表现良好,由于结合了自回归和移动平均,它是一个可以涵盖广泛时间序列模型的流行模型。
然而,这个模型整体上对计算资源要求较高,并且仅利用具有正常性的时间序列数据,难以在存在趋势或季节性的情况下使用。因此,BQML的ARIMA_PLUS模型包括了几个附加功能选项。你可以为模型添加时间序列分解、季节性因素、峰值和低谷、系数变化等,或者可以逐个进行调整。我个人也喜欢自动加入节假日选项来调整周期性的能力,这是使用一个不需要手动添加与日期相关信息的平台的好处之一。
你可以参考这个页面获取更多信息。
然而,在实际应用中,时间序列预测并不像这么简单。当然,我们已经能够使用ARIMA_PLUS识别多个周期并为多个时间序列添加干预措施,但与时间序列数据相关的外部因素很多,并且只有很少的事件是孤立发生的。在时间序列数据中,找到平稳性可能是困难的。
在原始演讲中,我探讨了如何处理这些实际应用的时间序列数据以创建预测模型- 将这些时间序列进行分解,清理分解后的数据,将其导入Python,然后与其他变量进行组合以创建多变量时间序列函数,估计因果关系并将其纳入预测模型中,估计效应随事件变化的程度。
新功能:ARIMA_PLUS_XREG
在过去几个月中,BQML中已经成为一个正式功能的一个新功能是使用外部变量创建多变量时间序列函数(ARIMA_PLUS_XREG,以下简称XREG)。
你可以在这里阅读更多相关信息(截至2023年7月,该功能仍处于预览状态,但我猜测将在今年晚些时候发布)。
我应用了官方教程来看看它与传统单变量时间序列模型相比如何,并且我们可以看到它的工作原理。
步骤与教程中的相同,所以我不会重复它们,但是这里是我创建的两个模型。首先,我创建了一个传统的ARIMA_PLUS模型,然后使用相同的数据创建了一个XREG模型,但是在时间上添加了温度和风速。
# ARIMA_PLUS
# ARIMA_PLUS
CREATE OR REPLACE MODEL test_dt_us.seattle_pm25_plus_model
OPTIONS (
MODEL_TYPE = 'ARIMA_PLUS',
time_series_timestamp_col = 'date',
time_series_data_col = 'pm25') AS
SELECT date, pm25
FROM test_dt_us.seattle_air_quality_daily
WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
#ARIMA_PLUS_XREG
CREATE OR REPLACE MODEL test_dt_us.seattle_pm25_xreg_model
OPTIONS (
MODEL_TYPE = 'ARIMA_PLUS_XREG',
time_series_timestamp_col = 'date',
time_series_data_col = 'pm25') AS
SELECT date, pm25, temperature, wind_speed
FROM test_dt_us.seattle_air_quality_daily
WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
使用这些多个数据的模型可能如下所示
两个模型使用ML.Evaluate进行比较。
SELECT *
FROM ML.EVALUATE
( MODEL test_dt_us.seattle_pm25_plus_model,
( SELECT date, pm25
FROM test_dt_us.seattle_air_quality_daily
WHERE date > DATE('2020-12-31') ))
SELECT *
FROM ML.EVALUATE
( MODEL test_dt_us.seattle_pm25_xreg_model,
( SELECT date, pm25, temperature, wind_speed
FROM test_dt_us.seattle_air_quality_daily
WHERE date > DATE('2020-12-31') ),
STRUCT( TRUE AS perform_aggregation, 30 AS horizon))
结果如下。
ARIMA_PLUS
ARIMA_PLUS_XREG
你可以看到XREG模型在基本性能指标(如MAE、MSE和MAPE)上领先。(显然,这不是一个完美的解决方案,是数据相关的,我们只能说我们得到了另一个有用的工具。)
多变量时间序列分析是许多情况下的必备选项,但由于各种原因往往难以应用。现在,如果原因在于数据和分析步骤,我们可以使用它。看起来我们有一个不错的选择,所以了解它并希望它在许多情况下都能有用。 JeongMin Kwon 是一名自由职业的高级数据科学家,拥有10+年的实际经验,利用机器学习模型和数据挖掘。