Vertex AI: AutoML を使用した不正行為検出モデルの構築

1. 概要

このラボでは、Vertex AI を使用して、表形式データを使ったモデルのトレーニングとサービングを行う方法を学びます。これは Google Cloud の最新の AI プロダクトで、現在プレビュー版が提供されています。

学習内容

次の方法を学習します。

  • Vertex AI にマネージド データセットをアップロードする
  • AutoML でモデルをトレーニングする
  • トレーニングした AutoML モデルをエンドポイントにデプロイし、そのエンドポイントを使用して予測を行う

このラボを Google Cloud で実行するための総費用は約 $22 です。

2. Vertex AI の概要

このラボでは、Google Cloud で利用できる最新の AI プロダクトを使用します。Vertex AI は Google Cloud 全体の ML サービスを統合してシームレスな開発エクスペリエンスを提供します。以前は、AutoML でトレーニングしたモデルやカスタムモデルには、個別のサービスを介してアクセスする必要がありました。Vertex AI は、これらの個別のサービスを他の新しいプロダクトとともに 1 つの API へと結合します。既存のプロジェクトを Vertex AI に移行することもできます。ご意見やご質問がありましたら、サポートページからお寄せください。

Vertex AI には、エンドツーエンドの ML ワークフローをサポートするさまざまなプロダクトが含まれています。このラボでは、以下でハイライト表示されたプロダクト(表形式データ用の AutoML、予測、Workbench)を取り上げます。

Vertex プロダクトの概要

3. 環境をセットアップする

この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順を行ってください。

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

まだ有効になっていない場合は、[Compute Engine] に移動して [有効にする] を選択します。これはノートブック インスタンスを作成するために必要です。

ステップ 2: Vertex AI API を有効にする

Cloud コンソールの [Vertex AI] セクションに移動し、[Vertex AI API を有効にする] をクリックします。

Vertex ダッシュボード

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

Cloud Console の [Vertex AI] セクションで [ワークベンチ] をクリックします。

Vertex AI メニュー

そこから、[ユーザー管理のノートブック] で [新しいノートブック] をクリックします。

ノートブックを新規作成

次に、最新バージョンの TensorFlow Enterprise(LTS 版)インスタンス タイプ(GPU なし)を選択します。

TFE インスタンス

デフォルトのオプションを使用して、[作成] をクリックします。

ステップ 5: ノートブックを開く

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

ノートブックを開く

モデルのトレーニングに使用するデータは、このクレジット カードの不正使用検出データセットから取得します。ここでは、BigQuery で一般公開されているこのデータセットのバージョンを使用します。

4. マネージド データセットを作成する

Vertex AI では、さまざまなデータ型のマネージド データセットを作成し、そのデータセットの統計情報を生成して、AutoML や独自のカスタムモデル コードによるモデルのトレーニングに使用できます。

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

コンソールの Vertex メニューで、[データセット] を選択します。

データセットを選択する

このラボでは、特定のクレジット カード取引が不正として分類されるかどうかを判断する不正行為検出モデルを構築します。

[データセット] ページで、データセットに名前を付け、[表形式]、[回帰/分類] を選択します。次に、データセットを作成します。

データセットを作成

Vertex のマネージド データセットにデータをインポートする方法はいくつかあります。

  • パソコンからローカル ファイルをアップロードする
  • Cloud Storage からファイルを選択する
  • BigQuery からのデータの選択

ここでは、一般公開の BigQuery テーブルからデータをアップロードします。

ステップ 2: BigQuery からデータをインポートする

インポート方法として [テーブルまたはビューを BigQuery から選択] を選択し、[BigQuery テーブル] ボックスに bigquery-public-data.ml_datasets.ulb_fraud_detection をコピーします。[続行] を選択します。

BQ データをインポートする

データセットをインポートすると、次のような画面が表示されます。

インポートしたデータ

必要に応じて、[統計情報を生成] をクリックして、このデータセットの追加情報を確認できます。ただし、次のステップに進む前に確認する必要はありません。このデータセットには、実際のクレジットカード トランザクションが含まれています。列名のほとんどが不明瞭になっているため、V1V2 などと呼ばれています。

5. AutoML でモデルをトレーニングする

マネージド データセットをアップロードしたら、このデータでモデルをトレーニングできるようになります。特定の取引が不正かどうかを予測する分類モデルをトレーニングします。Vertex AI では、次の 2 つの方法でモデルをトレーニングできます。

  • AutoML: 最小限の労力と ML の専門知識で高品質なモデルをトレーニングする
  • カスタム トレーニング: Google Cloud のビルド済みコンテナまたは独自のコンテナのいずれかを使用して、クラウドでカスタム トレーニング アプリケーションを実行します。

このラボでは、トレーニングに AutoML を使用します。

ステップ 1: トレーニング ジョブを開始する

前の手順で中断したデータセットの詳細ページで、右上の [新しいモデルをトレーニング] を選択します。目的として [分類] を選択し、モデル トレーニングで [AutoML] を選択したまま、[続行] をクリックします。

モデル トレーニングの手順 1

モデルに名前を付けます。デフォルトの名前を使用することもできます。[Target column] で [Class] を選択します。特定の取引が不正かどうかを示す整数です(不正でない場合は 0、不正の場合は 1)。

[続行] を選択します。

モデル トレーニングの手順 2

このステップでは、下にスクロールして [詳細オプション] をクリックして展開します。このデータセットはかなり不均衡(不正なトランザクションを含むデータは 1% 未満)であるため、一般的でないクラスに対する適合率と再現率を最大化する AUC PRC オプションを選択します。

上級トレーニング オプション

[続行] を選択して、最後のステップ(コンピューティングと料金)に進みます。ここでは、予算のノード時間として「1」を入力し、早期停止を有効のままにしておきます。一般的に、特徴と選択したラベルとの関連性を調べるには、まず 1 コンピューティング時間ほど AutoML モデルをトレーニングするのがよいでしょう。そこから、特徴を変更してさらにトレーニングすることで、モデルのパフォーマンスを向上させることができます。次に、[トレーニングを開始] を選択します。

トレーニング ジョブが完了すると、メールが届きます。リソースの立ち上げや破棄の時間を考慮すると、トレーニングにかかる時間は 1 時間強になります。

6. モデル評価指標を調べる

このステップでは、モデルのパフォーマンスを確認します。

モデル トレーニング ジョブが完了したら、Vertex の [モデル] タブに移動します。トレーニングしたモデルをクリックし、[評価] タブを確認します。ここに表示される評価指標は多数ありますが、混同行列特徴量の重要度の 2 つに注目します。

ステップ 1: 混同行列を理解する

混同行列は、テストセット内の各クラスにおいてモデルが正しく予測したサンプルの割合を示します。今回のような不均衡なデータセットの場合、全体的な精度よりも、この指標のほうがモデルのパフォーマンスを適切に測定できます。

このデータセットには不正なトランザクションのサンプルが 1% 未満しかないので、モデルの精度が 99% であっても、そのモデルはランダムに 99% の確率で不正でないと推測している可能性があります。そのため、ここでは適切な指標を得るためにモデルの精度をクラスごとに見る必要があります。

[評価] タブを下にスクロールすると、次のような混同行列が表示されます(厳密な割合は異なる場合があります)。

混同行列

混同行列は、初期モデルがテストセット内にある不正サンプルの 85% を正しく分類できることを示しています。データセットの大きな不均衡を考慮すると、これはかなり良い結果です。次に、コンピューティング時間を増やしてモデルをトレーニングし、この 85% を上回る結果が得られるかどうかを確かめることもできます。

ステップ 2: 特徴量の重要度を確認する

混同行列の下には、次のような特徴量の重要度グラフが表示されます。

特徴量の重要度

これは、予測を行う際にモデルに最も大きな影響を与えた特徴量を示しています。特徴量の重要度は、Explainable AI の 1 つのタイプであり、予測を行う ML モデルに対する知見を深めるためのさまざまな手法が含まれる項目です。ここに示した特徴量の重要度のグラフは、テストセットに対するモデルの予測結果のすべてを参照して得られる集計データとして計算されています。一連の例の中から最も重要な特徴がわかります。

データセット内の特徴量の大半が不明瞭なものでなかったら、このグラフはもっと興味深いものになっていたでしょう。たとえば、トランザクションの種類(送金、預金など)が不正行為を特定する最大の要因として示されたかもしれません。

現実世界のシナリオでは、こうした特徴量の重要度の値をモデルの改良と予測の信頼度向上に役立てることができます。たとえば、次にモデルをトレーニングする際に最も重要度の低い特徴を削除したり、重要度の高い 2 つの特徴を組み合わせて特徴クロスを作成したりして、モデルのパフォーマンスが高まるかどうかを確認できます。

ここではバッチ全体に対する特徴量の重要度を見ていますが、Vertex AI では個々の予測に対する特徴量の重要度も取得できます。モデルのデプロイ後に、その方法について説明します。

7. エンドポイントへのモデルのデプロイ

モデルのトレーニングが完了している場合、次のステップは Vertex でのエンドポイントの作成です。Vertex のモデル リソースには複数のエンドポイントを関連付けることができ、これらの間でトラフィックを分割できます。

ステップ 1: エンドポイントを作成する

モデルページで [デプロイとテスト] タブに移動し、[エンドポイントにデプロイ] をクリックします。

デプロイとテスト

エンドポイントに名前(fraud_v1 など)を付け、[アクセス] を [標準] のままにして、[続行] をクリックします。

トラフィックの分割とマシンタイプはデフォルト設定のままにして、[完了]、[続行] の順にクリックします。

このエンドポイントではモデルのモニタリングを使用しないため、このチェックボックスをオフのままにして [デプロイ] をクリックします。エンドポイントのデプロイには数分かかります。完了すると、その横に緑色のチェックマークが表示されます。

デプロイされたエンドポイント

徐々に近づいているわ。これで、デプロイしたモデルの予測を取得する準備が整いました。

8. デプロイしたモデルで予測を取得する

モデルの予測を取得するにあたっては、いくつかの選択肢があります。

  • Vertex AI UI
  • Vertex AI API

両方の方法をご紹介します。

ステップ 1: UI でモデルの予測を取得する

エンドポイントが表示されているモデルページ(前の手順で終了した場所)で、[モデルのテスト] セクションまで下にスクロールします。

モデルのテスト

ここでは、Vertex AI がモデルの特徴量ごとにランダムな値を選択して、テスト用の予測を取得できるようにしています。必要に応じて、これらの値を変更できます。ページの一番下までスクロールして [予測] を選択します。

ページの [予測結果] セクションに、モデルが予測した各クラスの割合が表示されます。たとえば、クラス 0 の信頼スコアが 0.99 の場合、モデルはこのサンプルを 99% の確率で不正でないと予測したことを意味します。

ステップ 2: Vertex AI API を使用してモデルの予測を取得する

デプロイしたエンドポイントが想定どおりに動作していることを確認するには UI が適していますが、REST API の呼び出しによって予測を動的に取得したい場合もあります。ここでは、モデルの予測を取得する方法として、このラボで最初に作成した Vertex Workbench インスタンスを使用します。

次に、作成したノートブック インスタンスを開き、Launcher から Python 3 ノートブックを開きます。

ノートブックを開く

ノートブックで、セル内で次のコマンドを実行して Vertex SDK をインストールします。

!pip3 install google-cloud-aiplatform --upgrade --user

次に、SDK をインポートするためのセルをノートブックに追加し、デプロイしたエンドポイントへの参照を作成します。

from google.cloud import aiplatform

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/YOUR-PROJECT-NUMBER/locations/us-central1/endpoints/YOUR-ENDPOINT-ID"
)

上記の endpoint_name 文字列内の 2 つの値を、使用しているプロジェクト番号とエンドポイントに置き換える必要があります。プロジェクト番号を確認するには、プロジェクト ダッシュボードに移動し、プロジェクト番号の値を取得します。

エンドポイント ID は、コンソールのエンドポイント セクションで確認できます。

エンドポイント ID を確認する

最後に、以下のコードを新しいセルにコピーして実行し、エンドポイントに対する予測を作成します。

test_instance={
    'Time': 80422,
    'Amount': 17.99,
    'V1': -0.24,
    'V2': -0.027,
    'V3': 0.064,
    'V4': -0.16,
    'V5': -0.152,
    'V6': -0.3,
    'V7': -0.03,
    'V8': -0.01,
    'V9': -0.13,
    'V10': -0.18,
    'V11': -0.16,
    'V12': 0.06,
    'V13': -0.11,
    'V14': 2.1,
    'V15': -0.07,
    'V16': -0.033,
    'V17': -0.14,
    'V18': -0.08,
    'V19': -0.062,
    'V20': -0.08,
    'V21': -0.06,
    'V22': -0.088,
    'V23': -0.03,
    'V24': 0.01,
    'V25': -0.04,
    'V26': -0.99,
    'V27': -0.13,
    'V28': 0.003
}

response = endpoint.predict([test_instance])

print('API response: ', response)

0 クラスの予測は .67 のあたりになります。これは、このトランザクションが不正でない確率が 67% であるとモデルが判断していることを意味します。

お疲れさまでした

Vertex AI を使って次のことを行う方法を学びました。

  • マネージド データセットをアップロードする
  • AutoML を使用して表形式データでモデルをトレーニングして評価する
  • モデルをエンドポイントにデプロイする
  • Vertex の SDK を使用してモデル エンドポイントによる予測を取得する

Vertex AI のさまざまな機能の詳細については、こちらのドキュメントをご覧ください。

9. クリーンアップ

このラボで作成したノートブックを引き続き使用する場合は、未使用時にオフにすることをおすすめします。Cloud コンソールの Workbench UI で、ノートブックを選択して [停止] を選択します。

ノートブックを完全に削除する場合は、右上にある [削除] ボタンをクリックします。

デプロイしたエンドポイントを削除するには、Vertex AI コンソールの [エンドポイント] セクションに移動し、エンドポイントからモデルのデプロイを解除します。

エンドポイントの削除

ストレージ バケットを削除するには、Cloud コンソールのナビゲーション メニューで [ストレージ] に移動してバケットを選択し、[削除] をクリックします。

ストレージを削除