SQL を使用した BQML による映画評価の予測

1. はじめに

この Codelab では、BigQuery ML カスタムモデルで SQL のみを使用して映画スコア予測モデルを作成し、VertexAI にデプロイします。学習内容:

  1. Cloud Shell を使用して BigQuery データセットを作成し、ファイルからデータを読み込む方法
  2. 教師あり学習に BigQuery ML を使用して、SQL クエリのみを使用するあまりコーディングせずに映画スコア予測用のマルチクラス回帰予測モデルを作成する方法

作成するアプリの概要

まず、

  • テーブルとモデル コンポーネントが格納された BigQuery データセット
  • SQL クエリを使用して映画の評価を予測するための BigQuery ML モデル
  • Vertex AI Model Registry にモデルをデプロイする

要件

  • ブラウザ(ChromeFirefox など)
  • 課金を有効にした Google Cloud プロジェクト

2. プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. BigQuery に移動して API を有効にします。ブラウザに https://console.cloud.google.com/bigquery の URL を入力して、BigQuery ウェブ UI を直接開くこともできます。

3. Cloud Shell をアクティブにする

  1. Cloud Shell を使用します。Cloud Shell は、Google Cloud で実行されるコマンドライン環境で、bq がプリロードされています。Cloud コンソールの右上にある [Cloud Shell をアクティブにする] をクリックします。6757b2fb50ddcc2d.png
  2. Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <PROJECT_ID>

gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

4. トレーニング データの準備

これは、データ関連のプロジェクト、プロダクト、アプリすべてにおける重要なステップであり、最適なデータセットを準備して ML プロジェクトに備えるためのテクノロジーに加えて、多くの専門知識が必要です。この Codelab では、すでに準備されている data ファイルを使用します。

5. データセットの作成と読み込み

BigQuery データセットはテーブルのコレクションです。データセット内のすべてのテーブルは、同じデータ ロケーションに保存されます。カスタム アクセス制御を接続して、データセットとそのテーブルへのアクセスを制限することもできます。

  1. Cloud Shell で bq mk コマンドを使用して「movies」というデータセットを作成します。
bq mk --location=<<LOCATION>> movies

ロケーションをリージョン(asia-south1)に設定します。

  1. データファイル(.csv)が用意できていることを確認します。Cloud Shell で次のコマンドを実行してリポジトリのクローンを作成し、プロジェクトに移動します。
git clone <<repository link>>

cd movie-score
  1. bq load コマンドを使用して、CSV ファイルを BigQuery テーブルに読み込みます(BigQuery UI から直接アップロードすることもできます)。
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

オプション 説明: –source_format=CSV - データファイルの解析時に CSV データ形式を使用します。–skip_lead_rows=1 - CSV ファイルの最初の行はヘッダー行であるため、スキップします。Movies.movies - 最初の位置引数であり、データを読み込むテーブルを定義します。./movies.csv は 2 番目の位置引数であり、読み込むファイルを定義します。bq load コマンドでは、ローカル ファイルに加えて、gs://my_bucket/path/to/file URI を使用して Cloud Storage からファイルを読み込むことができます。スキーマ。JSON スキーマ ファイルで定義することも、カンマ区切りのリストとして定義することもできます(今回はカンマ区切りのリストを使用)。​これで、csv データが movies.movies テーブルに読み込まれました。

  1. 次の 3 つの方法のいずれかでクエリを実行します。

BigQuery を操作するには 3 つの方法があります。そのうちの 2 つを試してみましょう。BigQuery ウェブ UI b.bq コマンド c.API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

BigQuery Web SQL Workspace を使用してクエリを実行しました。SQL ワークスペースは次のようになります。

109a0b2c7155e9b3.png

bq コマンドを使用する場合:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. 1 ~ 10 のスケールで映画の評価を予測する

BigQuery ML は、ロジスティック回帰モデルタイプの教師あり学習をサポートしています。2 項ロジスティック回帰モデルタイプを使用すると、値が 2 つのカテゴリのいずれかに該当するかどうかを予測できます。または、多クラス回帰モデルタイプを使用して、値が複数のカテゴリのいずれかに該当するかどうかを予測することもできます。これらは、データを 2 つ以上のカテゴリに分類しようとするため、分類問題と呼ばれます。

モデルの選択に関する注意事項: これはここで選択したモデルの実験的な選択です。最初にいくつかのモデルで実行した結果の評価に基づき、最後に LOGISTIC REG を使用してシンプルに保ち、複数のデータベースから実際の映画評価に近い結果を得ることにしました。これはあくまでモデルの実装のサンプルとして考えるべきであり、必ずしもこのユースケースに推奨されるモデルであるとは限りません。これを実装するもう一つの方法は、スコアを予測する代わりに、このロジスティック回帰モデルを使用して映画の結果を良い / 悪いと予測することです。

トレーニング データを選択する

映画データ(CSV 形式)は「data_cat」フィールドを使用して、テーブル内の 3 つのカテゴリにすでに分割されています3 つの値(TRAIN、TEST、PREDICT)を 持つことができますテストとトレーニングの目的でデータセットを分割することは、モデルの重要な側面です。データセットの分割について詳しくは、こちらのドキュメントをご覧ください。

ロジスティック回帰モデルを作成する

オプション「LOGISTIC_REG」を指定して CREATE MODEL ステートメントを使用できます。ロジスティック回帰モデルを作成して トレーニングできます

BigQuery ウェブ UI の SQL ワークスペースで以下のクエリを実行します。

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

クエリの詳細:

  1. CREATE MODEL ステートメントで、SELECT ステートメントのトレーニング データを使用してモデルをトレーニングする
  2. OPTIONS 句は、モデルタイプとトレーニング オプションを指定します。ここでは、LOGISTIC_REG オプションを使用してロジスティック回帰モデルのタイプを指定しています。2 項ロジスティック回帰モデルと多クラス ロジスティック回帰モデルを指定する必要はない。BigQuery ML では、ラベル列の一意の値の数に基づいてどちらをトレーニングするかを決定できる
  3. data_split_method=‘NO_SPLIT&#39;BQML は、クエリ条件(data_cat = ‘TRAIN’)に従ってデータを強制的にトレーニングします。また、‘AUTO_SPLIT’フレームワーク(この場合はサービス)がトレーニングとテストの分割のパーティションをランダム化できるようにするオプション
  4. input_label_cols オプションは、SELECT ステートメントでラベル列として使用する列を指定します。ここで、ラベル列はスコアであるため、モデルは各行に存在する他の値に基づいて、10 個のスコアの値のうちどれが最も可能性が高いかを学習します。
  5. 「auto_class_weights=TRUE」というトレーニング データ内のクラスラベルのバランスを取ります。デフォルトでは、トレーニング データは重み付けされません。トレーニング データ内のラベルが不均衡である場合、モデルは最も人気のあるクラスのラベルをより重く予測するように学習する可能性があります。
  6. SELECT ステートメントは、CSV データを使用して読み込んだテーブルをクエリします。このステップで TRAIN データセットのみが選択されるように、WHERE 句で入力テーブルの行をフィルタします。

作成すると、BigQuery SQL ワークスペースの SCHEMA セクションに以下が表示されます。

ラベル

93efd0c1a7883690.png

機能

8c539338df1a9652.png

ロジスティック回帰モデルを評価する

モデルを作成したら、ML.EVALUATE 関数を使用してモデルの性能を評価します。ML.EVALUATE 関数は、実際のデータと照らし合わせて予測値を評価します。モデルの評価に使用するクエリは次のとおりです。

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

ML.EVALUATE 関数は、前のステップでトレーニングしたモデルと、SELECT サブクエリによって返された評価データを取得します。この関数は、モデルに関する統計を単一行で返します。

b54b0ebd6514a498.png

ロジスティック回帰を使用しているため、結果には上のスクリーンショットに示されている指標(適合率、再現率、精度、f1-score、log_loss、roc_auc)が含まれます。これらは、モデルのパフォーマンスを評価するうえで非常に重要な指標です。入力データを指定せずに ML.EVALUATE を呼び出すこともできます。ML.EVALUATE はトレーニング中に導出された評価指標を取得します。これは、自動的に予約された評価データセットを使用します。

主な指標の概要:

適合率 - 陽性と特定されたもののうち、実際に正しかったものの割合適合率 = 真陽性 / (真陽性 + 偽陽性) 再現率 - 実際の陽性が正しく特定された割合再現率 = 真陽性 / (真陽性 + 偽陰性) 精度 - 分類モデルを評価するための指標。モデルが実際に正しかった予測の割合 精度 = 正しい予測の数 / 予測の総数

ML.PREDICT を使用して映画の評価を予測する

次のクエリは、データセットの PREDICT 部分に含まれる各映画のスコアを予測します。

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

以下は、結果のスニペットです。

1efb91967acc1f0c.png

モデルの結果には、映画の予測スコアが 1 ~ 10 のスケール(分類)で表示されます。なぜ各映画に対する予測行が複数あるのか、疑問に思うことでしょう。これは、モデルが、可能性のある予測ラベルと、それぞれの出現確率を降順で返すためです。

予測結果とモデルを分析する

さらに、予測結果の一部として、次の 2 つの優れた分析ステップを実行できます。

  1. モデルがこれらの予測結果を生成する理由を理解するには、ML.EXPLAIN_PREDICT 関数を使用します。
  2. 所得階層を判断するうえで最も重要な特徴を特定するには、ML.GLOBAL_EXPLAIN 関数を使用します。

これらの手順について詳しくは、こちらのドキュメントをご覧ください。

7. BigQuery AutoML を使用して映画の評価を予測する

AutoML は、BigQuery サービスにモデルの作成を任せて、モデルの結果が生成されるまでリラックスしたい場合に最適です。AUTOML 機能は BQML で直接使用でき(model_type=AUTOML_CLASSIFIER または AUTOML_REGRESSOR)、データがすでに BigQuery にある場合は簡単に呼び出すことができます。

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

モデルを作成したら、カスタム BQML モデルで説明したように、EVALUATE、PREDICT、EXPLAIN_PREDICT のステップを実行できます。BigQuery AutoML の詳細については、ドキュメントをご覧ください。

8. BQML モデルを Vertex AI Model Registry にワンクリックでデプロイ

Vertex AI Model Registry 内ですべての ML モデルを確認できるようになり、組織でのモデルの管理とデプロイが容易になります。これには、BigQuery ML、AutoML、カスタム トレーニング モデルで構築されたモデルが含まれます。手順は次のとおりです。

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

model_registry="vertex_ai"オプションを使用することで、BigQuery ML は Vertex AI Model Registry に明示的に登録するモデルを選択できるようになります。詳しくは、こちらのブログをご覧ください。

9. まとめ

30 分足らずで以下の成果を達成:

  1. 分析プロジェクト用のデータベースとして BigQuery をセットアップする
  2. BigQuery データ SQL のみを使用し、他のコーディングなしでカスタム予測モデルを作成
  3. SQL クエリのみを使用して BQ Auto ML モデルを作成
  4. BQML モデルを Vertex AI Model Registry にデプロイ

10. クリーンアップ

この投稿で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

11. 完了

これで、BQML カスタムと AutoML を使用して映画スコア予測モデルを作成し、そのモデルを Vertex AI Model Registry にデプロイできました。これらはすべて SQL のみを使用して行います。