Vertex AI使ってみた

# はじめに
Vertex AIはGoogle Cloudの機械学習関連のサービスを統合したプラットフォームです。
以下のようなワークフローをカバーしており、機械学習全体のプロセスを効率的に行なうことができます。

| ワークフロー | 説明 |
|:-----------|:------------|
| 1.データの収集　| 機械学習に必要なデータを収集します|
| 2.データの前処理 | 収集したデータに欠損、ノイズ、エラー値がある場合、適切な値で埋めたり、好ましくないデータ値を除いたりして機械学習アルゴリズムが学習しやすいようなデータにします |
| 3.機械学習モデルの作成 | 教師あり学習（回帰、分類）、教師なし学習（クラスタリング、次元削減）など用途にあった機械学習モデルを作成します |
| 4.機械学習モデルの学習 | 前処理済のデータを機械学習モデルに入力し学習を行います |
| 5.学習結果の評価 | 機械学習の結果が望ましい状態になっているかをさまざまな指標にもとづいて評価します |
| 6.機械学習モデルのデプロイ | 学習が完了した機械学習モデルを実際に使えるように予測を行うためのサーバへデプロイします |
| 7.予測 | 予測を行うためのサーバにデータを与えて予測結果を取得します |

# 実際に使ってみる
VertexAIのチュートリアルで使用されているデータを利用して表形式のデータの機械学習を行います。
使用するのは、銀行のマーケティングデータです。
銀行の顧客が年齢、収入、職業などから定期預金を購入するかどうか予測するのが機械学習モデルの目的です。
今回の場合にはプログラミングを行うことなく全てのワークフローを実施することができます。

*)「4.機械学習モデルの学習」を実行すると1時間以上計算にかかります。数千円ほど課金されますのでご注意ください😭

#### 0.準備
まずGCPのナビゲーションメニューから「Vertex AI」の「ダッシュボード」を選択します。
![vertex_ai_p0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/4ecadf2e-9fdb-2afd-b01e-8920e45e060e.png)
Vertex AIのダッシュボード画面に遷移します。
![vertex_ai_p1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/97c0452e-2011-d275-5143-66442c6dc127.png)

#### 1.データの収集
ダッシュボードの「トレーニングデータを準備する」の「データセットを作成」をクリックします。
![vertex_ai_p2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/dd19d9f6-4d27-f4fe-62df-68548c4ba672.png)
データセット画面に遷移します。
![vertex_ai_p3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/f655a461-99f6-9d63-4148-d0e9923984e5.png)
「データセット名」に任意のデータセット名を入力します。ここでは「tabular_dataset」としました。
![vertex_ai_p4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/9b46e778-c740-e82f-447c-c16152ceb2da.png)
「データタイプと目標の選択」部分には「画像」、「表形式」、「テキスト」、「動画」と表示されています。表形式のデータを扱いますので「表形式」を選択します。
![vertex_ai_p5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/352fa145-a5cb-4d81-bfcd-106d353074d6.png)
表形式での目標の選択に遷移します。「回帰/分類」にチェックを入れて「作成」をクリックします。
![vertex_ai_p6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/aa19d56d-36eb-b67f-936c-0442b938e419.png)
ソース画面に遷移します。
![vertex_ai_p7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/aec892af-526e-71db-e2df-12084e87a929.png)
「データソースを選択」部分で「CloudStorageからCSVファイルを選択」にチェックを入れます。
![vertex_ai_p8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/d02c97b4-d2f5-4820-2e58-3ff33381574d.png)
CloudStorageからCSVファイルを選択するための「インポート ファイルのパス」の入力欄に次のように入力します。
cloud-ml-tables-data/bank-marketing.csv

![vertex_ai_p9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/9889f738-eeeb-5b47-bb0e-4b0c00def36d.png)

「続行」をクリックします。分析画面に遷移します。
![vertex_ai_p10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/6d5607bd-4af6-a766-fbc5-af51ab332b7a.png)

#### 2.データの前処理
今回のデータでは全てのデータが正しいフォーマットになっているため、前処理を行う必要はありません。

#### 3.機械学習モデルの作成、4.機械学習モデルの学習
分析画面で「新しいモデルをトレーニングする」を選択します。「Train new model」画面に遷移します。
「1.トレーニング方法」で次のように設定して「続行」をクリックします。
「Objective」欄で「Classification」を選択
「AutoML」または「カスタム トレーニング（上級者向け）」で「AutoML」を選択
![vertex_ai_p11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/14e11ded-11d1-c090-dc36-ce54b2ee6018.png)
「2.モデルの詳細」で次のように設定して「続行」をクリックします。
「Model name」に任意の文字列を指定します。今回は"tabular_model"としました。
「Target column」には今回使用する銀行のデータセットに含まれている「Deposit」カラムを選択します。「Deposit」カラムは銀行の顧客が定期預金の契約をしたかどうかを示していて、「2:はい」、「1:いいえ」となっています。この値を予測するためにモデルをトレーニング（学習）します。
![vertex_ai_p12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/e431b471-d39e-35a2-6d9f-ce78d64295b1.png)
「3.トレーニング オプション」で「続行」をクリックします。
（「トレーニング オプション」では各カラムの変換方法を指定するなど行えます。今回は指定せずに利用します。）
![vertex_ai_p13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/a25803b8-c64a-f58f-a191-980cef419e01.png)
「コンピューティングと料金」では「Budget」に1を入力して「トレーニングを開始」をクリックします。
![vertex_ai_p14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/311c60d2-4cf5-0e71-fe61-f03285a76bbf.png)
分析画面に遷移し、モデルがトレーニング中になります。トレーニングには1時間以上かかります。
トレーニングが完了するとメールが届きます。
![vertex_ai_p15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/2ec0b9a0-3c96-fa18-b9d2-f0005c4ad2fd.png)

#### 5.学習結果の評価
トレーニングが完了したら、ナビゲーションメニューから「モデル」を選択します。
![vertex_ai_p16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/d0a84e83-7e32-ebbc-d61e-f2080748cf6f.png)
「名前」に表示されているトレーニング済みのモデル名"tabular_model"をクリックします。評価ページに遷移します。
評価内容の詳細は各指標の「？」アイコンから確認できます。
![vertex_ai_p17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/5fc5df99-daca-d53f-1134-86e3d194b125.png)
Feature Importanceは、各データがモデルのトレーニングにどのように影響したかを示します。値が高いほど、影響が大きくなります。
![vertex_ai_p18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/2d6fdea3-08ca-a430-d423-b9ddbe7d339f.png)

#### 6.機械学習モデルのデプロイ 〜 7.予測
モデルをテストしたり、オンライン予測を行ったりするために実際の運用環境に配置（デプロイ）します。「デプロイとテスト」をクリックします。
![vertex_ai_p19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/73bc8e1f-b8ab-8f55-3f0f-685a901ec3c8.png)
「エンドポイントへのデプロイ」ボタンをクリックします。「エンドポイントへのデプロイ」画面が表示されます。
![vertex_ai_p20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/0bf2ffe7-6eed-6be6-ff83-60a808c57806.png)
「エンドポイントの定義」で「エンドポイント名」を入力します。今回は"tabular_endpoint"と入力して「続行」をクリックします。
![vertex_ai_p21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/ecea54b7-d67c-6cee-7324-e43e38e17bdb.png)
「モデル設定」画面が表示されます。「高度なスケーリングオプション」の「マシンタイプ」を"n1-standard-2, 2 vCPUs, 7.5GiB memory"に設定して「完了」を選択します。次に画面左側の「デプロイ」をクリックします。
![vertex_ai_p23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/3cca4700-46e4-62d5-5e56-7bc29d97f57b.png)
モデルのデプロイには約5分以上かかります。

モデルがエンドポイントにデプロイされたら、予測リクエストを送信できます。
![vertex_ai_p24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/b9c840c2-c03b-d4bf-555b-0fd8c1562484.png)
「モデルのテスト」部分に事前に入力された[値]列が表示されていますので、これらの値を使用します。「予測」をクリックします。
（モデルのテスト部分の値を別の値に設定して「予測」することもできます）
以下のように「モデルのテスト」右側の「予測のラベル」に予測結果が表示されます。この例では予測結果の「選択済みのラベル」は、"1"で「銀行の顧客が定期預金の契約をしなかった」と予測したことになります。
![vertex_ai_p25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/644426f3-a9ae-42e5-d659-0b6be198845a.png)

# 後片付け
課金が発生するため以下のように後片付けをします。
まずデプロイされたモデルを削除します。
「デプロイとテスト」タブを選択して画面右側の縦に3点のアイコンを選択し、「モデルのデプロイ解除」を選択します。
![vertex_ai_p26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/5a3dfc46-072d-f514-bee4-090034789af8.png)
モデルのデプロイ解除画面が表示されるので「確認」をクリックします。
![vertex_ai_p27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/1c1887ef-9a1c-9355-c9f4-f4dfe3184da2.png)
モデルがデプロイ解除されたことを確認します。
![vertex_ai_p28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/2246e9a3-324d-80fc-5588-3d32224c7d7b.png)
次にエンドポイントを削除します。画面左側のナビゲーションメニューで「エンドポイント」をクリックします。エンドポイント画面に遷移します。
![vertex_ai_p29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/bb059115-61ac-581c-317d-fbcb810b5128.png)
エンドポイントの名前に表示された"tabular_endpoint"の左側のチェックボックスにチェックを入れ、「削除」をクリックします。
![vertex_ai_p30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/6668d54c-acae-59a6-642c-dd78bc3a93c1.png)
「エンドポイントの削除」画面が表示されます。「確認」をクリックします。
![vertex_ai_p31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/6b2a8ebe-0ba9-65f4-6819-8d1291de6d54.png)
エンドポイントが削除されたことを確認します。
![vertex_ai_p32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36602/07ea56fc-b6fa-bff2-7c0c-91b85d0c88d4.png)

# 次回のお知らせ
明日は、@thomi40さんによる「gem BrakemanでRails製アプリケーションの脆弱性を検知する」です。
引き続き、[GMOアドマーケティング Advent Calendar 2021](https://qiita.com/advent-calendar/2021/gmo-am)をお楽しみください!

# 参考
Vertex AIのチュートリアル
（Vertex AIのダッシュボードの「チュートリアルを見る」から参照できます）
Train　an AutoML tabular model
Evaluate and deploy an AutoML tabular model