BigQuery ML で出生時体重を予測する

は、

このチュートリアルでは、データ アナリストの方に BigQuery ML を紹介します。BigQuery ML を使用すると、BigQuery で SQL クエリを使用して機械学習モデルを作成して実行できます。このチュートリアルは、SQL のユーザーが簡単に機械学習を利用できるようにすることを目標としています。使い慣れたツールを使用してモデルを構築でき、データを移動する必要もないため、開発スピードを向上させることができます。

このチュートリアルでは、natality サンプル テーブルを使用して、赤ちゃんの性別、妊娠期間、母親の属性情報に基づいて子供の出生時体重を予測するモデルを作成します。natality サンプル テーブルには、米国での子供の出生に関する 40 年以上の情報が格納されています。

目標

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

  • BigQuery ML。CREATE MODEL ステートメントを使用して、2 項線形回帰モデルを作成します。
  • ML.EVALUATE 関数。ML モデルを評価します。
  • ML.PREDICT 関数。ML モデルを使用して予測を行います。

料金

このチュートリアルでは、以下を含む、Cloud Platform の有料コンポーネントを使用します。

  • Google BigQuery
  • BigQuery ML

次の料金が発生します。

  • ML モデルとトレーニング データの BigQuery への保存
    • 毎月、最初の 10 GB までのストレージは無料で使用できます。
  • BigQuery でのデータのクエリ
    • 毎月、最初の 1 TB は無料です。
    • 定額料金を選択している場合、クエリの使用料は月額料金に含まれます。
  • BigQuery ML SQL ステートメントの実行

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

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

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

    課金を有効にする方法について

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

    APIを有効にする

対象

これは、データ アナリスト向けの入門チュートリアルです。

データ アナリストが BigQuery の標準 SQL を使用してデータの傾向を分析し、ビジネス戦略と業務の見直しを行います。具体的には、BigQuery ML を使用して ML モデルをトレーニングして評価し、予測分析を行います。

データ アナリストは次のような UI ベースのツールを使用します。

  • BigQuery ウェブ UI
  • スプレッドシート
  • RStudio などの統計ソフトウェア
  • Cloud Datalab やデータポータルなどの可視化ツール

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

まず、ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには、次の操作を行います。

  1. BigQuery ウェブ UI に移動します。

    BigQuery ウェブ UI に移動

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

  3. 右側の詳細パネルで、[Create dataset] をクリックします。

  4. [Create dataset] ページで、次の操作を行います。

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

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

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

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

次に、BigQuery の natality サンプル テーブルを使用して線形回帰モデルを作成します。子供の出生時体重の予測に使用するモデルを作成するために、次の標準 SQL クエリを使用します。

#standardSQL
CREATE MODEL `bqml_tutorial.natality_model`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['weight_pounds']) AS
SELECT
  weight_pounds,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL
  AND RAND() < 0.001

モデルを作成するだけでなく、CREATE MODEL コマンドを実行して、作成したモデルをトレーニングします。

クエリの詳細

CREATE MODEL 句を使用して、bqml_tutorial.natality_model という名前のモデルを作成してトレーニングします。

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

このクエリの SELECT ステートメントで次の列を取得します。この列を使用して子供の出生時体重を予測します。

  • weight_pounds - ポンド単位の子供の体重(FLOAT64)。
  • is_male - 男の子場合は TRUE、女の子の場合は FALSE です(BOOL)。
  • gestation_weeks - 妊娠週数(INT64)。
  • mother_age - 出産時の母親の年齢(INT64)。
  • mother_race - 母親の人種を表す整数値(INT64。テーブル スキーマの child_race と同じ)。BigQuery ML で mother_race を非数値の特徴として扱うには、各カテゴリを表す固有値を使用して、クエリで mother_race を STRING 型にキャストします。人種は、整数(順序とスケールを持つ)として扱うよりも、カテゴリとして扱ったほうが良い場合が多いため、この処理は重要になります。

FROM 句(bigquery-public-data.samples.natality)は、サンプル データセットの natality サンプル テーブルにクエリを実行していることを示します。このデータセットは bigquery-public-data プロジェクトにあります。

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

CREATE MODEL クエリを実行する

モデルを作成してトレーニングする CREATE MODEL クエリを実行するには:

  1. BigQuery ウェブ UI で、[Compose New Query] をクリックします。

  2. [Query editor] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    CREATE MODEL `bqml_tutorial.natality_model`
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['weight_pounds']) AS
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS string) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL
      AND RAND() < 0.001
    
  3. [Run query] をクリックします。

    クエリが完了するまでに数分かかります。最初の繰り返しが完了すると、BigQuery ウェブ UI のナビゲーション パネルにモデル(natality_model)が表示されます。このクエリでは、CREATE MODEL ステートメントを使用してテーブルを作成しているため、クエリの結果は表示されません。

(省略可)ステップ 3: トレーニングの統計情報を取得する

モデルのトレーニング結果を確認するには、ML.TRAINING_INFO 関数を使用するか、BigQuery ウェブ UI で統計情報を表示します。このチュートリアルでは、BigQuery ウェブ UI を使用します。

機械学習アルゴリズムは、多くのサンプルを検査し、損失を最小限に抑えるモデルを見つけることでモデルを構築します。このプロセスを経験損失最小化と呼びます。

損失とは、精度の低い予測に対するペナルティです。これは、1 つのサンプルで予測の精度がどのくらい低いかで表します。モデルの予測が完璧であれば、損失はゼロになります。それ以外の場合、精度に応じて損失が大きくなります。モデルをトレーニングする目的は、すべてのサンプルで平均的に損失の少ない重みとバイアスの組み合わせを見つけることです。

CREATE MODEL クエリで生成したモデルのトレーニング統計を確認するには、次の操作を行います。

  1. BigQuery ウェブ UI の [Resources] セクションで、[PROJECT_ID] > bqml_tutorial の順に開き、natality_model をクリックします。

  2. [Model stats] タブをクリックします。結果は次のようになります。

    ML.TRAINING_INFO の出力

    [Training Data Loss] 列は、トレーニング データセットで所定の繰り返し回数を行った後に計算された損失指標を表します。線形回帰を行ったので、この列は平均二乗誤差になります。[Evaluation Data Loss] 列は、ホールドアウト データセット(モデルを検証するためにトレーニングから返され、保存されているデータ)で計算された損失指標と同じになります。

    ML.TRAINING_INFO 関数の詳細については、BigQuery ML 構文リファレンスをご覧ください。

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

モデルを作成したら、ML.EVALUATE 関数を使用して分類子の性能を評価します。ML.EVALUATE 関数は、実際のデータに対する予測値を評価します。分類子は、列挙されたラベルのターゲット値の 1 つです。

モデルの評価に使用するクエリは次のとおりです。

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL))

クエリの詳細

先頭の SELECT ステートメントで、モデルから列を取得します。

FROM 句では、モデル bqml_tutorial.natality_model に対する ML.EVALUATE 関数の結果を取得します。

このクエリでネストしている SELECT ステートメントと FROM 句は CREATE MODEL クエリと同じです。

WHERE 句(WHERE weight_pounds IS NOT NULL)は、重みが NULL の行を除外します。

ML.EVALUATE クエリを実行する

モデルを評価する ML.EVALUATE クエリを実行するには:

  1. BigQuery ウェブ UI で、[Compose New Query] をクリックします。

  2. [Query editor] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          weight_pounds,
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          weight_pounds IS NOT NULL))
    
  3. (省略可)処理のロケーションを設定するには、[Options] > [Query Settings] の順にクリックします。[Processing Location] で US を選択します。データセットのロケーションに基づいて処理のロケーションが自動的に検出されるため、この手順は省略できます。

  4. [RUN QUERY] をクリックします。

  5. クエリが完了したら、クエリテキスト領域の下にある [Results] タブをクリックします。結果は次のようになります。

    ML.EVALUATE の出力

    線形回帰を使用しているため、結果には次の列が含まれます。

    • mean_absolute_error
    • mean_squared_error
    • mean_squared_log_error
    • median_absolute_error
    • r2_score
    • explained_variance

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

ステップ 5: モデルを使用して結果を予測する

モデルの評価を行ったので、モデルを使用して結果を予測します。このモデルを使用して、ワイオミング州で生まれる赤ちゃんの出生時体重を予測します。

結果の予測に使用するクエリは次のとおりです。

#standardSQL
SELECT
  predicted_weight_pounds
FROM
  ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      state = "WY"))

クエリの詳細

先頭の SELECT ステートメントで predicted_weight_pounds 列を取得します。この列は ML.PREDICT 関数によって生成されます。ML.PREDICT 関数を使用した場合、モデルの出力列名が predicted_<label_column_name> になります。線形回帰モデルの場合、predicted_labellabel の推定値になります。ロジスティック回帰モデルの場合、predicted_label は予測可能性が高いラベルに応じて、2 つの入力値のいずれかになります。

ML.PREDICT 関数を使用して、モデル bqml_tutorial.natality_model の結果を予測します。

このクエリでネストしている SELECT ステートメントと FROM 句は CREATE MODEL クエリと同じです。

WHERE 句(WHERE state = “WY”)で、予測をワイオミング州に限定しています。

ML.PREDICT クエリを実行する

モデルを使用して結果を予測するクエリを実行するには:

  1. BigQuery ウェブ UI で、[Compose New Query] をクリックします。

  2. [Query editor] テキスト領域に、次の標準 SQL クエリを入力します。

    #standardSQL
    SELECT
      predicted_weight_pounds
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          state = "WY"))
    
  3. (省略可)処理のロケーションを設定するには、[Options] > [Query Settings] の順にクリックします。[Processing Location] で US を選択します。データセットのロケーションに基づいて処理のロケーションが自動的に検出されるため、この手順は省略できます。

  4. [RUN QUERY] をクリックします。

  5. クエリが完了したら、クエリテキスト領域の下にある [Results] タブをクリックします。結果は次のようになります。

    ML.PREDICT の出力

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

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

データセットの削除

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

  1. 必要に応じて、ウェブ UI を開きます。

    ウェブ UI に移動

  2. ナビゲーションで、作成した bqml_tutorial データセットの上にカーソルを合わせます。

  3. ナビゲーション パネルのデータセット名の横にある下矢印アイコン 下矢印の画像 をクリックし、[Delete dataset] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

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

プロジェクトの削除

プロジェクトを削除する手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。