1. 概要
このラボでは、Vertex AI を使用して表形式データによってモデルのトレーニングと提供を行います。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)を取り上げます。

3. 環境を設定する
この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順を行ってください。
ステップ 1: Compute Engine API を有効にする
Compute Engine に移動し、まだ有効になっていない場合は [有効にする] を選択します。これはノートブック インスタンスを作成するために必要です。
ステップ 2: Vertex AI API を有効にする
Cloud コンソールの [Vertex AI] セクションに移動し、[**Vertex AI API を有効にする**] をクリックします。

ステップ 3: Vertex AI Workbench インスタンスを作成する
Cloud Console の [Vertex AI] セクションで [ワークベンチ] をクリックします。

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

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

デフォルトのオプションを使用して、[作成] をクリックします。
ステップ 5: ノートブックを開く
インスタンスが作成されたら、[JUPYTERLAB を開く] を選択します。

モデルのトレーニングに使用するデータは、このクレジットカード不正検出データセットのものです。このデータセットの BigQuery で一般公開されているバージョンを使用します。
4. マネージド データセットを作成する
Vertex AI では、さまざまなデータ型のマネージド データセットを作成し、そのデータセットの統計情報を生成して、AutoML や独自のカスタムモデル コードによるモデルのトレーニングに使用できます。
ステップ 1: データセットを作成する
コンソールの Vertex メニューで [データセット] を選択します。
![[データセット] を選択します](https://codelabs.developers.google.com/static/vertex-automl-tabular/img/select-datasets.png?hl=ja)
このラボでは、特定のクレジットカード トランザクションが不正として分類されるかどうかを判断する不正行為検出モデルを構築します。
[データセット] ページで、データセットに名前を付け、[表形式]、[回帰/分類] を選択します。次に、データセットを作成 します。

Vertex のマネージド データセットにデータをインポートするには、次のオプションがあります。
- パソコンからローカル ファイルをアップロードする
- Cloud Storage からファイルを選択する
- BigQuery からデータを選択する
ここでは、BigQuery の一般公開テーブルからデータをアップロードします。
ステップ 2: BigQuery からデータをインポートする
インポート方法として [テーブルまたはビューを BigQuery から選択] を選択し、次のコードを [BigQuery テーブル] ボックスにコピーします。bigquery-public-data.ml_datasets.ulb_fraud_detectionThen select [Continue]:

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

必要に応じて、[統計情報を生成] をクリックしてこのデータセットに関する追加情報を確認できますが、次のステップに進む前に確認する必要はありません。このデータセットには、実際のクレジットカード トランザクションが含まれています。ほとんどの列名は不明瞭化されていて、V1、V2 のような名前になっています。
5. AutoML でモデルをトレーニングする
マネージド データセットをアップロードしたら、このデータでモデルをトレーニングできるようになります。特定のトランザクションが不正かどうかを予測する分類モデルをトレーニングします。 Vertex AI では、次の 2 つの方法でモデルをトレーニングできます。
- AutoML: 最小限の労力と ML の専門知識で高品質なモデルをトレーニングする
- カスタム トレーニング: Google Cloud のビルド済みコンテナまたは独自のコンテナのいずれかを使用して、クラウド内でカスタム トレーニング アプリケーションを実行する
このラボでは、トレーニングに AutoML を使用します。
ステップ 1: トレーニング ジョブを開始する
前のステップで終了したデータセットの詳細ページで、右上の [新しいモデルのトレーニング] を選択します。目標として [Classification] を選択し、モデル トレーニングに [AutoML] を選択したままにして、[Continue] をクリックします。

モデルに名前を付けます。デフォルトの名前を使用することもできます。[ターゲット列] で [Class] を選択します。これは、特定のトランザクションが不正だったかどうかを示す整数です(0 は不正行為でない、1 は不正行為である)。
Then select [Continue]:

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

[続行] を選択して、最後のステップ(コンピューティングと料金)に進みます。ここでは、予算のノード時間数として「1 」と入力し、早期停止は有効のままにしておきます。一般的に、特徴と選択したラベルとの関連性を調べるには、まず 1 コンピューティング時間ほど AutoML モデルをトレーニングするのがよいでしょう。そこから、特徴を変更してさらにトレーニングすることで、モデルのパフォーマンスを向上させることができます。次に、[トレーニングを開始] を選択します。
トレーニング ジョブが完了すると、メールが届きます。リソースのスピンアップとティアダウンに時間がかかるため、トレーニングには 1 時間強かかります。
6. モデル評価指標を調べる
このステップでは、モデルのパフォーマンスを確認します。
モデル トレーニング ジョブが完了したら、Vertex の [モデル] タブに移動します。トレーニングしたモデルをクリックして、[評価] タブを確認します。ここには多くの評価指標が示されていますが、ここでは混同行列 と特徴量の重要度 の 2 つに注目します。
ステップ 1: 混同行列を理解する
混同行列では、テストセット内の各クラスにおいてモデルが正しく予測したサンプルの割合がわかります。今回のような不均衡なデータセットでは、混同行列のほうが全体的な精度よりも、モデルのパフォーマンスを適切に測定できます。
このデータセットには不正なトランザクションのサンプルが 1% 未満しかないので、モデルの精度が 99% であっても、そのモデルはランダムに 99% の確率で不正でないと推測している可能性があります。そのため、ここでは適切な指標を得るためにモデルの精度をクラスごとに見る必要があります。
[評価] タブで下にスクロールすると、次のような混同行列が表示されます(厳密な割合は異なる場合があります)。

混同行列は、初期モデルがテストセット内にある不正サンプルの 85% を正しく分類できることを示しています。非常に不均衡なデータセットであることを考慮すると、これは悪くない結果です。次に、コンピューティング時間を増やしてモデルをトレーニングして、85% を上回る結果が得られるかどうかを確かめることもできます。
ステップ 2: 特徴量の重要度を確認する
混同行列の下には、次のような特徴量の重要度グラフが表示されています。

これは、予測を行う際にどの特徴量がモデルに最も大きなシグナルを与えたかを示しています。特徴量の重要度は、説明可能な 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 インスタンスを使用します。
次に、作成したノートブック インスタンスを開き、ランチャーから 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 は、コンソールのエンドポイント セクションで確認できます。

最後に、以下のコードを新しいセルにコピーして実行し、エンドポイントに対する予測を作成します。
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 コンソールのナビゲーション メニューで [ストレージ] に移動してバケットを選択し、[削除] をクリックします。
