Google アナリティクス データからの 1 つの時系列を予測する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このチュートリアルでは、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 関数: 予測結果の説明に使用できる時系列のさまざまなコンポーネント(季節性やトレンドなど)を取得します。
  • Google データポータル: 予測結果を可視化します。

費用

このチュートリアルでは、Google Cloud の課金対象となる次のコンポーネントを使用します。

  • BigQuery
  • BigQuery ML

BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。

BigQuery ML の費用の詳細については、BigQuery ML の料金ページをご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  6. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、

    BigQuery API を有効にします。

    API を有効にする

    にアクセスします。

ステップ 1: データセットを作成する

まず、ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには、次の操作を行います。

  1. Google Cloud Console で [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [リソース] セクションで、プロジェクト名をクリックします。

  3. 詳細パネルで [データセットを作成] をクリックします。

    データセットを作成する

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

    • [データセット ID] に bqml_tutorial を入力します。
    • [データのロケーション] で [米国(US)] を選択します。現在、一般公開データセットは US マルチリージョン ロケーションに保存されています。わかりやすくするため、データセットは同じロケーションに配置してください。

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

  5. その他のデフォルト設定はすべてそのままにし、[データセットを作成] をクリックします。

(省略可)ステップ 2: 予測する時系列を可視化する

モデルを作成する前に、入力時系列がどのように表示されるかを確認しておきましょう。確認には Google データポータルを使用します。

次の標準 SQL クエリで、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

クエリを実行する手順は次のとおりです。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #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
    
  3. [実行] をクリックします。

    このクエリが完了するまでに約 7 秒かかります。クエリを実行すると、次のスクリーンショットのような出力が表示されます。スクリーンショットを見ると、この時系列には 366 個のデータポイントがあります。[データを探索] ボタンをクリックして、[データポータルで調べる] をクリックします。新しいタブが開き、Google データポータルが表示されます。新しいタブで次の操作を行います。

    クエリ出力

    [グラフ] パネルで [時系列グラフ] を選択します。

    Time_series_chart

    [データ] パネルで、[グラフ] パネルの下にある [指標] セクションに移動します。total_visits フィールドを追加し、デフォルトの指標である [レコード数] を削除します。次の図のようになります。

    Time_series_data_fields

    これらの手順を完了すると、次のグラフが表示されます。このグラフでは、入力時系列が週単位のパターンで表示されています。

    Result_visualization

ステップ 3: 時系列モデルを作成する

次に、Google アナリティクス 360 のデータを使用して時系列モデルを作成します。次の標準 SQL クエリで、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 クエリを実行してモデルを作成し、トレーニングします。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #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
    
  3. [実行] をクリックします。

    クエリが完了するまでに約 43 秒かかります。完了後、モデル(ga_arima_model)がナビゲーション パネルに表示されます。クエリは CREATE MODEL ステートメントを使用してモデルを作成するため、クエリの結果は表示されません。

ステップ 4: 評価されたすべてのモデルの評価指標を調べる

モデルを作成した後、ML.ARIMA_EVALUATE 関数を使用すると、ハイパーパラメータの自動調整中に評価されたすべての候補モデルの評価指標を確認できます。

次の標準 SQL クエリの FROM 句では、モデル bqml_tutorial.ga_arima_modelML.ARIMA_EVALUATE 関数を使用しています。デフォルトでは、このクエリはすべての候補モデルの評価指標を返します。

ML.ARIMA_EVALUATE クエリを実行する手順は次のとおりです。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL bqml_tutorial.ga_arima_model)
    
  3. [実行] をクリックします。

  4. クエリが完了するまでに 1 秒もかかりません。クエリが完了したら、クエリテキスト領域の下にある [結果] タブをクリックします。結果は次のスクリーンショットのようになります。

    ML.ARIMA_EVALUATE の出力。

    結果には次の列が含まれます。

    • 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_likelihoodAICvariance)は 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_FORECASTML.FORECASTML.ARIMA_COEFFICIENTS を呼び出すときに使用されます。

    seasonal_periods 列は、入力時系列内の季節パターンに関するものです。ARIMA モデリングとは関係がないため、すべての出力行で同じ値になります。前述のステップ 2 で説明したように、1 週間のパターンが報告されますが、これは想定内です。

    has_holiday_effecthas_spikes_and_dipshas_step_changes 列は、decompose_time_series=TRUE の場合にのみ入力されます。これらは ARIMA モデリングとは関係のない、休日効果、スパイクと低下、ステップ変更に関するものです。したがって、失敗したモデルを除き、すべての出力行で同じです。

    error_message 列は、auto.ARIMA の適合プロセス中に発生した可能性のあるエラーを示します。考えられる原因は、選択した non_seasonal_pnon_seasonal_dnon_seasonal_qhas_drift 列で時系列が固定できていないことです。すべての候補モデルの可能性のあるエラー メッセージを取得するには、show_all_candidate_models=true を設定します。

ステップ 5: モデルの係数を調べる

ML.ARIMA_COEFFICIENTS 関数は、ARIMA_PLUS モデル bqml_tutorial.ga_arima_model のモデル係数を取得します。ML.ARIMA_COEFFICIENTS は、モデルを唯一の入力として受け取ります。

ML.ARIMA_COEFFICIENTS クエリを実行します。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL bqml_tutorial.ga_arima_model)
    
  3. [実行] をクリックします。

    クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。

    ML.ARIMA_COEFFICIENTS の出力。

    結果には次の列が含まれます。

    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift

    ar_coefficients は、ARIMA モデルの自己回帰(AR)部分のモデル係数を示します。同様に、ma_coefficients は移動平均(MA)部分のモデル係数を示します。どちらも配列で、長さはそれぞれ non_seasonal_pnon_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 モデルを使用して、予測間隔付きで将来の時系列値を予測します。

次の標準 SQL クエリの STRUCT(30 AS horizon, 0.8 AS confidence_level) 句は、30 個の将来の時点を予測し、信頼度レベル 80% の予測間隔を生成するように指示します。ML.FORECAST は、モデルとオプションの引数を受け取ります。

ML.FORECAST クエリを実行する手順は次のとおりです。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
     *
    FROM
     ML.FORECAST(MODEL bqml_tutorial.ga_arima_model,
                 STRUCT(30 AS horizon, 0.8 AS confidence_level))
    
  3. [実行] をクリックします。

    クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。

    ML.FORECAST の出力。

    結果には次の列が含まれます。

    • 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_errorconfidence_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 クエリを実行する手順は次のとおりです。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
     *
    FROM
     ML.EXPLAIN_FORECAST(MODEL bqml_tutorial.ga_arima_model,
                         STRUCT(30 AS horizon, 0.8 AS confidence_level))
    
  3. [実行] をクリックします。

    クエリが完了するまでに 1 秒もかかりません。結果は次のようになります。

    ML.EXPLAIN_FORECAST の出力 1。 ML.EXPLAIN_FORECAST の出力 2。

    結果には次の列が含まれます。

    • 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

    出力行は time_series_timestamp の日付順に表示されます。さまざまなコンポーネントが出力の列として一覧表示されます。詳細については、ML.EXPLAIN_FORECAST の定義をご覧ください。

  4. クエリが完了したら、[データを探索] ボタンをクリックし、[データポータルで調べる] をクリックします。新しいタブが開き、Google データポータルが表示されます。

    Union_all_query の出力

  5. [グラフ] パネルで [時系列グラフ] を選択します。

    Time_series_chart

  6. [データ] パネルで次の操作を行います。

    1. [期間のディメンション] セクションで、time_series_timestamp (Date) を選択します。
    2. [ディメンション] セクションで [time_series_timestamp (Date)] を選択します。
    3. [指標] セクションで、デフォルトの指標 Record Count を削除し、以下を追加します。
      • time_series_data
      • prediction_interval_lower_bound
      • prediction_interval_upper_bound
      • trend
      • seasonal_period_weekly
      • step_changes

    Data_panel

  7. [スタイル] パネルで、[Missing Data] オプションまでスクロールし、[Line to Zer] ではなく [Line Breaks] を使用します。

    Style_section

    次のプロットが表示されます。

    Result_visualization

(省略可)ステップ 8: decompose_time_series を有効化せずに予測結果を可視化する

ARIMA_PLUS トレーニングで decompose_time_series が false に設定されている場合、履歴時系列と予測時系列を UNION ALL 句と ML.FORECAST 関数を使用して連結できます。

次のクエリでは、UNION ALL 句の前の SQL によって履歴時系列が形成されます。UNION ALL 句の後の SQL で、ML.FORECAST 機能を使用して予測時系列と予測間隔を生成します。このクエリでは、history_valueforecasted_value に異なるフィールドを使用して、それぞれを異なる色で表示しています。

クエリを実行する手順は次のとおりです。

  1. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    #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))
    
  3. [実行] をクリックします。

  4. クエリが完了したら、[データを探索] ボタンをクリックし、[データポータルで調べる] をクリックします。新しいタブが開き、Google データポータルが表示されます。新しいタブで次の操作を行います。

    Union_all_query の出力

  5. [グラフ] パネルで [時系列グラフ] を選択します。

    Time_series_chart

  6. [データ] パネルで、[グラフ] パネルの下にある [指標] セクションに移動します。指標として history_valueforecast_valueprediction_interval_lower_boundprediction_interval_upper_bound を追加します。次に、デフォルトの指標 Record Count を削除します。

    Data_section

  7. [スタイル] パネルで、[Missing Data] オプションまでスクロールし、[Line to Zer] ではなく [Line Breaks] を使用します。

    Style_section

    この手順を完了すると、左パネルに次のグラフが表示されます。入力の履歴時系列は青で、予測時系列は緑で表示されます。予測間隔は、下限の系列と上限の系列の間の領域です。

    Result_visualization

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  • 作成したプロジェクトを削除する。
  • または、プロジェクトを保存して、データセットを削除する。

データセットの削除

プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。

  1. 必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. ナビゲーションで、作成した bqml_tutorial データセットをクリックします。

  3. ウィンドウの右側にある [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

  4. [データセットの削除] ダイアログ ボックスでデータセットの名前(bqml_tutorial)を入力し、[削除] をクリックして確定します。

プロジェクトの削除

プロジェクトを削除するには:

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ