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

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

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

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

このチュートリアルでは、一般公開テーブル 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 ベースの時系列モデルを作成していることを示します。予測を取得する入力データの 1 つ以上の列を指定するには、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 information criterion(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;

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

    階層型時系列の例。

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

次のステップ