モデルのエクスポート

このページでは、BigQuery ML モデルをエクスポートする方法を説明します。BigQuery ML モデルを Cloud Storage にエクスポートし、オンライン予測や Python での編集に利用できます。BigQuery ML モデルをエクスポートする方法は、次のとおりです。

  • Google Cloud コンソールの使用
  • EXPORT MODEL ステートメントを使用する。
  • bq コマンドライン ツールの bq extract コマンドを使用する。
  • API またはクライアント ライブラリを介して extract ジョブを送信する。

エクスポートできるモデルタイプは、次のとおりです。

  • AUTOENCODER
  • AUTOML_CLASSIFIER
  • AUTOML_REGRESSOR
  • BOOSTED_TREE_CLASSIFIER
  • BOOSTED_TREE_REGRESSOR
  • DNN_CLASSIFIER
  • DNN_REGRESSOR
  • DNN_LINEAR_COMBINED_CLASSIFIER
  • DNN_LINEAR_COMBINED_REGRESSOR
  • KMEANS
  • LINEAR_REG
  • LOGISTIC_REG
  • MATRIX_FACTORIZATION
  • RANDOM_FOREST_CLASSIFIER
  • RANDOM_FOREST_REGRESSOR
  • TENSORFLOW(インポートした TensorFlow モデル)
  • PCA
  • TRANSFORM_ONLY

モデルの形式とサンプルをエクスポートする

次のテーブルに、各 BigQuery ML モデルタイプのエクスポート先フォーマットと、Cloud Storage バケットに書き込まれるファイルのサンプルを示します。

モデルタイプ エクスポート モデルの形式 エクスポートされたファイルのサンプル
AUTOML_CLASSIFIER TensorFlow SavedModel(TF 2.1.0) gcs_bucket/
  assets/
    f1.txt
    f2.txt
  saved_model.pb
  variables/
    variables.data-00-of-01
    variables.index
AUTOML_REGRESSOR
AUTOENCODER TensorFlow SavedModel(TF 1.15 以降)
DNN_CLASSIFIER
DNN_REGRESSOR
DNN_LINEAR_COMBINED_CLASSIFIER
DNN_LINEAR_COMBINED_REGRESSOR
KMEANS
LINEAR_REGRESSOR
LOGISTIC_REG
MATRIX_FACTORIZATION
PCA
TRANSFORM_ONLY
BOOSTED_TREE_CLASSIFIER ブースター(XGBoost 0.82) gcs_bucket/
  assets/
    0.txt
    1.txt
    model_metadata.json
  main.py
  model.bst
  xgboost_predictor-0.1.tar.gz
    ....
     predictor.py
    ....


main.py はローカル実行用です。詳細については、モデルのデプロイをご覧ください。
BOOSTED_TREE_REGRESSOR
RANDOM_FOREST_REGRESSOR
RANDOM_FOREST_REGRESSOR
TensorFlow(インポート) TensorFlow SavedModel モデルのインポート時に存在していたものとまったく同じファイル

TRANSFORM でトレーニングされたモデルをエクスポートする

モデルが TRANSFORM 句でトレーニングされている場合、追加の前処理モデルでも TRANSFORMで同じロジックが実行され、サブディレクトリ transform に TensorFlow SavedModel 形式で保存されます。TRANSFORMでトレーニングされたモデルは、ローカルにも Vertex AI にもデプロイできます。詳細については、モデルのデプロイをご覧ください。

エクスポート モデルの形式 エクスポートされたファイルのサンプル
予測モデル: TensorFlow SavedModel またはブースター(XGBoost 0.82)。
TRANSFORM 句の前処理モデル: TensorFlow SavedModel(TF 2.5 以降)
gcs_bucket/
  ....(model files)
  transform/
    assets/
        f1.txt/
        f2.txt/
    saved_model.pb
    variables/
        variables.data-00-of-01
        variables.index

トレーニング中に TRANSFORMの外部で実行された特徴量エンジニアリングに関する情報はモデルに含まれません。たとえば、SELECT ステートメント内の任意の要素です。そのため、前処理モデルにフィードする前に、入力データを手動で変換する必要があります。

サポートされるデータタイプ

TRANSFORMでトレーニングされたモデルをエクスポートする場合、TRANSFORMへのフィードでは次のデータ型を使用できます。

TRANSFORM 入力のデータ型 TRANSFORM 入力サンプル エクスポートされた前処理モデルの入力サンプル
INT64 10,
11
tf.constant(
  [10, 11],
  dtype=tf.int64)
NUMERIC NUMERIC 10,
NUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
BIGNUMERIC BIGNUMERIC 10,
BIGNUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
FLOAT64 10.0,
11.0
tf.constant(
  [10, 11],
  dtype=tf.float64)
BOOL TRUE,
FALSE
tf.constant(
  [True, False],
  dtype=tf.bool)
STRING 'abc',
'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
BYTES b'abc',
b'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
DATE DATE '2020-09-27',
DATE '2020-09-28'
tf.constant(
  [
    '2020-09-27',
    '2020-09-28'
  ],
  dtype=tf.string)

"%F" format
DATETIME DATETIME '2023-02-02 02:02:01.152903',
DATETIME '2023-02-03 02:02:01.152903'
tf.constant(
  [
    '2023-02-02 02:02:01.152903',
    '2023-02-03 02:02:01.152903'
  ],
  dtype=tf.string)

"%F %H:%M:%E6S" format
TIME TIME '16:32:36.152903',
TIME '17:32:36.152903'
tf.constant(
  [
    '16:32:36.152903',
    '17:32:36.152903'
  ],
  dtype=tf.string)

"%H:%M:%E6S" format
TIMESTAMP TIMESTAMP '2017-02-28 12:30:30.45-08',
TIMESTAMP '2018-02-28 12:30:30.45-08'
tf.constant(
  [
    '2017-02-28 20:30:30.4 +0000',
    '2018-02-28 20:30:30.4 +0000'
  ],
  dtype=tf.string)

"%F %H:%M:%E1S %z" format
ARRAY ['a', 'b'],
['c', 'd']
tf.constant(
  [['a', 'b'], ['c', 'd']],
  dtype=tf.string)
ARRAY< STRUCT< INT64, FLOAT64>> [(1, 1.0), (2, 1.0)],
[(2, 1.0), (3, 1.0)]
tf.sparse.from_dense(
  tf.constant(
    [
      [0, 1.0, 1.0, 0],
      [0, 0, 1.0, 1.0]
    ],
    dtype=tf.float64))
NULL NULL,
NULL
tf.constant(
  [123456789.0e10, 123456789.0e10],
  dtype=tf.float64)

tf.constant(
  [1234567890000000000, 1234567890000000000],
  dtype=tf.int64)

tf.constant(
  [' __MISSING__ ', ' __MISSING__ '],
  dtype=tf.string)

サポートされている SQL 関数

TRANSFORMでトレーニングしたモデルをエクスポートする場合は、TRANSFORM内で次の SQL 関数を使用できます。

  • 演算子
    • +, -, *, /, =, <, >, <=, >=, !=, <>, [NOT] BETWEEN, [NOT] IN, IS [NOT] NULL, IS [NOT] TRUE, IS [NOT] FALSE, NOT, AND, OR
  • 条件式
    • CASE expr, CASE, COALESCE, IF, IFNULL, NULLIF
  • 数学関数
    • ABS, ACOS, ACOSH, ASINH, ATAN, ATAN2, ATANH, CBRT, CEIL, CEILING, COS, COSH, COT, COTH, CSC, CSCH, EXP, FLOOR, IS_INF, IS_NAN, LN, LOG, LOG10, MOD, POW, POWER, SEC, SECH, SIGN, SIN, SINH, SQRT, TAN, TANH
  • 変換関数
    • CAST AS INT64, CAST AS FLOAT64, CAST AS NUMERIC, CAST AS BIGNUMERIC, CAST AS STRING, SAFE_CAST AS INT64, SAFE_CAST AS FLOAT64
  • 文字列関数
    • CONCAT, LEFT, LENGTH, LOWER, REGEXP_REPLACE, RIGHT, SPLIT, SUBSTR, SUBSTRING, TRIM, UPPER
  • 日付関数
    • DateDATE_ADDDATE_SUBDATE_DIFFDATE_TRUNCEXTRACTFORMAT_DATEPARSE_DATESAFE.PARSE_DATE
  • 日時関数
    • DATETIMEDATETIME_ADDDATETIME_SUBDATETIME_DIFF, DATETIME_TRUNCEXTRACTPARSE_DATETIMESAFE.PARSE_DATETIME
  • 時間関数
    • TIMETIME_ADDTIME_SUBTIME_DIFFTIME_TRUNCEXTRACTFORMAT_TIMEPARSE_TIMESAFE.PARSE_TIME
  • タイムスタンプ関数
    • TIMESTAMPTIMESTAMP_ADDTIMESTAMP_SUBTIMESTAMP_DIFFTIMESTAMP_TRUNCFORMAT_TIMESTAMPPARSE_TIMESTAMPSAFE.PARSE_TIMESTAMPTIMESTAMP_MICROSTIMESTAMP_MILLISTIMESTAMP_SECONDSEXTRACTSTRINGUNIX_MICROSUNIX_MILLISUNIX_SECONDS
  • 手動前処理関数
    • ML.IMPUTER, ML.HASH_BUCKETIZE, ML.LABEL_ENCODER, ML.MULTI_HOT_ENCODER, ML.NGRAMS, ML.ONE_HOT_ENCODER, ML.BUCKETIZE, ML.MAX_ABS_SCALER, ML.MIN_MAX_SCALER, ML.NORMALIZER, ML.QUANTILE_BUCKETIZE, ML.ROBUST_SCALER, ML.STANDARD_SCALER

制限事項

モデルをエクスポートする場合は、次の制限が適用されます。

  • トレーニング中に次のいずれかの機能が使用された場合、モデルのエクスポートはサポートされません。

    • ARRAYTIMESTAMPGEOGRAPHY のいずれかの特徴タイプが入力データに存在している。
  • モデルタイプ AUTOML_REGRESSORAUTOML_CLASSIFIER 用にエクスポートされたモデルは、オンライン予測の Vertex AI デプロイをサポートしていません。

  • 行列分解モデルのエクスポートの場合、モデルサイズの上限は 1 GB です。モデルサイズは num_factors にほぼ比例します。この上限に達したときは、トレーニング中に num_factors を小さくすることでモデルサイズを縮小できます。

  • 手動特徴前処理用に BigQuery ML TRANSFORMを使用してトレーニングされたモデルについては、エクスポートでサポートされているデータ型および関数をご覧ください。

  • 2023 年 9 月 18 日より前に BigQuery ML TRANSFORMを使用してトレーニングされたモデルは、オンライン予測のためにモデル レジストリを通じてデプロイされる前に再トレーニングする必要があります。

  • モデルのエクスポート中、ARRAY<STRUCT<INT64, FLOAT64>>ARRAYTIMESTAMP は変換前のデータとしてサポートされますが、変換後のデータとしてはサポートされません。

BigQuery ML モデルをエクスポートする

モデルをエクスポートするには:

コンソール

  1. Google Cloud コンソールで BigQuery ページを開きます。

    BigQuery ページに移動

  2. ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、目的のデータセットをクリックして展開します。エクスポートするモデルを見つけてクリックします。

  3. ウィンドウの右側にある [モデルをエクスポート] をクリックします。

    モデルをエクスポート

  4. [Google Cloud Storage へのモデルのエクスポート] ダイアログで、次の操作を行います。

    • [GCS の場所を選択] で、モデルをエクスポートする先のバケットまたはフォルダのロケーションを参照します。
    • [エクスポート] をクリックしてモデルをエクスポートします。

ジョブの進行状況を確認するには、ナビゲーションの上部にある [エクスポート] ジョブの [ジョブ履歴] を確認します。

SQL

EXPORT MODEL ステートメントを使用すると、GoogleSQL クエリ構文を使用して BigQuery ML モデルを Cloud Storage にエクスポートできます。

Google Cloud コンソールで EXPORT MODEL ステートメントを使用して BigQuery ML モデルをエクスポートするには、次のようにします。

  1. Google Cloud コンソールで、BigQuery ページを開きます。

    BigQuery に移動

  2. [クエリを新規作成] をクリックします。

  3. [クエリエディタ] フィールドに、EXPORT MODEL ステートメントを入力します。

    次のクエリは、myproject.mydataset.mymodel という名前のモデルを URI gs://bucket/path/to/saved_model/ で Cloud Storage バケットにエクスポートします。

     EXPORT MODEL `myproject.mydataset.mymodel`
     OPTIONS(URI = 'gs://bucket/path/to/saved_model/')
     

  4. [実行] をクリックします。クエリが完了すると、[クエリ結果] ペインに Successfully exported model が表示されます。

bq

bq extract コマンドを使用し、--model フラグを指定します。

(省略可)--destination_format フラグを指定して、エクスポートするモデルの形式を選択します。(省略可)--location フラグを指定して、その値をロケーションに設定します。

bq --location=location extract \
--destination_format format \
--model project_id:dataset.model \
gs://bucket/model_folder

ここで

  • location はロケーションの名前です。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • destination_format は、エクスポートされるモデルの形式です。ML_TF_SAVED_MODEL(デフォルト)または ML_XGBOOST_BOOSTER です。
  • project_id はプロジェクト ID です。
  • dataset はソース データセットの名前です。
  • model は、エクスポートするモデルです。
  • bucket は、データのエクスポート先の Cloud Storage バケットの名前です。BigQuery データセットと Cloud Storage バケットは同じロケーションに存在する必要があります。
  • model_folder は、エクスポートされるモデルファイルが書き込まれるフォルダの名前です。

例:

たとえば、次のコマンドは mydataset.mymodel を TensorFlow SavedModel 形式で mymodel_folder という名前の Cloud Storage バケットにエクスポートします。

bq extract --model \
'mydataset.mymodel' \
gs://example-bucket/mymodel_folder

destination_format のデフォルト値は ML_TF_SAVED_MODEL です。

次のコマンドは、mymodel_folder という Cloud Storage バケットに XGBoost ブースター形式で mydataset.mymodel をエクスポートします。

bq extract --model \
--destination_format ML_XGBOOST_BOOSTER \
'mydataset.mytable' \
gs://example-bucket/mymodel_folder

API

モデルをエクスポートするには、extract ジョブを作成してジョブ構成に入力します。

(省略可)ジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

  1. BigQuery ML モデルと Cloud Storage のエクスポート先を指す抽出ジョブを作成します。

  2. プロジェクト ID、データセット ID、モデル ID を含む sourceModel 構成オブジェクトを使用して、ソースモデルを指定します。

  3. destination URI(s) プロパティは、完全修飾の gs://bucket/model_folder の形式にする必要があります。

  4. configuration.extract.destinationFormat プロパティを設定して、宛先の形式を指定します。たとえば、ブーストツリー モデルをエクスポートする場合は、このプロパティの値を ML_XGBOOST_BOOSTER に設定します。

  5. ジョブ ステータスを確認するには、最初のリクエストで返されるジョブの ID を指定して jobs.get(job_id) を呼び出します。

    • status.state = DONE である場合、ジョブは正常に完了しています。
    • status.errorResult プロパティが存在する場合は、リクエストが失敗したことを意味し、該当するオブジェクトにエラーを説明する情報が格納されます。
    • status.errorResult が存在しない場合、ジョブは正常に完了したものの、致命的でないエラーが発生した可能性があります。致命的でないエラーは、返されたジョブ オブジェクトの status.errors プロパティに格納されています。

API に関する注記:

  • ベスト プラクティスとして、jobs.insert を呼び出して読み込みジョブを作成する際に、一意の ID を生成して、その ID を jobReference.jobId として渡します。この手法は、ネットワーク障害時にクライアントは既知のジョブ ID を使ってポーリングまたは再試行できるので、より確実です。

  • 特定のジョブ ID で jobs.insert を呼び出す操作は「べき等」です。つまり、同じジョブ ID で何回でも再試行できますが、成功するオペレーションはそのうちの 1 回だけです。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ExtractJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.ModelId;

// Sample to extract model to GCS bucket
public class ExtractModel {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectName = "bigquery-public-data";
    String datasetName = "samples";
    String modelName = "model";
    String bucketName = "MY-BUCKET-NAME";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    extractModel(projectName, datasetName, modelName, destinationUri);
  }

  public static void extractModel(
      String projectName, String datasetName, String modelName, String destinationUri)
      throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      ModelId modelId = ModelId.of(projectName, datasetName, modelName);

      ExtractJobConfiguration extractConfig =
          ExtractJobConfiguration.newBuilder(modelId, destinationUri).build();

      Job job = bigquery.create(JobInfo.of(extractConfig));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to extract due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Model extract successful");
    } catch (BigQueryException ex) {
      System.out.println("Model extraction job was interrupted. \n" + ex.toString());
    }
  }
}

モデルのデプロイ

エクスポートしたモデルは、ローカルにも Vertex AI にもデプロイできます。モデルの TRANSFORMに、日付関数、日時関数、時間関数、タイムスタンプ関数のいずれかが含まれている場合は、コンテナで bigquery-ml-utils ライブラリを使用する必要があります。エクスポートされたモデルやサービング コンテナを必要としない、Model Registry を使用したデプロイの場合は例外です。

Vertex AI のデプロイ

エクスポート モデルの形式 Deployment
TensorFlow SavedModel(AutoML 以外のモデル) TensorFlow SavedModel をデプロイします。TensorFlow のサポート対象バージョンを使用して SavedModel ファイルを作成する必要があります。
TensorFlow SavedModel(AutoML モデル) サポートされていません。
XGBoost Booster カスタム予測ルーチンを使用します。XGBoost Booster モデルの場合、エクスポートされたファイルに前処理と後処理の情報が保存されます。カスタム予測ルーチンを使用すると、エクスポートされた追加ファイルを使用してモデルをデプロイできます。

XGBoost のサポート対象バージョンを使用して、モデルファイルを作成する必要があります。

ローカルへのデプロイ

エクスポート モデルの形式 Deployment
TensorFlow SavedModel(AutoML 以外のモデル) SavedModel は標準形式であり、TensorFlow Service Docker コンテナにデプロイできます。

Vertex AI オンライン予測ローカル実行も利用できます。
TensorFlow SavedModel(AutoML モデル) モデルをコンテナ化して実行する
XGBoost ブースター XGBoost ブースター モデルをローカルで実行するには、エクスポートされた main.py ファイルを使用します。
  1. すべてのファイルを Cloud Storage からローカル ディレクトリにダウンロードします。
  2. xgboost_predictor-0.1.tar.gz から predictor.py ファイルを解凍して、ローカル ディレクトリに保存します。
  3. main.py を実行します(main.py の手順を参照)。

予測出力形式

このセクションでは、エクスポートされたモデルのモデルタイプごとの予測出力形式について説明します。エクスポートされたすべてのモデルはバッチ予測をサポートしており、一度に複数の入力行を処理できます。たとえば、次の出力形式の例にはそれぞれ 2 つの入力行があります。

AUTOENCODER

予測出力形式 出力例
+------------------------+------------------------+------------------------+
|      LATENT_COL_1      |      LATENT_COL_2      |           ...          |
+------------------------+------------------------+------------------------+
|       [FLOAT]          |         [FLOAT]        |           ...          |
+------------------------+------------------------+------------------------+
        
+------------------+------------------+------------------+------------------+
|   LATENT_COL_1   |   LATENT_COL_2   |   LATENT_COL_3   |   LATENT_COL_4   |
+------------------------+------------+------------------+------------------+
|    0.21384512    |    0.93457112    |    0.64978097    |    0.00480489    |
+------------------+------------------+------------------+------------------+
        

AUTOML_CLASSIFIER

予測出力形式 出力例
+------------------------------------------+
| predictions                              |
+------------------------------------------+
| [{"scores":[FLOAT], "classes":[STRING]}] |
+------------------------------------------+
        
+---------------------------------------------+
| predictions                                 |
+---------------------------------------------+
| [{"scores":[1, 2], "classes":['a', 'b']},   |
|  {"scores":[3, 0.2], "classes":['a', 'b']}] |
+---------------------------------------------+
        

AUTOML_REGRESSOR

予測出力形式 出力例
+-----------------+
| predictions     |
+-----------------+
| [FLOAT]         |
+-----------------+
        
+-----------------+
| predictions     |
+-----------------+
| [1.8, 2.46]     |
+-----------------+
        

BOOSTED_TREE_CLASSIFIER と RANDOM_FOREST_CLASSIFIER

予測出力形式 出力例
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

BOOSTED_TREE_REGRESSOR と RANDOM_FOREST_REGRESSOR

予測出力形式 出力例
+-----------------+
| predicted_label |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| predicted_label |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_CLASSIFIER

予測出力形式 出力例
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_REGRESSOR

予測出力形式 出力例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_LINEAR_COMBINED_CLASSIFIER

予測出力形式 出力例
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_LINEAR_COMBINED_REGRESSOR

予測出力形式 出力例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

KMEANS

予測出力形式 出力例
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [FLOAT]            | [INT64]      | INT64               |
+--------------------+--------------+---------------------+
        
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [1.2, 1.3]         | [1, 2]       | [1]                 |
+--------------------+--------------+---------------------+
| [0.4, 0.1]         | [1, 2]       | [2]                 |
+--------------------+--------------+---------------------+
        

LINEAR_REG

予測出力形式 出力例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
       

LOGISTIC_REG

予測出力形式 出力例
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

MATRIX_FACTORIZATION

注: 現在サポートされているのは、入力ユーザーと出力の上位 50 位(predicted_rating、predicted_item)のペアを、predicted_rating 別に降順で並べ替えることだけです。

予測出力形式 出力例
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [FLOAT]          | [STRING]       |
+------------------+----------------+
        
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [5.5, 1.7]       | ['A', 'B']     |
+------------------+----------------+
| [7.2, 2.7]       | ['B', 'A']     |
+------------------+----------------+
        

TensorFlow(インポート)

予測出力形式
インポートしたモデルと同じ

PCA

予測出力形式 出力例
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [INT64]           |             [FLOAT]             |
+-------------------------+---------------------------------+
        
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [1, 2]            |             [1.2, 5.0]          |
+-------------------------+---------------------------------+
        

TRANSFORM_ONLY

予測出力形式
モデルの TRANSFORM 句で指定された列と同じです。

XGBoost モデルの可視化

モデルのエクスポート後に plot_tree Python API を使用して、ブーストツリーを可視化します。たとえば、依存関係をインストールせずに Colab を利用できます。

  1. ブーストツリー モデルを Cloud Storage バケットにエクスポートします。
  2. Cloud Storage バケットから model.bst ファイルをダウンロードします。
  3. Colab ノートブックで、model.bst ファイルを Files にアップロードします。
  4. ノートブックで次のコードを実行します。

    import xgboost as xgb
    import matplotlib.pyplot as plt
    
    model = xgb.Booster(model_file="model.bst")
    num_iterations = <iteration_number>
    for tree_num in range(num_iterations):
      xgb.plot_tree(model, num_trees=tree_num)
    plt.show
    

この例では、複数のツリーを作成します(イテレーションごとに 1 つのツリー)。

モデルをエクスポート

現在、モデルに特徴名を保存していないため、f0 や f1 のような名前が表示されます。これらの名前(たとえば f0)をインデックスとして使用して、エクスポートされた assets/model_metadata.json ファイルで対応する特徴名を探すことができます。

必要な権限

BigQuery ML モデルを Cloud Storage にエクスポートするには、BigQuery ML モデルにアクセスする権限、エクスポート ジョブを実行する権限、Cloud Storage バケットにデータを書き込む権限が必要です。

BigQuery の権限

  • モデルをエクスポートするには、少なくとも bigquery.models.export 権限が付与されている必要があります。以下の Identity and Access Management(IAM)の事前定義ロールには、bigquery.models.export 権限が含まれています。

    • bigquery.dataViewer
    • bigquery.dataOwner
    • bigquery.dataEditor
    • bigquery.admin
  • エクスポート ジョブを実行するには、少なくとも bigquery.jobs.create 権限が付与されている必要があります。事前定義された以下の IAM のロールには bigquery.jobs.create 権限が含まれています。

    • bigquery.user
    • bigquery.jobUser
    • bigquery.admin

Cloud Storage の権限

  • 既存の Cloud Storage バケットにデータを書き込むには、storage.objects.create 権限が付与されている必要があります。事前定義された以下の IAM のロールには storage.objects.create 権限が含まれています。

    • storage.objectCreator
    • storage.objectAdmin
    • storage.admin

BigQuery ML での IAM ロールと権限の詳細については、アクセス制御をご覧ください。

ロケーションに関する留意事項

データのロケーションを選択するときは、次の点を考慮してください。

    データをエクスポートする場合は、Cloud Storage バケットを同じロケーションに配置する
    • BigQuery データセットが EU マルチリージョンにある場合、エクスポート対象のデータが含まれている Cloud Storage バケットは、同じマルチリージョンか、マルチリージョンに含まれているロケーションに存在する必要があります。たとえば、BigQuery データセットが EU マルチリージョンにある場合、Cloud Storage バケットは EU 内の europe-west1 ベルギー リージョンに配置できます。

      データセットが US マルチリージョンにある場合は、任意のロケーションにある Cloud Storage バケットにデータをエクスポートできます。

    • データセットがリージョンにある場合、Cloud Storage バケットは同じリージョンに存在する必要があります。たとえば、データセットが asia-northeast1 の東京リージョンにある場合、Cloud Storage バケットを ASIA マルチリージョンに配置することはできません。
    データ マネジメント計画を作成する
    • BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。

Cloud Storage のロケーションの詳細については、Cloud Storage のドキュメントのバケットのロケーションをご覧ください。

ロケーション間で BigQuery データを移動する

データセットの作成後にそのロケーションを変更することはできませんが、データセットのコピーを作成することはできます。

割り当てポリシー

エクスポート ジョブの割り当てについては、「割り当てと上限」のページのエクスポート ジョブをご覧ください。

料金

BigQuery ML モデルのエクスポートは無料で利用できますが、エクスポートには BigQuery の割り当てと上限が適用されます。BigQuery の料金設定の詳細については、料金設定のページをご覧ください。

データのエクスポート終了後、Cloud Storage へのデータの保存に対して課金されます。Cloud Storage の料金設定の詳細については、クラウドの料金設定のページをご覧ください。

次のステップ