BigQuery ML


BigQuery MLとは?

Google Cloud の BigQueryで、機械学習モデルの構築を SQL を使って直接実行できる機能です。これによりデータを移動することなく、大量のデータに対して機械学習モデルをトレーニングし、予測を行うことができます。

この記事では、BigQueryにデータセットを作成して、MLモデルを作成してみます。始める前にGoogle Cloud プロジェクトの作成、課金の有効化、BigQuery APIの有効化が必要になります。

詳しい手順は下記のページにあります。

データセットを作成する

事前準備が完了したら、BigQueryでデータセットを作成します。

今回はKaggleにある下記のデータセットを利用して、BigQueryで回帰モデルの構築を行ってみたいと思います。このデータセットは2006年から2010年にかけて、アイオワ州エイムズで住宅用不動産が販売された記録が含まれており、住宅の販売価格を予測する問題に利用されています。

データセットIDに「house_prices」と入力し、データセットを作成しました。


テーブルの作成

作成したデータセット「house_prices」にテーブルを作成します。

ダウンロードしたフォルダにあるtrain.csvとtest.csvをそれぞれアップロードし、テーブル名をそれぞれ「train」、「test」としました。

モデルの作成

それでは回帰モデルの構築を行います。
CREATE MODEL
ステートメントを使用してモデルの構築を行うことができます。

CREATE OR REPLACE MODEL `house_prices.house_price_model`
OPTIONS(model_type='linear_reg', input_label_cols=['SalePrice']) AS
SELECT
  SalePrice,
  LotArea,
  YearBuilt,
  _1stFlrSF,
  _2ndFlrSF,
  FullBath,
  BedroomAbvGr,
  TotRmsAbvGrd
FROM
  `house_prices.train`
  • CREATE OR REPLACE MODEL: この部分は新しいモデルを作成するか、もし指定された名前のモデルが既に存在する場合はそのモデルを置き換えることを指示します。

  • house_prices.house_price_model: ここで指定されているのは、モデルの名前です。house_prices はデータセット名で、house_price_model はモデル名です。

  • model_type='linear_reg': モデルタイプとして線形回帰が選択されています。

  • input_label_cols=['SalePrice']: 目的変数です。この場合、SalePriceが指定されています。

SELECT ... FROMには、モデルの学習に使用される特徴量を定義しています。
特徴量には住宅の広さ、建設年、浴室の数などが含まれています。

このSQLを実行すると、モデルの構築が始まり完了後は下記のように作成されたモデルが表示されます。

モデルの評価

SELECT
  *
FROM
  ML.EVALUATE(MODEL `house_prices.house_price_model`)

ML.EVALUATE 関数を使用してモデルを評価することができます。

回帰モデルに関連する評価指標が表示されます。

予測

SELECT
  predicted_SalePrice
FROM
  ML.PREDICT(MODEL `house_prices.house_price_model`, (
    SELECT
      LotArea,
      YearBuilt,
      _1stFlrSF,
      _2ndFlrSF,
      FullBath,
      BedroomAbvGr,
      TotRmsAbvGrd
    FROM
      `house_prices.test`
  ))

テスト用データで販売価格の予測を行ってみます。
SQLを実行すると下記のように予測した販売価格が表示されます。