このチュートリアルでは、多変量時系列モデルを使用して、複数の入力特徴の過去の値に基づいて、特定の列の将来の値を予測する方法について説明します。
このチュートリアルでは、複数の時系列の予測を行います。予測値は、指定された 1 つ以上の列の値ごとに、各時点について計算されます。たとえば、天気を予測し、州データを含む列を指定した場合、予測データには、州 A のすべての時間ポイントの予測と、州 B のすべての時間ポイントの予測値が含まれます。天気を予測し、州と都市のデータを含む列を指定した場合、予測データには、州 A と都市 A のすべての時間ポイントの予測と、州 A と都市 B のすべての時間ポイントの予測値が含まれます。
このチュートリアルでは、公開されている bigquery-public-data.iowa_liquor_sales.sales
テーブルと bigquery-public-data.covid19_weathersource_com.postal_code_day_history
テーブルのデータを使用します。bigquery-public-data.iowa_liquor_sales.sales
テーブルには、アイオワ州の複数の都市から収集された酒類販売データが含まれています。bigquery-public-data.covid19_weathersource_com.postal_code_day_history
テーブルには、世界中の過去の気象データ(温度や湿度など)が含まれています。
このチュートリアルを読む前に、多変量モデルを使用して 1 つの時系列を予測するをお読みになることを強くおすすめします。
目標
このチュートリアルでは、次のタスクの手順について説明します。
CREATE MODEL
ステートメントを使用して、酒屋の注文を予測する時系列モデルを作成します。ML.FORECAST
関数を使用して、モデルから予測された注文値を取得します。ML.EXPLAIN_FORECAST
関数を使用して、季節性、トレンド、特徴アトリビューションなどの時系列のコンポーネントを取得します。これらの時系列コンポーネントを調べて、予測値を説明できます。ML.EVALUATE
関数を使用してモデルの精度を評価します。ML.DETECT_ANOMALIES
関数でモデルを使用して異常を検出します。
料金
このチュートリアルでは、 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.
に移動します。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
入力データのテーブルを作成する
モデルのトレーニングと評価に使用できるデータのテーブルを作成します。このテーブルは、bigquery-public-data.iowa_liquor_sales.sales
テーブルと bigquery-public-data.covid19_weathersource_com.postal_code_day_history
テーブルの列を結合して、天気が酒屋で注文される商品の種類と数にどのように影響するかを分析します。また、モデルの入力変数として使用できる次の列も作成します。
date
: 注文日store_number
: 注文した店舗の一意の番号item_number
: 注文されたアイテムの一意の番号bottles_sold
: 関連するアイテムの注文したボトル数temperature
: 注文日における店舗の平均気温humidity
: 注文日における店舗の平均湿度
入力データテーブルを作成するには、次の操作を行います。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
CREATE OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE SAFE_CAST(postal_code AS INT64) IS NOT NULL ), avg_weather AS ( SELECT DATE, zip_code, AVG(temperature) AS temperature, AVG(humidity) AS humidity, FROM weather GROUP BY DATE, zip_code ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, avg_weather.temperature AS temperature, avg_weather.humidity AS humidity FROM aggregated_sales LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code AND aggregated_sales.DATE=avg_weather.DATE;
時系列モデルを作成する
時系列モデルを作成して、2022 年 9 月 1 日より前の bqml_tutorial.iowa_liquor_sales_with_weather
テーブル内の日付ごとに、店舗 ID と商品 ID の組み合わせごとに販売されたボトル数を予測します。予測中に評価する特徴として、各日の店舗の平均気温と湿度を使用します。bqml_tutorial.iowa_liquor_sales_with_weather
テーブルには、商品番号と店舗番号の組み合わせが約 100 万個あります。つまり、予測する時系列が 100 万個あるということです。
次の手順でモデルを作成します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
CREATE OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
クエリが完了するまでに約 38 分かかります。完了後、
multi_time_series_arimax_model
モデルが [エクスプローラ] ペインに表示されます。クエリはCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果は表示されません。
モデルを使用してデータを予測する
ML.FORECAST
関数を使用して、将来の時系列値を予測します。
次の GoogleSQL クエリの STRUCT(5 AS horizon, 0.8 AS confidence_level)
句は、5 個の将来の時点を予測し、信頼度レベル 80% の予測間隔を生成するように指示します。
ML.FORECAST
関数の入力データのデータシグネチャは、モデルの作成に使用したトレーニング データのデータシグネチャと同じです。bottles_sold
列は、モデルが予測しようとしているデータであるため、入力に含まれません。
次の手順でモデルを使用し、データを予測します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
結果は次のようになります。
出力行は、
store_number
値、item_ID
値、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(5 AS horizon, 0.8 AS confidence_level)
句は、30 個の将来の時点を予測し、信頼度 80% の予測間隔を生成するように指示します。
ML.EXPLAIN_FORECAST
関数は、過去のデータと予測データの両方を提供します。予測データのみを表示するには、クエリに time_series_type
オプションを追加し、オプション値として forecast
を指定します。
モデルの結果を説明する手順は次のとおりです。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.EXPLAIN_FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果は次のようになります。
出力行は、
time_series_timestamp
列の値で時系列順に表示されます。出力列の詳細については、
ML.EXPLAIN_FORECAST
をご覧ください。
予測の精度を評価する
モデルがトレーニングされていないデータでモデルを実行して、モデルの予測精度を評価します。これを行うには、ML.EVALUATE
関数を使用します。ML.EVALUATE
関数は、各時系列を個別に評価します。
次の GoogleSQL クエリでは、2 番目の SELECT
ステートメントで将来の特徴を含むデータを提供します。このデータは、実際のデータと比較して将来の値を予測するために使用されます。
モデルの精度を評価する手順は次のとおりです。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果は次のようになります。
出力列の詳細については、
ML.EVALUATE
をご覧ください。
モデルを使用して異常を検出する
ML.DETECT_ANOMALIES
関数を使用して、トレーニング データの異常を検出します。
次のクエリでは、STRUCT(0.95 AS anomaly_prob_threshold)
句により、ML.DETECT_ANOMALIES
関数は 95% の信頼度で異常なデータポイントを特定します。
トレーニング データ内の異常を検出する手順は次のとおりです。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
結果は次のようになります。
結果の
anomaly_probability
列には、特定のbottles_sold
列値が異常である可能性を示します。出力列の詳細については、
ML.DETECT_ANOMALIES
をご覧ください。
新しいデータの異常を検出する
ML.DETECT_ANOMALIES
関数に入力データを渡して、新しいデータの異常を検出します。新しいデータのデータ署名は、トレーニング データと同じである必要があります。
新しいデータの異常を検出する手順は次のとおりです。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
結果は次のようになります。
クリーンアップ
このチュートリアルで使用したリソースについて、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 と ML の概要で確認する。