本教程介绍了如何使用单变量时序模型根据给定列的历史值来预测该列的未来值。
本教程将预测单个时序。系统会针对输入数据中的每个时间点计算一次预测值。
本教程使用来自公开的 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.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
如需运行推理,您需要以下权限:
bigquery.models.getData
bigquery.jobs.create
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅 IAM 简介。
创建数据集
创建 BigQuery 数据集以存储机器学习模型。
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。- 保持其余默认设置不变,然后点击创建数据集。
bq
如需创建新数据集,请使用带有 --location
标志的 bq mk
命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset
命令参考文档。
创建一个名为
bqml_tutorial
的数据集,并将数据位置设置为US
,说明为BigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
该命令使用的不是
--dataset
标志,而是-d
快捷方式。如果省略-d
和--dataset
,该命令会默认创建一个数据集。确认已创建数据集:
bq ls
API
使用已定义的数据集资源调用 datasets.insert
方法。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
直观呈现输入数据
在创建模型之前,您可以选择直观呈现输入时序数据,以了解分布情况。您可以使用 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;
查询完成后,依次点击探索数据 > 使用 Looker Studio 探索。Looker Studio 将在新标签页中打开。在该新标签页中完成以下步骤。
在 Looker Studio 中,依次点击插入 > 时序图表。
在图表窗格中,选择设置标签页。
在指标部分,添加 total_visits 字段,并移除默认的记录数指标。生成的图表如下所示:
从图表中,您可以看到输入时序具有每周的季节性模式。
。
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
结果类似于以下内容:
创建时序模型
创建一个时序模型来预测由 totals.visits
列表示的网站总访问量,并使用 Google Analytics 360 数据对其进行训练。
SQL
在以下查询中,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
语句来创建模型,因此您看不到查询结果。
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
评估候选模型
SQL
使用 ML.ARIMA_EVALUATE
函数评估时序模型。ML.ARIMA_EVALUATE
函数会显示自动超参数调整过程中评估的所有候选模型的评估指标。
请按照以下步骤评估模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,粘贴以下查询,然后点击运行:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.ga_arima_model`);
结果应如下所示:
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
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
函数。
检查模型的系数
SQL
使用 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
函数。
BigQuery DataFrame
使用 coef_
函数检查时序模型的系数。
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
ar_coefficients
输出列显示了 ARIMA 模型的自动回归 (AR) 部分的模型系数。同样,ma_coefficients
输出列显示了 ARIMA 模型的移动平均 (MA) 部分的模型系数。这两个列都包含数组值,其长度分别等于 non_seasonal_p
和 non_seasonal_q
。
使用模型预测数据
SQL
使用 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));
结果应如下所示:
BigQuery DataFrame
使用 predict
函数预测未来的时序值。
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置 ADC。
输出行按 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 和机器学习简介。