限制时序模型的预测值
本教程介绍了如何使用限制来缩小时序模型返回的预测结果的范围。在本教程中,您可基于相同的数据创建两个时序模型:一个为使用限制的模型,另一个为不使用限制的模型。这样,您就可以比较这些模型返回的结果,并了解指定限制之间的差异。
在本教程中,您将使用 new_york.citibike_trips
数据训练模型。此数据集包含有关纽约市花旗单车行程的信息。
在遵循本教程之前,您应该熟悉单个时序预测。如需简要了解本主题,请学完根据 Google Analytics 数据进行单个时序预测这一教程。
所需权限
- 如需创建数据集,您需要拥有
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 简介。
目标
在本教程中,您将使用以下内容:
CREATE MODEL
语句:用于创建一个时序模型。ML.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.
-
Enable the BigQuery API.
-
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.
-
Enable the BigQuery API.
创建数据集
创建 BigQuery 数据集以存储您的机器学习模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在创建数据集页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。保持其余默认设置不变,然后点击创建数据集。
Visualize the time series you want to forecast
在创建模型之前,最好先查看输入时序的情况。
在以下查询中,FROM bigquery-public-data.new_york.citibike_trips
子句指示您正在查询 new_york
数据集中的 citibike_trips
表。
在 SELECT
语句中,查询会使用 EXTRACT
函数 从 starttime
列中提取日期信息。该查询使用 COUNT(*)
子句获取花旗单车的每日总行程数。
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
如需运行查询,请按以下步骤操作:
在 Google Cloud 控制台中,点击编写新查询按钮。
在查询编辑器中输入以下 GoogleSQL 查询。
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
点击运行。查询类似于以下内容。
使用 Google Cloud 控制台为时序数据绘制图表。在查询结果窗格中,点击图表标签页。在图表配置窗格中,针对图表类型选择条形:
创建时序模型
使用纽约市花旗单车行程数据创建一个时序模型。
以下 GoogleSQL 查询会创建一个用于预测单车每日总行程数的模型。CREATE MODEL
语句将创建并训练一个名为 bqml_tutorial.nyc_citibike_arima_model
的模型。
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
子句指示您正在创建一个基于 ARIMA 的时序模型。默认情况下,auto_arima=TRUE
,因此 auto.ARIMA
算法会自动调整 ARIMA_PLUS
模型中的超参数。该算法适合数十个候选模型,选择具有最低 Akaike 信息标准 (AIC) 的模型。此外,由于默认设置为 data_frequency='AUTO_FREQUENCY'
,因此训练过程会自动推断输入时序的数据频率。默认情况下,CREATE MODEL
语句使用 decompose_time_series=TRUE
,因此时序的历史记录和预测部分都保存在模型中。设置参数 time_series_id_col = 'start_station_id'
会使模型使用基于 start_station_id
的单个查询拟合并预测多个时序。您可以使用此信息,通过获取单独的时间序列组件(如季节性周期)来进一步了解如何预测时序。
运行 CREATE MODEL
查询以创建并训练模型:
在 Google Cloud 控制台中,点击编写新查询按钮。
在查询编辑器中输入以下 GoogleSQL 查询。
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
点击运行。
查询大约需要 80 秒才能完成,之后您的模型 (
nyc_citibike_arima_model
) 会显示在探索器窗格中。由于查询使用CREATE MODEL
语句来创建模型,因此没有查询结果。
预测时序并直观呈现结果
为了说明时序的预测方式,请使用 ML.FORECAST
函数直观呈现所有子时序组件,例如季节性和趋势。
请按以下步骤进行此操作:
在 Google Cloud 控制台中,点击编写新查询按钮。
在查询编辑器中输入以下 GoogleSQL 查询。
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
点击运行。查询结果类似于以下内容:
使用 Google Cloud 控制台为时序数据绘制图表。在查询结果窗格中,点击图表标签页:
该图表显示了 start_station_id=79
时花旗单车每日总行程数的预测值是负数,这没什么用。相反,使用具有限制的模型可以改进预测数据。
创建具有限制的时序模型
使用纽约市花旗单车行程数据创建一个具有限制的时序模型。
以下 GoogleSQL 查询会创建一个用于预测单车每日总行程数的模型。CREATE MODEL
语句将创建并训练一个名为 bqml_tutorial.nyc_citibike_arima_model_with_limits
的模型。
此模型与您之前创建的模型的主要区别在于增加了 forecast_limit_lower_bound=0
选项。此选项使模型仅根据 time_series_data_col
参数指定的列中的值(在本例中为 num_trips
)预测大于 0 的值。
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
运行 CREATE MODEL
查询以创建并训练模型:
在 Google Cloud 控制台中,点击编写新查询按钮。
在查询编辑器中输入以下 GoogleSQL 查询。
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
点击运行。
查询大约需要 100 秒才能完成,之后您的模型 (
nyc_citibike_arima_model_with_limits
) 会显示在探索器窗格中。由于查询使用CREATE MODEL
语句来创建模型,因此没有查询结果。
使用具有限制的模型预测时序
在 Google Cloud 控制台中,点击编写新查询按钮。
在查询编辑器中输入以下 GoogleSQL 查询。
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id ORDER BY forecast_timestamp,start_station_id
点击运行。
使用 Google Cloud 控制台为时序数据绘制图表。在查询结果窗格中,点击图表标签页:
ARIMA PLUS 模型检测到 start_station_id=79
时花旗单车行程的每日总数正在减少。未来预测值将遵循此趋势,并从中确定未来时间的预测值。该图表显示了 start_station_id=79
时花旗单车每日总行程数的预测值是正数,这更有用。该具有限制的模型检测到 start_station_id=79
时花旗单车行程的每日总数正在减少,但这仍提供了有意义的预测值。
如本教程所示,forecast_limit_lower_bound
和 forecast_limit_upper_bound
选项可帮助您在与此处所示场景类似的场景中获得更有意义的预测值,例如在预测股票价格或未来销量时。
删除数据集
删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:
如有必要,请在 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.
后续步骤
- 了解如何使用纽约市花旗单车行程数据的单一查询进行多时序预测。
- 了解如何加速 ARIMA_PLUS 以在数小时内预测一百万个时序。
- 要详细了解机器学习,请参阅机器学习速成课程。
- 如需大致了解 BigQuery ML,请参阅 BigQuery ML 简介。
- 如需详细了解 Google Cloud 控制台,请参阅使用 Google Cloud 控制台。