このチュートリアルでは、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関数を使用して、モデルから予測結果を得る。
費用
このチュートリアルでは、以下を含む、 Cloud de Confiance by S3NSの課金対象となるコンポーネントを使用します。
- BigQuery
- BigQuery ML
BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。
始める前に
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、次の場所に移動します。
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
コンソール
Cloud de Confiance コンソールで、[BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
(アクションを表示)> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[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" } }
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
モデルを作成する
ペンギンの体重を予測する線形回帰モデルを作成し、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 関数を使用してデータのランダム サンプルを取得します。
次の手順でモデルを作成します。
Cloud de Confiance コンソールで、[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 関数で列と変換を再度指定する必要はありません。関数はモデルからそれらを自動的に取得します。
次の手順でモデルを評価します。
Cloud de Confiance コンソールで、[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 列と変換を自動的に取得します。
モデルから予測を取得する手順は次のとおりです。
Cloud de Confiance コンソールで、[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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- 作成したプロジェクトを削除する。
- または、プロジェクトを保存して、データセットを削除する。
データセットを削除する
プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。
必要に応じて、Cloud de Confiance コンソールで [BigQuery] ページを開きます。
ナビゲーション パネルで、作成した bqml_tutorial データセットをクリックします。
ウィンドウの右側の [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。
[データセットの削除] ダイアログ ボックスでデータセットの名前(
bqml_tutorial)を入力して、[削除] をクリックします。
プロジェクトを削除する
プロジェクトを削除するには、次の操作を行います。
- In the Cloud de Confiance 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 の概要を確認する。
- Cloud de Confiance コンソールの使用で Cloud de Confiance コンソールの詳細を確認する。