このチュートリアルでは、CREATE MODEL
ステートメントの TRANSFORM
句を使用して、モデルの作成およびトレーニングと同時に特徴量エンジニアリングを行う方法について説明します。TRANSFORM
句を使用して、1 つ以上の前処理関数を指定し、モデルのトレーニングに使用する入力データを変換できます。モデルに適用する前処理は、モデルを ML.EVALUATE
関数と ML.PREDICT
関数で使用すると自動的に適用されます。
このチュートリアルでは、一般公開の bigquery-public-data.ml_datasets.penguin
データセットを使用します。
目標
このチュートリアルでは、次のタスクの手順について説明します。
CREATE MODEL
ステートメントを使用して、サービス呼び出しの種類を予測する線形回帰モデルを作成します。CREATE MODEL
ステートメント内で、ML.QUANTILE_BUCKETIZE
関数とML.FEATURE_CROSS
関数を使用してデータを前処理します。ML.EVALUATE
関数を使用して、そのモデルを評価する。ML.PREDICT
関数を使用して、モデルから予測結果を得る。
費用
このチュートリアルでは、以下を含む、 Google Cloudの課金対象となるコンポーネントを使用します。
- BigQuery
- BigQuery ML
BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、
Enable the BigQuery API.
に移動します。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
[アクションを表示] > [データセットを作成] をクリックします。
[データセットを作成] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。- 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
bq
新しいデータセットを作成するには、--location
フラグを指定した bq mk
コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset
コマンドのリファレンスをご覧ください。
データの場所が
US
に設定され、BigQuery ML tutorial dataset
という説明の付いた、bqml_tutorial
という名前のデータセットを作成します。bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
このコマンドでは、
--dataset
フラグの代わりに-d
ショートカットを使用しています。-d
と--dataset
を省略した場合、このコマンドはデフォルトでデータセットを作成します。データセットが作成されたことを確認します。
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
関数を使用して、species
とsex
の交差から生成されます。
TRANSFORM
句でトレーニング テーブルのすべての列を使用する必要はありません。
WHERE
句(WHERE body_mass_g IS NOT NULL AND RAND() < 0.2
)は、ペンギンの体重が NULL
の行を除外し、RAND
関数を使用してデータのランダム サンプルを取得します。
次の手順でモデルを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
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
関数で列と変換を再度指定する必要はありません。関数はモデルからそれらを自動的に取得します。
次の手順でモデルを評価します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
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
列と変換を自動的に取得します。
モデルから予測を取得する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- 作成したプロジェクトを削除する。
- または、プロジェクトを保存して、データセットを削除する。
データセットを削除する
プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。
必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。
ナビゲーション パネルで、作成した bqml_tutorial データセットをクリックします。
ウィンドウの右側の [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。
[データセットの削除] ダイアログ ボックスでデータセットの名前(
bqml_tutorial
)を入力して、[削除] をクリックします。
プロジェクトを削除する
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- 機械学習集中講座で機械学習について学習する。
- BigQuery ML の概要で BigQuery ML の概要を確認する。
- Google Cloud コンソールの使用で、Google Cloud コンソールの詳細を確認する。