使用单变量模型预测分层时序

本教程介绍了如何使用单变量时序模型预测分层时序。它会根据给定列的历史值预测该列的未来值,还会针对一个或多个感兴趣的维度计算该列的汇总值。

系统会针对每个时间点,以及指定感兴趣维度的一个或多个列中的每个值计算预测值。例如,如果您要预测每日交通事故,并指定了包含州级数据的维度列,则预测数据将包含州 A 的每天的值,然后是州 B 的每天的值,依此类推。如果您要预测每日交通事故和包含州和城市数据的指定维度列,则预测数据将包含州 A 和城市 A 的每天值,然后是州 A 和城市 B 的每天值,以此类推。在分层时序模型中,分层对账用于汇总每个子时序并将其与父时序进行对账。例如,州 A 中所有城市的预测值总和必须等于州 A 的预测值。

在本教程中,您可基于相同的数据创建两个时序模型,其中一个使用分层预测,另一个不使用。这样,您就可以比较这两个模型返回的结果。

本教程使用公共 bigquery-public-data.iowa_liquor.sales.sales 表中的数据。此表使用公开的爱荷华州酒类销售数据,包含不同商店中超过一百万种酒类商品的信息。

在阅读本教程之前,我们强烈建议您阅读使用单变量模型预测多个时序

所需权限

  • 如需创建数据集,您需要拥有 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 价格

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 新项目会自动启用 BigQuery。如需在现有项目中激活 BigQuery,请前往

    Enable the BigQuery API.

    Enable the API

创建数据集

创建 BigQuery 数据集以存储您的机器学习模型:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

    创建数据集。

  4. 创建数据集页面上,执行以下操作:

    • 数据集 ID 部分,输入 bqml_tutorial

    • 位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。

      公共数据集存储在 US 多区域中。为简单起见,请将数据集存储在同一位置。

    • 保持其余默认设置不变,然后点击创建数据集

      创建数据集页面。

创建时序模型

使用爱荷华州酒类销售数据创建一个时序模型。

以下 GoogleSQL 查询会创建一个模型,用于预测 2015 年波尔克县、林恩县和斯科特县的每日销售瓶数。

在以下查询中,OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) 子句指示您正在创建一个基于 ARIMA 的时序模型。您可以使用 CREATE MODEL 语句的 TIME_SERIES_ID 选项指定输入数据中要获取预测结果的一个或多个列。CREATE MODEL 语句的 auto_arima_max_order 选项可控制 auto.ARIMA 算法中超参数调节的搜索空间。CREATE MODEL 语句的 decompose_time_series 选项默认为 TRUE,以便在您在下一步中评估模型时返回有关时序数据的信息。

OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) 子句指示您正在创建一个基于 ARIMA 的时序模型。默认情况下,auto_arima=TRUE,因此 auto.ARIMA 算法会自动调整 ARIMA_PLUS 模型中的超参数。该算法适合数十个候选模型,选择具有最低 Akaike 信息标准 (AIC) 的模型。如果时序中存在美国节假日模式,则将 holiday_region 选项设置为 US 可以对这些美国节假日时间点进行更准确的建模。

请按照以下步骤创建模型:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下查询,然后点击运行

    CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS',
        TIME_SERIES_TIMESTAMP_COL = 'date',
        TIME_SERIES_DATA_COL = 'total_bottles_sold',
        TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
        HOLIDAY_REGION = 'US')
    AS
    SELECT
      store_number,
      zip_code,
      city,
      county,
      date,
      SUM(bottles_sold) AS total_bottles_sold
    FROM
      `bigquery-public-data.iowa_liquor_sales.sales`
    WHERE
      date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
      AND county IN ('POLK', 'LINN', 'SCOTT')
    GROUP BY store_number, date, city, zip_code, county;

    查询大约需要 37 秒才能完成,之后 liquor_forecast 模型会显示在探索器窗格中。由于查询使用 CREATE MODEL 语句来创建模型,因此没有查询结果。

使用模型预测数据

使用 ML.FORECAST 函数预测未来的时序值。

在以下查询中,STRUCT(20 AS horizon, 0.8 AS confidence_level) 子句指示查询会预测 20 个未来的时间点,并生成置信度为 80% 的预测区间。

如需使用模型预测数据,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下查询,然后点击运行

    SELECT *
    FROM
      ML.FORECAST(
        MODEL `bqml_tutorial.liquor_forecast`,
        STRUCT(20 AS horizon, 0.8 AS confidence_level))
    ORDER BY store_number, county, city, zip_code, forecast_timestamp;

    结果应如下所示:

    使用单变量模型预测多个时序

    输出以第一个时序的预测数据开头;store_number=2190zip_code=50314city=DES MOINEScounty=POLK。滚动浏览数据时,您会看到每个后续唯一时序的预测结果。若要生成汇总不同维度总和的预测(例如特定县/郡的预测),您必须生成分层预测。

创建分层时序模型

使用爱荷华州酒类销售数据创建分层时序预测。

以下 GoogleSQL 查询会创建一个模型,用于生成分层预测,对 2015 年波尔克县、林恩县和斯科特县销售的酒瓶总数进行分层预测。

在以下查询中,CREATE MODEL 语句中的 HIERARCHICAL_TIME_SERIES_COLS 选项表示您正在根据您指定的一组列创建分层预测。每一列都会进行汇总。例如,在上一个查询中,这意味着将 store_number 列值汇总在一起,以显示每个 countycityzip_code 值的预测。系统会将 zip_codestore_number 值分别汇总,以显示每个 countycity 值的预测数据。列顺序很重要,因为它定义了层次结构的结构。

请按照以下步骤创建模型:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下查询,然后点击运行

    CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS',
        TIME_SERIES_TIMESTAMP_COL = 'date',
        TIME_SERIES_DATA_COL = 'total_bottles_sold',
        TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
        HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'],
        HOLIDAY_REGION = 'US')
    AS
    SELECT
      store_number,
      zip_code,
      city,
      county,
      date,
      SUM(bottles_sold) AS total_bottles_sold
    FROM
      `bigquery-public-data.iowa_liquor_sales.sales`
    WHERE
      date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
      AND county IN ('POLK', 'LINN', 'SCOTT')
    GROUP BY store_number, date, city, zip_code, county;

    查询大约需要 45 秒才能完成,之后 bqml_tutorial.liquor_forecast_hierarchical 模型会显示在探索器窗格中。由于查询使用 CREATE MODEL 语句来创建模型,因此没有查询结果。

使用分层模型预测数据

使用 ML.FORECAST 函数从模型中检索分层预测数据。

如需使用模型预测数据,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下查询,然后点击运行

    SELECT
      *
    FROM
      ML.FORECAST(
        MODEL `bqml_tutorial.liquor_forecast_hierarchical`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level))
    WHERE city = 'LECLAIRE'
    ORDER BY county, city, zip_code, store_number, forecast_timestamp;

    结果应如下所示:

    分层时序示例。

    请注意 LeClaire 市 (store_number=NULLzip_code=NULLcity=LECLAIREcounty=SCOTT) 的汇总预测结果的显示方式。继续查看其余行,就会发现其他细分组的预测数据。例如,以下图片显示了针对邮政编码 52753store_number=NULLzip_code=52753city=LECLAIREcounty=SCOTT 汇总的天气预报:

    分层时序示例。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

  • 您可以删除自己创建的项目。
  • 或者,保留项目但删除数据集。

删除数据集

删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:

  1. 如有必要,请在Google Cloud 控制台中打开 BigQuery 页面。

    转到 BigQuery 页面

  2. 在导航窗格中,点击您创建的 bqml_tutorial 数据集。

  3. 点击窗口右侧的删除数据集。此操作会删除相关数据集、表和所有数据。

  4. 删除数据集对话框中,通过输入数据集的名称 (bqml_tutorial) 来确认该删除命令,然后点击删除

删除项目

要删除项目,请执行以下操作:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤