FraudFinder: Vertex AI と BigQuery で生データを AI に取り込む

1. 概要

このラボでは、Google Cloud での不正行為をリアルタイムで検出するために、エンドツーエンドのデータを AI システムに取り込んで使用する方法を学びます。このラボの目標は、生データを利用して、Google Cloud 上で実行される本番環境向け ML パイプラインを構築する方法を理解することです。このラボで使用する Google Cloud プロダクトは次のとおりです。

学習内容

エンドツーエンドの ML パイプラインの構築は大変な作業です。このラボでは、BigQuery、Vertex AI などの Google Cloud サービスを使用してエンドツーエンドの ML パイプラインを構築し、スケーリングする方法を学習します。ここでは、生データを収集して本番環境の AI で活用するまでの流れを紹介します。このラボの学習内容は次のとおりです。

  • Google Cloud の AI システム用のデータを構築するためのベスト プラクティス。
  • BigQuery と SQL(バッチ処理)または Apache Beam と Dataflow(リアルタイム処理)による特徴量エンジニアリングの方法と Vertex AI Feature Store の使い方。
  • BigQuery と Pandas、Plotly などの Python ライブラリを使用してデータ分析を行う方法。
  • BigQuery ML と SQL で ML モデルをトレーニングする方法。
  • Vertex AI を利用してモデルを保存、デプロイ、モニタリングする方法。
  • Vertex AI Pipelines を使用して、AI ワークフローに合わせてデータを形式化する方法。

重要: Google Cloud でこのラボを実行するための費用は約 $100 です。

2. Vertex AI と BigQuery で生データを AI で使用できるようにする

このラボでは、Vertex AIBigQuery ML など、Google Cloud で提供されている最新のデータ分析プロダクトと AI プロダクトを使用します。Vertex AI と BigQuery を使用すると、生データを AI に簡単に取り込み、シームレスに開発作業を進めることができます。また、モデルの本番環境への移行をより効率的に行うことができます。サポートが必要な場合は、サポートページをご覧ください。

Vertex AI には、エンドツーエンドの AI ワークフローをサポートするさまざまなプロダクトが含まれています。以下では、Vertex AI の機能の概要を紹介します。

Vertex プロダクトの概要

3. FraudFinder のユースケースとデータ

FraudFinder は、包括的なデータを Google Cloud の AI で利用できるようにする一連のノートブックです。不正行為をリアルタイムで検出するために使用されます。ここでは、これらのノートブックを通じて次のことを学習します。データウェアハウスに保存されている決済取引の履歴データを読み取り、新しいトランザクションのライブ ストリームを読み込みます。探索的データ分析(EDA)を実行して、特徴量エンジニアリングを行います。特徴を Feature Store に取り込み、Feature Store を使用してモデルをトレーニングします。モデル レジストリにモデルを登録してモデルを評価し、モデルをエンドポイントにデプロイします。Feature Store を使用してモデルの推論をリアルタイムで行い、モデルをモニタリングします。

不正行為の検出は、分類、異常検出など、ML の幅広い領域をカバーしています。わかりやすい実例を示しながら、Google Cloud の AI アーキテクチャでエンドツーエンドなデータを扱う方法を説明するには、不正行為の検出はちょうど良い使用事例となります。エンドツーエンドのアーキテクチャを理解するために、詐欺のエキスパートになる必要はありません。このアーキテクチャのパターンは他のユースケースにも応用できます。

では、FraudFinder アーキテクチャの概要について説明しましょう。

FraudFinder アーキテクチャ

データセット

使用するデータセットは、Machine Learning for Credit Card Fraud Detection - Practical Handbook project from Kaggle のコードを使用して合成されています。アーキテクチャの点では、リアルタイムの不正行為の検出はバッチベースのものと異なり、次のような特徴があります。

  • 予測リクエストが高頻度で発生する(例: 1 秒あたり 1,000)
  • 予測リクエストからレスポンスまでのレイテンシが低い(例: 1 秒未満)
  • 予測は通常、予測リクエストあたり 1 サンプル。マイクロバッチの場合もある(例:ほぼリアルタイムの推論の場合、1,000 トランザクションがバッチとして送信される)
  • サービス用の特徴量エンジニアリングは事前に計算済みか、リアルタイムで計算される必要がある

FraudFinder の履歴データセット

決済取引の履歴データを含む BigQuery テーブルが公開されています。これにより、BigQuery でモデルのトレーニングを行い、特徴量エンジニアリングを実行できます。

cymbal-fraudfinder (project)
|-`tx` (dataset)
  |-`tx` (table: transactions without labels)
  |-`txlabels` (table: transactions with fraud labels (1 or 0))
|-demographics
  |-`customers` (table: profiles of customers)
  |-`terminals` (table: profiles of terminals)
  |-`customersterminals` (table: profiles of customers and terminals within their radius)

なぜリアルタイムか

このラボでは、リアルタイム データを利用して、リアルタイムで特徴量エンジニアリングと推論を行います。リアルタイムの特徴を利用することで、他の方法では使用できないシグナルを推論時間で利用し、モデルを改善できます。

FraudFinder のライブ ストリーミング データ

このラボの FraudFinder の部分では、公開されている Pub/Sub トピックでライブ ストリーミングの決済取引を扱います。これにより、モデル エンドポイントのテストと特徴のストリーミングを簡単に行うことができます。Pub/Sub は、スケーラブルで非同期のメッセージング サービスです。これらのトピックを使用して、特徴のストリーミングとオンライン推論を実行します。ベースラインと不正率の高いトピックを切り替えて、モデルをモニタリングすることもできます。次の Pub/Sub 公開トピックを使用できます。

  • ff-tx
  • ff-txlabels

4. プロジェクトとノートブック インスタンスを設定する

このラボでは、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成する場合は、こちらの指示に従ってください。

重要: このラボでは新しいプロジェクトを使用することをおすすめします。このラボでは複数のプロダクトを扱います。ラボを完了した後でプロジェクト全体を削除する場合は、新しいプロジェクトのほうが便利です。

既存のプロジェクトを使用する場合は、次のステップに進んでください。以降のステップは、リポジトリの README.md ファイルにも記載されています。

ステップ 1: API を有効にする

まず、作成したプロジェクトに移動して、Cloud Shell を開きます。初めて使用する場合は新しい Cloud Shell がプロビジョニングされるため、このステップに数分かかることがあります。

Cloud Shell

次のコードを Cloud Shell で実行します。コードをコピーして貼り付けてください。このスクリプトは、必要な API を有効にして、公開されている Pub/Sub トピックからストリーミング トランザクションを読み込む Pub/Sub サブスクリプションを作成します。すべてのコマンドが完了するまで、少しお待ちください。

gcloud services enable notebooks.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable pubsub.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable dataflow.googleapis.com
gcloud services enable bigquery.googleapis.com

gcloud pubsub subscriptions create "ff-tx-sub" --topic="ff-tx" --topic-project="cymbal-fraudfinder"
gcloud pubsub subscriptions create "ff-txlabels-sub" --topic="ff-txlabels" --topic-project="cymbal-fraudfinder"

# Run the following command to grant the Compute Engine default service account access to read and write pipeline artifacts in Google Cloud Storage.
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUM=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:${PROJECT_NUM}-compute@developer.gserviceaccount.com"\
      --role='roles/storage.admin'

ステップ 2: Vertex AI Workbench インスタンスを作成する

次に、Cloud コンソールの [Vertex AI] セクションに移動します。[ワークベンチ] に移動します。

Vertex AI メニュー

Vertex AI Workbench(Notebook API)API を有効にします(まだ有効になっていない場合)

Notebook_api

有効にしたら、[ユーザー管理のノートブック] を選択します。

Notebooks_UI

[新しいノートブック] を選択します。Python 3 を選択します。

new_notebook

ノートブックに名前を付けて(fraudfinder など)、[詳細設定] をクリックします。

create_notebook

重要: PermissionsService Account を選択してください。

サービス アカウント

重要: まだ有効になっていない場合は、[セキュリティ] で、[ターミナルを有効にする] を選択します。

enable_terminal

詳細設定のその他の設定はそのままで構いません。

[作成] をクリックします。インスタンスがプロビジョニングされるまでに数分かかります。

インスタンスが作成されたら、[JUPYTERLAB を開く] を選択します。

open_jupyterlab

ステップ 3: IAM のロールを設定する

わかりやすくするため、ここでは Compute Engine のデフォルトのサービス アカウントを使用することにしましょう。この方法は、本番環境のワークロードにはおすすめしません。本番環境では、デフォルトのサービス アカウントではなく、アプリケーションごとに専用のサービス アカウントを作成することをおすすめします。サービス アカウントに関するベスト プラクティスの詳細については、こちらのドキュメントをご覧ください。デフォルトのコンピューティング サービス アカウントは 123456789123-compute@developer.gserviceaccount.com のようになります。[IAM と管理] に移動して [ADD] をクリックします。Compute Engine のデフォルトのサービス アカウントを検索して選択し、次のロールを割り当てます。

  • BigQuery Admin
  • Storage Admin
  • Storage Object Admin
  • Vertex AI Administrator
  • Pub/Sub Admin

次のようになります。新しい設定を保存するのを忘れないでください。

iam-roles.png

ステップ 4: GitHub リポジトリのクローンを作成する

ノートブック インスタンスを作成してアクセスしたら、次に環境の設定を行います。ターミナル ウィンドウを開いてください。

ターミナルを開く

次のコマンドをコピーして、ノートブックのターミナルに貼り付けて実行します。

git clone https://github.com/GoogleCloudPlatform/fraudfinder.git

このコマンドを実行すると、FraudFinder リポジトリのクローンがノートブック インスタンスに作成されます。git clone の実行後、ノートブック インスタンスの左側に fraudfinder フォルダが表示されます。fraudfinder フォルダに移動します。ここに、このラボで必要なノートブックがあります。

以降のセクションでは、ノートブックに表示される指示に従って作業を進めていきます。では、環境の設定を続けましょう。

5. 環境設定

このセクションでは、プロジェクトの環境を設定していきます。このセクションで学習する内容は次のとおりです。

  • パッケージを含む環境を設定する
  • BigQuery にデータを読み込む
  • 公開されている Pub/Sub トピックからデータを読み取る

次のノートブックを使用して、手順に沿って操作してください。

  • 00_environment_setup.ipynb

6. 探索的データ分析

このセクションでは、探索的データ分析を行って Fraud データをより深く理解する方法について学習します。このセクションで学習する内容は次のとおりです。

  • SQL を使用して BigQuery からデータを抽出して探索する
  • BigQuery と Plotly を使用してトランザクション データをプロットする
  • データ集約を適用して散布図を作成する

次のノートブックを使用して、手順に沿って操作してください。

  • 01_exploratory_data_analysis.ipynb

7. バッチとストリーミングでの特徴量エンジニアリング

このセクションでは、特徴量エンジニアリングで生データからトレーニングしたモデルの特徴を生成します。ここでは、バッチとストリーミングを使用します。どちらのユースケースも不正行為の検出には重要です。このセクションで学習する内容は次のとおりです。

  • BigQuery と SQL を使用して特徴を作成する
  • Vertex AI Feature Store を作成してデータを挿入する
  • ストリーミング データを Feature Store に取り込む

次の 2 つのノートブックを順番に使用して、手順に沿って操作してください。

  • 02_feature_engineering_batch.ipynb
  • 03_feature_engineering_streaming.ipynb

8. モデルのトレーニング、予測、形式化、モニタリング

このセクションでは、不正な可能性を検出する最初の BigQuery ML モデルをトレーニングして、デプロイします。また、トレーニングとデプロイメント コードを自動化されたパイプラインに合わせて形式化する方法も学習します。さらに、本番環境でオンライン予測とモデルのモニタリングを行う方法についても学びます。このセクションで学習する内容は次のとおりです。

  • BigQuery ML モデルをトレーニングして Vertex AI Model Registry に登録する
  • Vertex AI のエンドポイントとしてモデルをデプロイする
  • Vertex AI SDK を使用する方法
  • BigQuery ML モデルからエンドツーエンドの ML パイプラインを作成する方法
  • Vertex AI Model Monitoring を使用する方法

次のノートブックを順番に使用して、手順に沿って操作してください。ノートブックは BQML フォルダにあります。ノートブックの指示に従ってください。

  • 04_model_training_and_prediction.ipynb
  • 05_model_training_pipeline_formalization.ipynb
  • 06_model_monitoring.ipynb
  • 07_model_inference.ipynb
🎉 Congratulations! 🎉

Google Cloud の AI アーキテクチャで使用するデータの構築方法を学習しました。

9. クリーンアップ

このラボでは新しいプロジェクトの使用をおすすめしました。このラボでは複数のプロダクトを扱います。ラボを完了した後でプロジェクト全体を削除する場合は、新しいプロジェクトのほうが便利です。こちらのドキュメントにプロジェクトの削除方法が記載されています。

サービスを削除する場合には、ノートブックの手順に沿って操作するか、作成したリソースを削除してください。