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. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  5. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

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

    BigQuery API を有効にします。

    API を有効にする

    にアクセスします。

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

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

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

    [BigQuery] ページに移動

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

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

    データセットを作成する

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

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

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

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

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

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

ステップ 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 サンプル テーブルを使用して、ハイパーパラメータを調整した線形回帰モデルを作成します。ハイパーパラメータを調整したモデルの作成には、次の GoogleSQL クエリを使用します。

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. Google Cloud コンソールで、[クエリを新規作成] ボタンをクリックします。

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

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

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

    調整の進捗状況。

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

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

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 コンソールで評価指標を確認する

評価指標は、[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. 必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

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

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

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

プロジェクトを削除する

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

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

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

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

次のステップ