このチュートリアルでは、BigQuery ML の組み込みの TimesFM モデルで AI.DETECT_ANOMALIES 関数を使用して、時系列データの異常を検出する方法について説明します。
このチュートリアルでは、一般公開テーブル bigquery-public-data.san_francisco_bikeshare.bikeshare_trips のデータを使用します。
目標
このチュートリアルでは、組み込みの TimesFM モデルで AI.DETECT_ANOMALIES 関数を使用して、シェアサイクルの利用状況の異常を検出する方法について説明します。最初のセクションでは、単一の時系列の異常を検出し、結果を可視化する方法について説明します。2 つ目のセクションでは、複数の時系列で異常を検出する方法について説明します。
費用
このチュートリアルでは、課金対象となる以下の Google Cloudのコンポーネントを使用しています。
- BigQuery
- BigQuery ML
BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。
BigQuery ML の費用の詳細については、BigQuery ML の料金をご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、
BigQuery API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。
1 台のシェアサイクルの利用状況の時系列データの異常を検出する
AI.DETECT_ANOMALIES 関数を使用して、時系列データの異常を検出します。
次のクエリは、前月の履歴データに基づいて、2017 年 8 月の 1 時間あたりのシェアサイクルの利用回数の異常を検出します。anomaly_prob_threshold 引数は、異常を特定するためのしきい値を示します。
次の手順で TimesFM モデルを使用して異常を検出します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。クエリの完了には 1 ~ 2 分かかります。
WITH bike_share_trips AS ( SELECT TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips` GROUP BY TIMESTAMP_TRUNC(start_date, HOUR) ) SELECT * FROM AI.DETECT_ANOMALIES( ( SELECT * FROM bike_share_trips WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01') ), ( SELECT * FROM bike_share_trips WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01') ), anomaly_prob_threshold => 0.95, timestamp_col => 'trip_hour', data_col => 'num_trips');
結果は次のようになります。
+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | time_series_timestamp | time_series_data | is_anomaly | lower_bound | upper_bound | anomaly_probability | ai_detect_anomalies_status| +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | 2017-08-01 00:00:00 UTC | 13.0 | false | -1.97939332204... | 27.604928623830... | 0.38048622012138... | | +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | 2017-08-01 01:00:00 UTC | 6.0 | false | -9.42939322810... | 20.154928628380... | 0.38048622012138... | | +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | ... | ... | ... | ... | ... | ... | ... | +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
クエリの実行が完了したら、[可視化] タブをクリックします。作成されたグラフは次のようになります。
time_series_dataの値がlower_boundとupper_boundの範囲外にある異常を特定できます。
複数のシェアサイクルの利用状況の時系列データの異常を検出する
次のクエリは、前月の履歴データに基づいて、2017 年 8 月の利用者タイプ別、時間別のシェアサイクルの利用回数の異常を検出します。
次の手順で TimesFM モデルを使用して異常を検出します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
WITH bike_share_trips AS ( SELECT TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips, subscriber_type FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips` GROUP BY TIMESTAMP_TRUNC(start_date, HOUR), subscriber_type ) SELECT * FROM AI.DETECT_ANOMALIES( ( SELECT * FROM bike_share_trips WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01') ), ( SELECT * FROM bike_share_trips WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01') ), anomaly_prob_threshold => 0.95, timestamp_col => 'trip_hour', data_col => 'num_trips', id_cols => ['subscriber_type']);
結果は次のようになります。
+-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | subscriber_type | time_series_timestamp | time_series_data | is_anomaly | lower_bound | upper_bound | anomaly_probability | ai_detect_anomalies_status| +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | Customer | 2017-08-01 00:00:00 UTC | 13.0 | false | -1.97939332204... | 27.604928623830... | 0.38048622012138... | | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | Customer | 2017-08-01 01:00:00 UTC | 3.0 | false | -5.12345678901... | 10.123456789012... | 0.12345678901234... | | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | ... | ... | ... | ... | ... | ... | ... | ... | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | Subscriber | 2017-08-01 00:00:00 UTC | 13.0 | false | -1.97939332204... | 27.604928623830... | 0.38048622012138... | | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | Subscriber | 2017-08-01 01:00:00 UTC | 3.0 | false | -5.12345678901... | 10.123456789012... | 0.12345678901234... | | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | ... | ... | ... | ... | ... | ... | ... | ... | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
プロジェクトを削除するには、次の操作を行います。
- Google Cloud コンソールで [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- BigQuery ML の概要について、BigQuery の AI と ML の概要で確認する。