TRANSFORM 句を使用して特徴量エンジニアリングを実行する


このチュートリアルでは、CREATE MODEL ステートメントの TRANSFORMを使用して、モデルの作成およびトレーニングと同時に特徴量エンジニアリングを行う方法について説明します。TRANSFORM 句を使用して、1 つ以上の前処理関数を指定し、モデルのトレーニングに使用する入力データを変換できます。モデルに適用する前処理は、モデルを ML.EVALUATE 関数と ML.PREDICT 関数で使用すると自動的に適用されます。

このチュートリアルでは、一般公開の bigquery-public-data.ml_datasets.penguin データセットを使用します。

目標

このチュートリアルでは、次のタスクの手順について説明します。

費用

このチュートリアルでは、以下を含む、 Google Cloudの課金対象となるコンポーネントを使用します。

  • BigQuery
  • BigQuery ML

BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、

    Enable the BigQuery API.

    Enable the API

    に移動します。

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. [アクションを表示] > [データセットを作成] をクリックします。

    [データセットを作成] のメニュー オプション。

  4. [データセットを作成] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。

    一般公開データセットは US マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

    値が入力された [データセットを作成] ページ。

bq

新しいデータセットを作成するには、--location フラグを指定した bq mk コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset コマンドのリファレンスをご覧ください。

  1. データの場所が US に設定され、BigQuery ML tutorial dataset という説明の付いた、bqml_tutorial という名前のデータセットを作成します。

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

  2. データセットが作成されたことを確認します。

    bq ls

API

定義済みのデータセット リソースを使用して datasets.insert メソッドを呼び出します。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

モデルを作成する

ペンギンの体重を予測する線形回帰モデルを作成し、penguins サンプル テーブルでトレーニングします。

OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) 句は、線形回帰モデルを作成することを意味します。線形回帰モデルは、入力する特徴量の線型結合から連続値を生成します。body_mass_g 列は入力ラベルの列です。線形回帰モデルの場合、ラベル列は実数にする必要があります(列の値は実数でなければなりません)。

このクエリの TRANSFORM 句は、SELECT ステートメントの次の列を使用します。

  • body_mass_g: 変更なしでトレーニングで使用されます。
  • culmen_depth_mm: 変更なしでトレーニングで使用されます。
  • flipper_length_mm: 変更なしでトレーニングで使用されます。
  • bucketized_culmen_length: ML.QUANTILE_BUCKETIZE() 分析関数を使用して、変位値に基づいて culmen_length_mm をバケット化することにより、culmen_length_mm から生成されます。
  • culmen_length_mm: 元の culmen_length_mm 値。STRING 値にキャストされ、トレーニングで使用されます。
  • species_sex: ML.FEATURE_CROSS 関数を使用して、speciessex の交差から生成されます。

TRANSFORM 句でトレーニング テーブルのすべての列を使用する必要はありません。

WHERE 句(WHERE body_mass_g IS NOT NULL AND RAND() < 0.2)は、ペンギンの体重が NULL の行を除外し、RAND 関数を使用してデータのランダム サンプルを取得します。

次の手順でモデルを作成します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

    CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform`
      TRANSFORM(
        body_mass_g,
        culmen_depth_mm,
        flipper_length_mm,
        ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length,
        CAST(culmen_length_mm AS string) AS culmen_length_mm,
        ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex)
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'])
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL
      AND RAND() < 0.2;

    クエリが完了するまでに約 15 分かかります。完了後、penguin_transform モデルが [エクスプローラ] ペインに表示されます。クエリは CREATE MODEL ステートメントを使用してモデルを作成するため、クエリの結果は表示されません。

モデルを評価する

ML.EVALUATE 関数を使用してモデルのパフォーマンスを評価します。ML.EVALUATE 関数は、モデルから返されたペンギンの体重予測を、トレーニング データの実際のペンギンの体重と比較して評価します。

このクエリでネストしている SELECT ステートメントと FROM 句は CREATE MODEL クエリのものと同じです。モデルの作成時に TRANSFORM 句を使用したため、ML.EVALUATE 関数で列と変換を再度指定する必要はありません。関数はモデルからそれらを自動的に取得します。

次の手順でモデルを評価します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL
        ));

    結果は次のようになります。

    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |   64.21134350607677 | 13016.433317859564 |   7.140935762696211E-4 |     15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    評価結果における重要な測定指標は、R2スコア(決定係数)です。R2 スコアは、線形回帰予測が実際のデータに近似するかどうかを決定する統計的尺度です。0 の値は、モデルの平均値周辺のレスポンス データにばらつきがないことを示しています。1 の値は、モデルの平均値周辺のレスポンス データにばらつきがあることを示しています。

    ML.EVALUATE 関数の出力の詳細については、回帰モデルをご覧ください。

    また、入力データを指定せずに ML.EVALUATE を呼び出すこともできます。これにはトレーニング中に計算された評価指標が使用されます。

モデルを使用してペンギンの体重を予測する

ML.PREDICT 関数とともにモデルを使用し、オスのペンギンの体重を予測します。

ML.PREDICT 関数は、予測値を predicted_label_column_name 列(この場合は predicted_body_mass_g)に出力します。

ML.PREDICT 関数を使用する場合、モデル トレーニングで使用されるすべての列を渡す必要はありません。TRANSFORM 句で使用した列のみが必要です。ML.EVALUATE と同様に、ML.PREDICT 関数はモデルから TRANSFORM 列と変換を自動的に取得します。

モデルから予測を取得する手順は次のとおりです。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

    SELECT
      predicted_body_mass_g
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            sex = 'MALE'
        ));

    結果は次のようになります。

    +-----------------------+
    | predicted_body_mass_g |
    +-----------------------+
    |    2810.2868541725757 |
    +-----------------------+
    |    3813.6574220842676 |
    +-----------------------+
    |     4098.844698262214 |
    +-----------------------+
    |     4256.587135004173 |
    +-----------------------+
    |     3008.393497302691 |
    +-----------------------+
    |     ...               |
    +-----------------------+
    

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  • 作成したプロジェクトを削除する。
  • または、プロジェクトを保存して、データセットを削除する。

データセットを削除する

プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。

  1. 必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. ナビゲーション パネルで、作成した bqml_tutorial データセットをクリックします。

  3. ウィンドウの右側の [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

  4. [データセットの削除] ダイアログ ボックスでデータセットの名前(bqml_tutorial)を入力して、[削除] をクリックします。

プロジェクトを削除する

プロジェクトを削除するには:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ