このチュートリアルでは、単変量時系列モデルを使用して、特定の列の過去の値に基づいて、その列の将来の値を予測する方法について説明します。
このチュートリアルでは、複数の時系列の予測を行います。予測値は、指定された 1 つ以上の列の値ごとに、各時点について計算されます。たとえば、天気を予測し、都市データを含む列を指定した場合、予測データには、都市 A のすべての時間ポイントの予測と、都市 B のすべての時間ポイントの予測値が含まれます。
このチュートリアルでは、一般公開テーブル bigquery-public-data.new_york.citibike_trips
のデータを使用します。このテーブルには、ニューヨーク市でのシティバイクの利用回数に関する情報が含まれています。
このチュートリアルを読む前に、単変量モデルを使用して 1 つの時系列を予測するをお読みになることを強くおすすめします。
目標
このチュートリアルでは、次のタスクの手順について説明します。
CREATE MODEL
ステートメントを使用して、自転車の利用回数を予測する時系列モデルを作成します。ML.ARIMA_EVALUATE
関数を使用して、モデル内の自己回帰統合移動平均(ARIMA)情報を評価します。ML.ARIMA_COEFFICIENTS
関数を使用してモデルの係数を検査します。ML.FORECAST
関数を使用して、モデルから予測された自転車走行情報を取得します。ML.EXPLAIN_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.
-
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.
に移動します。
必要な権限
データセットを作成するには、
bigquery.datasets.create
IAM 権限が必要です。モデルを作成するには、次の権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
推論を実行するには、次の権限が必要です。
bigquery.models.getData
bigquery.jobs.create
BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。- 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
bq
新しいデータセットを作成するには、--location
フラグを指定した bq mk
コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset
コマンドのリファレンスをご覧ください。
データのロケーションが
US
に設定され、BigQuery ML tutorial dataset
という説明の付いた、bqml_tutorial
という名前のデータセットを作成します。bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
このコマンドでは、
--dataset
フラグの代わりに-d
ショートカットを使用しています。-d
と--dataset
を省略した場合、このコマンドはデフォルトでデータセットを作成します。データセットが作成されたことを確認します。
bq ls
API
定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
入力データを可視化する
モデルを作成する前に、必要に応じて入力時系列データを可視化して分布を把握できます。これは、Looker Studio を使用して行います。
SQL
次のクエリの SELECT
ステートメントは、EXTRACT
関数を使用して、starttime
列から日付情報を抽出します。さらに、COUNT(*)
句を使用して、1 日あたりのシティバイクの合計利用回数を取得します。
時系列データを可視化する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date;
クエリが完了したら、[データを探索] > [Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。新しいタブで次の操作を行います。
Looker Studio で、[挿入] > [期間グラフ] をクリックします。
[グラフ] ペインで、[設定] タブを選択します。
[指標] セクションで、num_trips フィールドを追加し、デフォルトの指標である [レコード数] を削除します。作成されたグラフは次のようになります。
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
時系列モデルを作成する
シティバイク ステーションごとの自転車利用回数を予測したいとします。この場合、入力データに含まれるシティバイク ステーションごとに 1 つずつ、多くの時系列モデルが必要になります。これは複数のモデルを作成すればできますが、特に多数の時系列が存在する場合に、作成に手間や時間がかかる可能性があります。代わりに、1 つのクエリを使用して一連の時系列モデルを作成して適合させ、複数の時系列を一度に予測できます。
SQL
次のクエリの OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
句は、ARIMA ベースの時系列モデルを作成していることを示します。CREATE MODEL
ステートメントの time_series_id_col
オプションを使用して、予測を取得する入力データの 1 つ以上の列(この場合は、start_station_name
列で表されるシティバイク ステーション)を指定します。WHERE
句を使用して、名前に Central Park
が含まれるステーションに限定します。CREATE MODEL
ステートメントの auto_arima_max_order
オプションは、auto.ARIMA
アルゴリズムでのハイパーパラメータ チューニングの検索空間を制御します。CREATE MODEL
ステートメントの decompose_time_series
オプションはデフォルトで TRUE
に設定されているため、次のステップでモデルを評価するときに時系列データに関する情報が返されます。
次の手順でモデルを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date;
クエリが完了するまでに約 24 秒かかります。完了後、
nyc_citibike_arima_model_group
モデルが [エクスプローラ] ペインに表示されます。クエリはCREATE MODEL
ステートメントを使用するため、クエリの結果は表示されません。
このクエリでは、入力データ内の 12 個のシティバイクの出発ステーションごとに 1 つずつ、12 個の時系列モデルを作成します。所要時間は約 24 秒です。並列処理を行うため、これは 1 つの時系列モデルを作成する場合の 1.4 倍程度にすぎません。ただし、WHERE ... LIKE ...
句を削除すると、600 以上の時系列が予測され、スロットの容量の制限により、時系列の予測が完全に並列では処理されない可能性があります。その場合、クエリが完了するまでに約 15 分かかることがあります。モデルの品質がわずかに低下する可能性がありますが、クエリの実行時間を短縮するには、auto_arima_max_order
オプションの値をデフォルト値の 5
から 3
または 4
に減らします。これにより、auto.ARIMA
アルゴリズムのハイパーパラメータ調整の検索空間が縮小されます。詳細については、Large-scale time series forecasting best practices
をご覧ください。
BigQuery DataFrames
次のスニペットでは、ARIMA ベースの時系列モデルを作成します。
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
これにより、入力データ内の 12 個のシティバイクの出発ステーションごとに 1 つずつ、12 個の時系列モデルが作成されます。所要時間は約 24 秒です。並列処理を行うため、これは 1 つの時系列モデルを作成する場合の 1.4 倍程度にすぎません。
モデルを評価する
ML.ARIMA_EVALUATE
関数を使用して時系列モデルを評価します。ML.ARIMA_EVALUATE
関数は、ハイパーパラメータの自動チューニング プロセス中にモデルに対して生成された評価指標を表示します。
モデルを評価する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
結果は次のようになります。
start_station_name
列は、時系列が作成された入力データ列を識別します。これは、CREATE MODEL
ステートメントのtime_series_id_col
オプションで指定した列です。non_seasonal_p
、non_seasonal_d
、non_seasonal_q
、has_drift
の出力列は、トレーニング パイプラインの ARIMA モデルを定義します。log_likelihood
、AIC
、variance
の出力列は、ARIMA モデルの適合プロセスに関連しています。適合プロセスでは、時系列ごとに 1 つ、auto.ARIMA
アルゴリズムを使用して最適な ARIMA モデルが決定されます。auto.ARIMA
アルゴリズムは KPSS テストを使用して、non_seasonal_d
の最適値を決定します。この場合は1
になります。non_seasonal_d
が1
の場合、auto.ARIMA アルゴリズムは 42 個の ARIMA 候補モデルを並行してトレーニングします。この例では、42 個の候補モデルがすべて有効であるため、出力には 42 行(ARIMA 候補モデルごとに 1 行)が含まれます。一部のモデルが無効な場合は、出力から除外されます。これらの候補モデルは、AIC の昇順で返されます。最初の行のモデルは AIC が最も低く、最適なモデルとみなされます。この最適モデルが最終モデルとして保存され、次に示すようにML.FORECAST
、ML.EVALUATE
、ML.ARIMA_COEFFICIENTS
を呼び出すときに使用されます。seasonal_periods
列には、時系列データで識別された季節パターンに関する情報が含まれます。時系列ごとに異なるシーズン パターンがある場合があります。たとえば、この図では 1 つの時系列に 1 年ごとのパターンがありますが、他の時系列には存在しません。has_holiday_effect
、has_spikes_and_dips
、has_step_changes
列は、decompose_time_series=TRUE
の場合にのみ入力されます。これらの列も、入力時系列データに関する情報が反映されますが、ARIMA モデリングとは関係ありません。また、これらの列の値はすべての出力行で同じになります。出力列の詳細については、
ML.ARIMA_EVALUATE
関数をご覧ください。
auto.ARIMA
は、各時系列について複数の ARIMA 候補モデルを評価しますが、ML.ARIMA_EVALUATE
はデフォルトでは出力テーブルをコンパクトにするため、最適モデルの情報のみを出力します。すべての候補モデルを表示するには、ML.ARIMA_EVALUATE
関数の show_all_candidate_model
引数を TRUE
に設定します。
モデルの係数を調べる
ML.ARIMA_COEFFICIENTS
関数を使用して、時系列モデルの係数を調べます。
モデルの係数を取得する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
start_station_name
列は、時系列が作成された入力データ列を識別します。これは、CREATE MODEL
ステートメントのtime_series_id_col
オプションで指定した列です。ar_coefficients
出力列には、ARIMA モデルの自己回帰(AR)部分のモデル係数が表示されます。同様に、ma_coefficients
出力列には、ARIMA モデルの移動平均(MA)部分のモデル係数が表示されます。どちらの列にも配列値が含まれ、長さはそれぞれnon_seasonal_p
とnon_seasonal_q
です。intercept_or_drift
値は、ARIMA モデルの定数項です。出力列の詳細については、
ML.ARIMA_COEFFICIENTS
関数をご覧ください。
モデルを使用してデータを予測する
ML.FORECAST
関数を使用して、将来の時系列値を予測します。
次の GoogleSQL クエリの STRUCT(3 AS horizon, 0.9 AS confidence_level)
句は、3 個の将来の時点を予測し、信頼度レベル 90% の予測間隔を生成するように表示します。
次の手順でモデルを使用し、データを予測します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
[実行] をクリックします。
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
最初の列
start_station_name
は、各時系列モデルが適合される時系列にアノテーションを付けます。各start_station_name
には、horizon
値で指定された 3 行の予測結果があります。start_station_name
ごとに、出力行は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(3 AS horizon, 0.9 AS confidence_level)
句は、クエリが 3 個の将来の時点を予測し、信頼度 90% の予測間隔を生成するように表示します。
モデルの結果を説明する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level));
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
返される最初の数千行はすべて履歴データです。予測データを表示するには、結果をスクロールする必要があります。
出力行は、まず
start_station_name
で並べ替えられ、次にtime_series_timestamp
列の値で時系列で並べ替えられます。時系列予測では、prediction_interval_lower_bound
列とprediction_interval_upper_bound
列の値で表される予測間隔は、forecast_value
列の値と同じくらい重要です。forecast_value
値は予測間隔の中間点です。予測間隔は、standard_error
列とconfidence_level
列の値によって異なります。出力列の詳細については、
ML.EXPLAIN_FORECAST
をご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、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 の概要で確認する。