単変量モデルを使用して階層型時系列を予測する

このチュートリアルでは、単変量時系列モデルを使用して階層型時系列を予測する方法について説明します。指定した列の過去の値に基づいて、その列の将来の値を予測します。また、対象とする 1 つ以上のディメンションについて、その列の統合値も計算します。

予測値は、対象のディメンションを指定する 1 つ以上の列の値ごとに、各時点について計算されます。たとえば、日次の交通規制を予測するために、州データを含むディメンション列を指定した場合、予測データには州 A の各日の値、州 B の各日の値などが含まれます。日次の交通規制を予測するために、州データと都市データを含むディメンション列を指定した場合、予測データには州 A と都市 A の各日の値、州 A と都市 B の各日の値などが含まれます。階層型時系列モデルでは、階層的な調整を使用してすべての子時系列を統合し、親と一致させます。たとえば、州 A のすべての都市の予測値の合計は、州 A の予測値と等しい必要があります。

このチュートリアルでは、同じデータに対して 2 つの時系列モデルを作成します。1 つは階層予測を使用するモデルで、もう 1 つは階層予測を使用しないモデルです。これにより、2 つのモデルから返された結果を比較できます。

このチュートリアルでは、一般公開テーブル bigquery-public-data.iowa_liquor.sales.sales のデータを使用します。このテーブルでは、アイオワ州の一般公開の酒類販売データが使用され、さまざまな店舗で扱われている 100 万点を超える酒類商品に関する情報が含まれています。

このチュートリアルを読む前に、単変量モデルを使用して複数の時系列を予測するをお読みになることを強くおすすめします。

必要な権限

  • データセットを作成するには、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

    に移動します。

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. 「アクションを表示」> [データセットを作成] をクリックします。

    データセットを作成する。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。

      一般公開データセットは US マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

      データセットの作成ページ。

時系列モデルを作成する

アイオワ州の酒類販売データを使用して時系列モデルを作成します。

次の GoogleSQL クエリは、2015 年にポーク、リン、スコットの各郡で 1 日あたりに販売されたボトルの合計数を予測するモデルを作成します。

次のクエリでは、OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) 句で ARIMA ベースの時系列モデルを作成することを指示しています。CREATE MODEL ステートメントの TIME_SERIES_ID オプションを使用して、予測を取得する入力データの 1 つ以上の列を指定します。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 モデルのハイパーパラメータが自動的に調整されます。アルゴリズムが多数の候補モデルを学習し、赤池情報量規準(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 年にポーク、リン、スコットの各郡で 1 日あたりに販売されたボトルの合計数の階層予測を生成するモデルを作成します。

次のクエリでは、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;

    結果は次のようになります。

    階層型時系列の例。

    ルクレア市について集計された予測がどのように表示されているのかに注目しましょう(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.

次のステップ