このチュートリアルでは、google_analytics_sample.ga_sessions
サンプル テーブルを使用して時系列モデルを作成し、1 つの時系列予測を行う方法について学習します。
ga_sessions
テーブルには、Google アナリティクス 360 によって収集され、BigQuery に送信されたセッション データのスライスに関する情報が含まれています。
目標
このチュートリアルでは、以下を使用します。
CREATE MODEL
ステートメント: 時系列モデルを作成します。ML.ARIMA_EVALUATE
関数: モデルを評価します。ML.ARIMA_COEFFICIENTS
関数: モデルの係数を検査します。ML.FORECAST
関数: 1 日の合計訪問数を予測します。ML.EXPLAIN_FORECAST
関数: 予測結果の説明に使用できる時系列のさまざまなコンポーネント(季節性やトレンドなど)を取得します。- Looker Studio: 予測結果を可視化します。
費用
このチュートリアルでは、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.
に移動します。
ステップ 1: データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
ステップ 2(省略可): 予測する時系列を可視化する
モデルを作成する前に、入力時系列がどのように表示されるかを確認しておきましょう。
SQL
これは、Looker Studio を使用して行います。
次の GoogleSQL クエリでは、FROM bigquery-public-data.google_analytics_sample.ga_sessions_*
句で google_analytics_sample
データセット内の ga_sessions_*
テーブルに対してクエリを実行しています。これらのテーブルはパーティション分割テーブルです。
SELECT
ステートメントで、入力テーブルの date
列を TIMESTAMP
型として解析し、名前を parsed_date
に変更します。このクエリでは、SUM(...)
句と GROUP BY date
句を使用して、totals.visits
を毎日集計します。
#standardSQL SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date
クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date
[実行] をクリックします。
このクエリが完了するまでに約 7 秒かかります。クエリを実行すると、次のスクリーンショットのような出力が表示されます。スクリーンショットを見ると、この時系列には 366 個のデータポイントがあります。[データを探索] ボタンをクリックして、[Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。新しいタブで次の操作を行います。
[グラフ] パネルで [時系列グラフ] を選択します。
[データ] パネルで、[グラフ] パネルの下にある [指標] セクションに移動します。total_visits フィールドを追加し、デフォルトの指標である [レコード数] を削除します。次の図のようになります。
これらの手順を完了すると、次のグラフが表示されます。このグラフでは、入力時系列が週単位のパターンで表示されています。
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のような結果になります。
ステップ 3: 時系列モデルを作成する
次に、Google アナリティクス 360 のデータを使用して時系列モデルを作成します。次の GoogleSQL クエリでは、totals.visits
の予測に使用するモデルを作成します。
CREATE MODEL
句で bqml_tutorial.ga_arima_model
という名前のモデルを作成してトレーニングします。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'parsed_date', time_series_data_col = 'total_visits', auto_arima = TRUE, data_frequency = 'AUTO_FREQUENCY', decompose_time_series = TRUE ) AS SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
句で ARIMA ベースの時系列モデルを作成しています。デフォルトは auto_arima=TRUE
であるため、auto.ARIMA
アルゴリズムによって ARIMA_PLUS
モデルのハイパーパラメータが自動的に調整されます。アルゴリズムが多数の候補モデルを学習し、Akaike information criterion(AIC)が最も低い最適なモデルを選択します。また、data_frequency='AUTO_FREQUENCY'
がデフォルトのため、トレーニング プロセスでは入力時系列のデータ頻度が自動的に推定されます。最後に、CREATE MODEL
ステートメントではデフォルトで decompose_time_series=TRUE
を使用し、ユーザーは季節性、休日効果などの別々の時系列のコンポーネントの取得により時系列を予測する方法をさらに理解できます。
CREATE MODEL
クエリを実行してモデルを作成し、トレーニングします。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'parsed_date', time_series_data_col = 'total_visits', auto_arima = TRUE, data_frequency = 'AUTO_FREQUENCY', decompose_time_series = TRUE ) AS SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date
[実行] をクリックします。
クエリが完了するまでに約 43 秒かかります。完了後、モデル(
ga_arima_model
)がナビゲーション パネルに表示されます。クエリはCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果は表示されません。
ステップ 4: 評価されたすべてのモデルの評価指標を調べる
モデルを作成した後、ML.ARIMA_EVALUATE
関数を使用すると、ハイパーパラメータの自動調整中に評価されたすべての候補モデルの評価指標を確認できます。
次の GoogleSQL クエリでは、FROM
句でモデル bqml_tutorial.ga_arima_model
に対して ML.ARIMA_EVALUATE
関数を使用します。デフォルトでは、このクエリはすべての候補モデルの評価指標を返します。
ML.ARIMA_EVALUATE
クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.ga_arima_model`)
[実行] をクリックします。
クエリが完了するまでに 1 秒もかかりません。クエリが完了したら、クエリテキスト領域の下にある [結果] タブをクリックします。結果は次のスクリーンショットのようになります。
結果には次の列が含まれます。
non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
has_holiday_effect
has_spikes_and_dips
has_step_changes
error_message
次の 4 つの列(
non_seasonal_{p,d,q}
、has_drift
)でトレーニング パイプライン内の ARIMA モデルを定義します。その後の 3 つの指標(log_likelihood
、AIC
、variance
)は ARIMA モデルの適合プロセスに関連しています。まず、
auto.ARIMA
アルゴリズムは KPSS テストを使用して、non_seasonal_d
の最適値を 1 に決定します。non_seasonal_d
が 1 の場合、auto.ARIMA は 42 の ARIMA 候補モデルを並行してトレーニングします。non_seasonal_d
が 1 でない場合、auto.ARIMA は 21 の異なる候補モデルをトレーニングします。この例では、42 個の候補モデルがすべて有効です。したがって、出力には 42 行が含まれ、各行は ARIMA 候補モデルに関連付けられています。一部の時系列では、非反転または非静止の候補モデルが無効になります。無効なモデルは出力から除外されるため、出力行数は 42 行未満になります。これらの候補モデルは AIC の昇順で並べ替えられます。最初の行のモデルは AIC が最も低く、最適なモデルとみなされます。この最適モデルが最終モデルとして保存され、次に示すようにML.EXPLAIN_FORECAST
、ML.FORECAST
、ML.ARIMA_COEFFICIENTS
を呼び出すときに使用されます。seasonal_periods
列は、入力時系列内の季節パターンに関するものです。ARIMA モデリングとは関係がないため、すべての出力行で同じ値になります。前述のステップ 2 で説明したように、1 週間のパターンが報告されますが、これは想定内です。has_holiday_effect
、has_spikes_and_dips
、has_step_changes
列は、decompose_time_series=TRUE
の場合にのみ入力されます。これらは ARIMA モデリングとは関係のない、休日効果、スパイクと低下、ステップ変更に関するものです。したがって、失敗したモデルを除き、すべての出力行で同じです。error_message
列は、auto.ARIMA
の適合プロセス中に発生した可能性のあるエラーを示します。考えられる原因は、選択したnon_seasonal_p
、non_seasonal_d
、non_seasonal_q
、has_drift
列で時系列が固定できていないことです。すべての候補モデルの可能性のあるエラー メッセージを取得するには、show_all_candidate_models=true
を設定します。
ステップ 5: モデルの係数を調べる
ML.ARIMA_COEFFICIENTS
関数は、ARIMA_PLUS モデル bqml_tutorial.ga_arima_model
のモデル係数を取得します。ML.ARIMA_COEFFICIENTS
は、モデルを唯一の入力として受け取ります。
ML.ARIMA_COEFFICIENTS
クエリを実行します。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.ga_arima_model`)
[実行] をクリックします。
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
結果には次の列が含まれます。
ar_coefficients
ma_coefficients
intercept_or_drift
ar_coefficients
は、ARIMA モデルの自己回帰(AR)部分のモデル係数を示します。同様に、ma_coefficients
は移動平均(MA)部分のモデル係数を示します。どちらも配列で、長さはそれぞれnon_seasonal_p
とnon_seasonal_q
です。ML.ARIMA_EVALUATE
の出力から、一番上の行のnon_seasonal_p
は 2 で、non_seasonal_q
は 3 です。したがって、ar_coefficients
は長さ 2 の配列で、ma_coefficients
は長さ 3 の配列です。intercept_or_drift
は、ARIMA モデルの定数項です。
ステップ 6: モデルを使用して時系列を予測する
ML.FORECAST
関数は、bqml_tutorial.ga_arima_model
モデルを使用して、予測間隔付きで将来の時系列値を予測します。
次の GoogleSQL クエリの STRUCT(30 AS horizon, 0.8 AS confidence_level)
句は、30 個の将来の時点を予測し、信頼度レベル 80% の予測間隔を生成するように指示します。ML.FORECAST
は、モデルとオプションの引数を受け取ります。
ML.FORECAST
クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level))
[実行] をクリックします。
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
結果には次の列が含まれます。
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
confidence_interval_lower_bound
(間もなくサポート終了)confidence_interval_upper_bound
(間もなくサポート終了)
出力行は
forecast_timestamp
の日付順に表示されます。時系列予測の場合、下限と上限で取得される予測間隔はforecast_value
と同じくらい重要です。forecast_value
は予測間隔の中間点です。予測間隔はstandard_error
とconfidence_level
によって異なります。
ステップ 7: 予測結果を説明して可視化する
時系列の予測方法を理解して、予測時系列と履歴時系列および別々のコンポーネントを一緒に可視化するために、ML.EXPLAIN_FORECAST
関数は、モデル bqml_tutorial.ga_arima_model
を使用して予測間隔で将来の時系列値を予測し、同時に時系列の別々のコンポーネントを返します。
ML.FORECAST
関数と同様に、STRUCT(30 AS horizon, 0.8 AS confidence_level)
句は、30 個の将来の時点を予測し、信頼度 80% の予測間隔を生成するように指示します。ML.EXPLAIN_FORECAST
関数は、モデルおよび数個のオプションの引数を取得します。
ML.EXPLAIN_FORECAST
クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level))
[実行] をクリックします。
クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。
結果には次の列が含まれます。
time_series_timestamp
time_series_type
time_series_data
time_series_adjusted_data
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_lower_bound
trend
seasonal_period_yearly
seasonal_period_quarterly
seasonal_period_monthly
seasonal_period_weekly
seasonal_period_daily
holiday_effect
spikes_and_dips
step_changes
residual
出力行は
time_series_timestamp
の日付順に表示されます。さまざまなコンポーネントが出力の列として一覧表示されます。詳細については、ML.EXPLAIN_FORECAST
の定義をご覧ください。クエリが完了したら、[データを探索] ボタンをクリックし、[Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。
[グラフ] パネルで [時系列グラフ] を選択します。
[データ] パネルで次の操作を行います。
- [期間のディメンション] セクションで、
time_series_timestamp (Date)
を選択します。 - [ディメンション] セクションで [
time_series_timestamp (Date)
] を選択します。 - [指標] セクションで、デフォルトの指標
Record Count
を削除し、以下を追加します。time_series_data
prediction_interval_lower_bound
prediction_interval_upper_bound
trend
seasonal_period_weekly
step_changes
- [期間のディメンション] セクションで、
[スタイル] パネルで、[Missing Data] オプションまでスクロールし、[Line to Zer] ではなく [Line Breaks] を使用します。
次のプロットが表示されます。
ステップ 8(省略可): decompose_time_series
を有効にせずに予測結果を可視化する
ARIMA_PLUS
トレーニングで decompose_time_series
が false に設定されている場合、履歴時系列と予測時系列を UNION ALL
句と ML.FORECAST
関数を使用して連結できます。
次のクエリでは、UNION ALL
句の前の SQL によって履歴時系列が形成されます。UNION ALL
句の後の SQL で、ML.FORECAST
機能を使用して予測時系列と予測間隔を生成します。このクエリでは、history_value
と forecasted_value
に異なるフィールドを使用して、それぞれを異なる色で表示しています。
クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト領域に、次の GoogleSQL クエリを入力します。
#standardSQL SELECT history_timestamp AS timestamp, history_value, NULL AS forecast_value, NULL AS prediction_interval_lower_bound, NULL AS prediction_interval_upper_bound FROM ( SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS history_timestamp, SUM(totals.visits) AS history_value FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date ORDER BY date ASC ) UNION ALL SELECT forecast_timestamp AS timestamp, NULL AS history_value, forecast_value, prediction_interval_lower_bound, prediction_interval_upper_bound FROM ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level))
[実行] をクリックします。
クエリが完了したら、[データを探索] ボタンをクリックし、[Looker Studio で調べる] をクリックします。Looker Studio が新しいタブで開きます。新しいタブで次の操作を行います。
[グラフ] パネルで [時系列グラフ] を選択します。
[データ] パネルで、[グラフ] パネルの下にある [指標] セクションに移動します。指標として
history_value
、forecast_value
、prediction_interval_lower_bound
、prediction_interval_upper_bound
を追加します。次に、デフォルトの指標Record Count
を削除します。[スタイル] パネルで、[Missing Data] オプションまでスクロールし、[Line to Zero] ではなく [Line Breaks] を使用します。
この手順を完了すると、左パネルに次のグラフが表示されます。入力の履歴時系列は青で、予測時系列は緑で表示されます。予測間隔は、下限の系列と上限の系列の間の領域です。
クリーンアップ
このチュートリアルで使用したリソースについて、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.
次のステップ
- 1 つのクエリでニューヨーク市のシティバイクの利用データから複数の時系列を予測する方法を学習する。
- ARIMA_PLUS を高速化して 100 万時系列を数時間で予測する方法を学習する。
- 機械学習集中講座で機械学習について学習する。
- BigQuery ML の概要で BigQuery ML の概要を確認する。
- Google Cloud コンソールの使用で、Google Cloud コンソールの詳細を確認する。