BigQuery ML のハイパーパラメータ調整を使用してモデルのパフォーマンスを改善する

このチュートリアルでは、データ アナリストの方を対象に BigQuery ML を紹介します。BigQuery ML を使用すると、BigQuery で SQL クエリを使用して機械学習モデルを作成して実行できます。このチュートリアルでは、num_trials トレーニング オプションを指定することによるハイパーパラメータ調整を紹介します。

このチュートリアルでは、tlc_yellow_trips_2018 サンプル テーブルを使用して、タクシー移動のチップ代を予測するモデルを作成します。ハイパーパラメータ調整を使用することで、パフォーマンス(r2_score)が約 40% 改善されることがわかります。

目標

このチュートリアルでは、次のものを使用します。

  • BigQuery ML。num_trials を 20 に設定した CREATE MODEL ステートメントを使用して線形回帰モデルを作成します。
  • ML.TRIAL_INFO 関数。20 回のトライアルすべての概要を確認します。
  • ML.EVALUATE 関数。ML モデルを評価します。
  • ML.PREDICT 関数。ML モデルを使用して予測を行います。

料金

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

  • BigQuery
  • BigQuery ML

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

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

    API を有効にする

    にアクセスします。

ステップ 1: トレーニング データセットを作成する

まず、トレーニング データと ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには:

  1. Google Cloud Console で [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。

  3. 右側の詳細パネルで、[データセットを作成] をクリックします。

    データセットを作成する

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

    • [データセット ID] に bqml_tutorial を入力します。
    • [データのロケーション] で [米国(US)] を選択します。現在、一般公開データセットは US マルチ リージョン ロケーションに保存されています。わかりやすくするため、データセットを同じロケーションに配置します。

      データセットの作成ページ

  5. その他のデフォルト設定はすべてそのままにし、[データセットを作成] をクリックします。

ステップ 2: トレーニングの入力テーブルを作成する

このステップでは、10 万行のトレーニング入力テーブルを実体化します。

  1. ソーステーブル tlc_yellow_trips_2018 のスキーマを表示します。

    テーブル スキーマ。

  2. トレーニングの入力データテーブルを作成します。

CREATE TABLE `bqml_tutorial.taxi_tip_input` AS
SELECT
  * EXCEPT(tip_amount), tip_amount AS label
FROM
  `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
WHERE
  tip_amount IS NOT NULL
LIMIT 100000

ステップ 3: モデルを作成する

次に、BigQuery の tlc_yellow_trips_2018 サンプル テーブルを使用して、ハイパーパラメータを調整した線形回帰モデルを作成します。ハイパーパラメータを調整したモデルの作成には、次の標準 SQL クエリを使用します。

CREATE MODEL `bqml_tutorial.hp_taxi_tip_model`
OPTIONS
  (model_type='linear_reg',
   num_trials=20,
   max_parallel_trials=2) AS
SELECT
  *
FROM
  `bqml_tutorial.taxi_tip_input`

クエリの詳細

LINEAR_REG モデルには、調整できるハイパーパラメータが 2 つ(l1_reg および l2_reg)あります。上のクエリはデフォルトの検索空間を使用しています。検索スペースは、明示的に指定することもできます。

OPTIONS
  (...
    l1_reg=hparam_range(0, 20),
    l2_reg=hparam_candidates([0, 0.1, 1, 10]))

また、次のハイパーパラメータ調整トレーニング オプションもデフォルト値を使用します。

  • hparam_tuning_algorithm: "VIZIER_DEFAULT"

  • hparam_tuning_objectives: ["r2_score"]

max_parallel_trials を 2 に設定して、調整プロセスを高速化します。常に 2 つのトライアルを同時に実行するため、調整全体にかかる時間が、20 回ではなく 10 回のトレーニング ジョブを連続で行う場合と同程度になります。ただし、2 つのトライアルを同時に実行する場合、互いのトレーニング結果からの恩恵は得られません。

CREATE MODEL クエリを実行する

モデルを作成してトレーニングする CREATE MODEL クエリを実行するには、次の操作を行います。

  1. Cloud Console で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] のテキスト領域に、上述の標準 SQL クエリを入力します。

  3. [実行] をクリックします。

    クエリの完了には、約 17 分かかります。調整の進捗状況は、[実行の詳細] の [ステージ] から確認できます。

    調整の進捗状況。

ステップ 4: トライアル情報を取得する

ハイパーパラメータ、目標、ステータス、最適なトライアルなど、すべてのトライアルの概要を表示するには、ML.TRIAL_INFO 関数を使用します。SQL の実行後に Cloud Console に結果が表示されます。

SELECT *
FROM
  ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`)

この SQL クエリは、1 つのトライアルの完了後すぐに実行できます。調整が途中で停止している場合でも、すでに終了しているトライアルはすべて使用できます。

ステップ 5: モデルを評価する

モデルの作成後、ML.EVALUATE 関数または Google Cloud Console を使用して、すべてのトライアルの評価指標を取得できます。

実行 ML.EVALUATE

SELECT *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`)

この SQL は、TEST データから計算されたトライアルすべての評価指標を取得します。ML.TRIAL_INFO 目標と ML.EVALUATE 評価指標の違いについては、データ分割セクションをご覧ください。

また、独自のデータを指定して特定のトライアルを評価することもできます。詳細については、ML.EVALUATE をご覧ください。

Google Cloud Console で評価指標を確認する

評価指標は、[EVALUATION] タブを選択して確認することもできます。

調整の評価。

ステップ 6: モデルを使用してタクシーのチップ代を予測する

モデルを評価したので、そのモデルを使用してタクシーのチップ代を予測します。

チップ代の予測に使用するクエリは次のとおりです。

SELECT
  *
FROM
  ML.PREDICT(MODEL `bqml_tutorial.hp_taxi_tip_model`,
    (
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`
    LIMIT 10))

クエリの詳細

先頭の SELECT ステートメントは、predicted_label 列を含むすべての列を取得します。この列は、ML.PREDICT 関数によって生成されます。ML.PREDICT 関数を使用すると、モデルの出力列名は predicted_label_column_name になります。

デフォルトでは、最適なトライアルに対して予測が行われます。他のトライアルは、trial_id パラメータを指定することで選択できます。

SELECT
  *
FROM
  ML.PREDICT(MODEL `bqml_tutorial.hp_taxi_tip_model`,
    (
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`
    LIMIT
      10),
    STRUCT(3 AS trial_id))

モデルがサポートする関数の詳細な使用方法については、ML.PREDICT をご覧ください。

クリーンアップ

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

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

データセットの削除

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

  1. 必要に応じて、Cloud Console で [BigQuery] ページを開きます。

    [BigQuery] ページに移動

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

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

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

プロジェクトの削除

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

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ