本教程介绍了如何使用单变量时序模型根据给定列的历史值预测该列的未来值。
本教程将预测单个时序。系统会针对输入数据中的每个时间点计算一次预测值。
本教程使用公共 bigquery-public-data.google_analytics_sample.ga_sessions
示例表中的数据。此表格包含来自 Google Merchandise Store 的经过模糊处理的电子商务数据。
目标
本教程将指导您完成以下任务:
- 使用
CREATE MODEL
语句创建时序模型,以预测网站流量。 - 使用
ML.ARIMA_EVALUATE
函数评估模型中的自动回归集成移动平均线 (ARIMA) 信息。 - 使用
ML.ARIMA_COEFFICIENTS
函数检查模型系数。 - 使用
ML.FORECAST
函数从模型中检索预测的网站流量信息。 - 使用
ML.EXPLAIN_FORECAST
函数检索时序的组件,例如季节性和趋势。您可以检查这些时序组成部分,以便解释预测值。
费用
本教程使用 Google Cloud 的收费组件,包括以下组件:
- BigQuery
- BigQuery ML
如需详细了解 BigQuery 费用,请参阅 BigQuery 价格页面。
如需详细了解 BigQuery ML 费用,请参阅 BigQuery ML 价格。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 新项目会自动启用 BigQuery。如需在现有项目中激活 BigQuery,请前往
Enable the BigQuery API.
所需权限
- 如需创建数据集,您需要拥有
bigquery.datasets.create
IAM 权限。 如需创建连接资源,您需要以下权限:
bigquery.connections.create
bigquery.connections.get
如需创建模型,您需要以下权限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
如需运行推理,您需要以下权限:
bigquery.models.getData
bigquery.jobs.create
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅 IAM 简介。
创建数据集
创建 BigQuery 数据集以存储您的机器学习模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在创建数据集页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。保持其余默认设置不变,然后点击创建数据集。
直观呈现输入数据
在创建模型之前,您可以选择可视化输入时序数据,以了解其分布情况。您可以使用 Looker 数据洞察执行此操作。
如需可视化时序数据,请按以下步骤操作:
SQL
在以下 GoogleSQL 查询中,SELECT
语句将输入表中的 date
列解析为 TIMESTAMP
类型,并将其重命名为 parsed_date
,然后使用 SUM(...)
子句和 GROUP BY date
子句创建每日 totals.visits
值。
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date;
查询完成后,依次点击探索数据 > Explore with Looker Studio(使用 Looker 数据洞察探索)。Looker 数据洞察将在新标签页中打开。在该新标签页中完成以下步骤。
在 Looker Studio 中,依次点击插入 > 时间序列图表。
在图表窗格中,选择设置标签页。
在指标部分中,添加 total_visits 字段,然后移除默认的 Record Count 指标。生成的图表类似于以下内容:
从图表中,您可以看到输入时序具有每周的季节性模式。
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
结果类似于以下内容:
创建时序模型
创建一个时序模型来预测 totals.visits
列表示的网站总访问量,并使用 Google Analytics 360 数据对其进行训练。
在以下查询中,OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
子句指示您正在创建一个基于 ARIMA 的时序模型。CREATE MODEL
语句的 auto_arima
选项默认为 TRUE
,因此 auto.ARIMA
算法会自动调整模型中的超参数。该算法适合数十个候选模型,选择具有最低 Akaike 信息标准 (AIC) 的最佳模型。CREATE MODEL
语句的 data_frequency
选项默认为 AUTO_FREQUENCY
,因此训练过程会自动推断输入时间序列的数据频率。CREATE MODEL
语句的 decompose_time_series
选项默认为 TRUE
,以便在您在下一步中评估模型时返回有关时序数据的信息。
请按照以下步骤创建模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'parsed_date', time_series_data_col = 'total_visits', auto_arima = TRUE, data_frequency = 'AUTO_FREQUENCY', decompose_time_series = TRUE ) AS SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date;
查询大约需要 4 秒才能完成,之后
ga_arima_model
模型会显示在探索器窗格中。由于查询使用CREATE MODEL
语句来创建模型,因此您看不到查询结果。
评估候选模型
使用 ML.ARIMA_EVALUATE
函数评估时序模型。ML.ARIMA_EVALUATE
函数会显示自动超参数调整过程中评估的所有候选模型的评估指标。
请按照以下步骤评估模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.ga_arima_model`);
结果应如下所示:
non_seasonal_p
、non_seasonal_d
、non_seasonal_q
和has_drift
输出列定义了训练流水线中的 ARIMA 模型。log_likelihood
、AIC
和variance
输出列与 ARIMA 模型拟合过程相关。auto.ARIMA
算法使用 KPSS 测试来确定non_seasonal_d
的最佳值,在本例中为1
。当non_seasonal_d
为1
时,auto.ARIMA
算法会并行训练 42 个不同的候选 ARIMA 模型。在此示例中,所有 42 个候选模型均有效,因此输出将包含 42 行,每行对应一个候选 ARIMA 模型;如果其中一些模型无效,则会从输出中排除。这些候选模型将按照 AIC 升序返回。第一行中的模型具有最低的 AIC,它被视为最佳模型。最佳模型将保存为最终模型,并在您对模型调用ML.FORECAST
等函数时使用seasonal_periods
列包含有关时序数据中识别出的季节性模式的信息。它与 ARIMA 建模无关,因此在所有输出行中都具有相同的值。它会报告每周模式,这与您选择可视化输入数据时看到的结果一致。仅当
decompose_time_series=TRUE
时,才会填充has_holiday_effect
、has_spikes_and_dips
和has_step_changes
列。这些列还反映了输入时序数据的相关信息,与 ARIMA 建模无关。这些列在所有输出行中的值也相同。error_message
列显示auto.ARIMA
拟合过程中发生的所有错误。出现错误的一个可能原因是所选non_seasonal_p
、non_seasonal_d
、non_seasonal_q
和has_drift
列无法稳定时序。如需检索所有候选模型的错误消息,请在创建模型时将show_all_candidate_models
选项设置为TRUE
。如需详细了解输出列,请参阅
ML.ARIMA_EVALUATE
函数。
检查模型的系数
使用 ML.ARIMA_COEFFICIENTS
函数检查时序模型的系数。
如需检索模型的系数,请按以下步骤操作:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.ga_arima_model`);
结果应如下所示:
ar_coefficients
输出列显示了 ARIMA 模型的自动回归 (AR) 部分的模型系数。同样,ma_coefficients
输出列显示了 ARIMA 模型的移动平均 (MA) 部分的模型系数。这两个列都包含数组值,其长度分别等于non_seasonal_p
和non_seasonal_q
。您在ML.ARIMA_EVALUATE
函数的输出中看到,最佳模型的non_seasonal_p
值为2
,non_seasonal_q
值为3
。因此,在ML.ARIMA_COEFFICIENTS
输出中,ar_coefficients
值是一个 2 个元素的数组,ma_coefficients
值是一个 3 个元素的数组。intercept_or_drift
值是 ARIMA 模型中的常量项。如需详细了解输出列,请参阅
ML.ARIMA_COEFFICIENTS
函数。
使用模型预测数据
使用 ML.FORECAST
函数预测未来的时序值。
在以下 GoogleSQL 查询中,STRUCT(30 AS horizon, 0.8 AS confidence_level)
子句指示查询会预测 30 个未来的时间点,并生成置信度为 80% 的预测区间。
如需使用模型预测数据,请按以下步骤操作:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level));
结果应如下所示:
输出行按
forecast_timestamp
列值的时间顺序排序。在时序预测中,由prediction_interval_lower_bound
和prediction_interval_upper_bound
列值表示的预测区间与forecast_value
列值一样重要。forecast_value
值是预测区间的中点。预测区间取决于standard_error
和confidence_level
列值。如需详细了解输出列,请参阅
ML.FORECAST
函数。
解释预测结果
除了预测数据之外,您还可以使用 ML.EXPLAIN_FORECAST
函数获取可解释性指标。ML.EXPLAIN_FORECAST
函数会预测未来的时序值,同时返回该时序的所有单独的组件。
与 ML.FORECAST
函数类似,ML.EXPLAIN_FORECAST
函数中使用的 STRUCT(30 AS horizon, 0.8 AS confidence_level)
子句指示查询会预测 30 个未来的时间点,并生成置信度为 80% 的预测区间。
请按照以下步骤解释模型的结果:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level));
结果应如下所示:
输出行按
time_series_timestamp
列值的时间顺序排序。如需详细了解输出列,请参阅
ML.EXPLAIN_FORECAST
函数。如果您想直观呈现结果,可以按照直观呈现输入数据部分中所述的方法使用 Looker Studio 创建图表,并使用以下列作为指标:
time_series_data
prediction_interval_lower_bound
prediction_interval_upper_bound
trend
seasonal_period_weekly
step_changes
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
- 删除您在教程中创建的项目。
- 或者,保留项目但删除数据集。
删除数据集
删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:
如有必要,请在 Google Cloud 控制台中打开 BigQuery 页面。
在导航窗格中,点击您创建的 bqml_tutorial 数据集。
点击窗口右侧的删除数据集。此操作会删除相关数据集、表和所有数据。
在删除数据集对话框中,输入您的数据集的名称 (
bqml_tutorial
),然后点击删除以确认删除命令。
删除项目
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 了解如何使用多变量模型预测单个时序
- 了解如何使用单变量模型预测多个时序
- 了解如何在预测包含多行数据的多个时序时扩展单变量模型。
- 了解如何使用单变量模型对多个时序进行分层预测
- 如需大致了解 BigQuery ML,请参阅 BigQuery 中的 AI 和机器学习简介。