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、Prediction、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 (with 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

モデルに名前を付けます。デフォルトを使用することもできます。[ターゲット列] で [クラス] を選択します。特定の取引が不正かどうかを示す整数です(不正行為の場合は 0、不正行為の場合は 1)。

[続行] を選択します。

モデルのトレーニング ステップ 2

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

高度なトレーニング オプション

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

トレーニング ジョブが完了するとメールが届きます。トレーニングの所要時間は、リソースのスピンアップと破棄の時間を考慮し、1 時間強です。

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

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

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

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

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

データセットに含まれるサンプルのうち不正なトランザクションは 1% 未満であるため、モデルの精度が 99% であれば、99% の確率で不正でないクラスを無作為に推測している可能性が高いことを思い出してください。そのため、ここでは、クラスごとにモデルの精度を確認することをおすすめします。

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

混同行列

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

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

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

特徴量の重要度

これにより、予測を行う際に、モデルに最大のシグナルを提供した特徴がわかります。特徴量の重要度は Explainable AI の一種です。ML モデルについてより多くの分析情報を得るためのさまざまなメソッドを含むフィールドが予測の実行です。ここに示す特徴量の重要度のグラフは、テストセットに対するモデルの予測をすべて調べることで、集計として計算されます。一連のサンプルの中から最も重要な特徴がわかります。

データセットのほとんどの特徴量が不明瞭になっていなければ、このグラフはさらに魅力的です。たとえば、取引の種類(送金や預金など)が不正行為の最大の兆候であることがわかります。

実際のシナリオでは、これらの特徴量の重要度の値を使用して、モデルを改善し、予測の信頼性を高めることができます。次にモデルをトレーニングするときに、重要度の低い特徴を削除することや、重要度の高い 2 つの特徴を特徴クロスに組み合わせて、モデルのパフォーマンスが向上するかどうかを確認する場合があります。

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

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

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

ステップ 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 は、コンソールの endpoints セクションで確認できます。

エンドポイント 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 コンソールのナビゲーション メニューで [ストレージ] に移動してバケットを選択し、[削除] をクリックします。

ストレージを削除