BigQuery ML スタートガイド

1. 概要

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

作成するアプリの概要

アナリティクス 360 のサンプル データセットを使用して、サイト訪問者が取引を行うかどうかを予測するモデルを作成します。

学習内容

BigQuery で ML モデルを作成、評価、使用する方法

必要なもの

2. 設定と要件

セルフペース型の環境設定

  1. Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用しますGmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

BigQuery コンソールを開く

Google Developer Console で、画面左上のメニュー アイコンをクリックします。

select-bq_0.png

メニューを下にスクロールして、[BigQuery] をクリックします。

select-bq.png

次のように、新しいブラウザタブで BigQuery コンソールが開きます。

8b0218390329e8cf.png

ここには何もありませんが、BigQuery では非常に多くの一般公開データセットが利用可能です。

3. データセットを作成する

データセットを作成するには、プロジェクト名の横にある矢印をクリックして [新しいデータセットの作成] を選択します。

4f51bf57291a59db.png

次に、データセットに「bqml_codelab」という名前を付けて [OK] をクリックします。

63e32478a5652fbc.png

4. モデルを作成する

アナリティクス 360 のロジスティック回帰

それでは、タスクに進みましょう。訪問者が取引を行うかどうかを予測するモデルを作成する方法は次のとおりです。

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

ここでは、取引が行われたかどうかの基準として、訪問者のデバイスのオペレーティング システム、そのデバイスがモバイル デバイスであるかどうか、訪問者の国、ページビューの回数が使用されます。

この例では、「codelab」はデータセットの名前、「sample_model」はモデルの名前です。指定されたモデルタイプは 2 項ロジスティック回帰です。この場合、label はフィッティングの対象です。必要な列が 1 つだけの場合には、この「label」という列が対象になるため、input_label_cols を設定しなくて済みます。また、トレーニング データは 2016 年 8 月 1 日から 2017 年 6 月 30 日の間に収集されたものに限定しています。これは「予測」用に最後の月のデータを残しておくためです。さらに、時間の節約のため 100,000 データポイントに制限します。急いでいない場合は、最後の行を削除してもかまいません。

CREATE MODEL コマンドを実行すると非同期で実行されるクエリジョブが作成されるため、BigQuery UI ウィンドウを閉じたり、更新したりといったことができます。

(省略可)モデル情報とトレーニング統計

興味があれば、UI で bqml_codelab データセットの sample_model をクリックすると、モデルに関する情報が得られます。[詳細] タブに、モデルの生成に使用される基本的なモデル情報とトレーニング オプションが表示されます。[トレーニング統計] の下に、次のような表が表示されます。

b8bd9548a0d89165.png

5. モデルを評価する

モデルを評価する

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

線形回帰モデルで使用した場合、上記のクエリは mean_absolute_errormean_squared_errormean_squared_log_errormedian_absolute_errorr2_scoreexplained_variance の列を返します。ロジスティック回帰モデルで使用した場合、上記のクエリは precisionrecallaccuracyf1_scorelog_lossroc_auc の列を返します。各指標の算出方法や意味を理解するには、ML の用語集をご覧になるか、Google 検索をご利用ください。

具体的には、クエリの SELECTFROM の部分はトレーニング中に使用したものと同じであることがわかります。WHERE の部分は期間の違いを反映し、FROM の部分は ml.EVALUATE の呼び出しを示しています。以下のような表が表示されます。

1c7779f6028730cc.png

6. モデルを使用する

国ごとの購入数を予測する

ここでは、各国の訪問者による取引の数を予測し、結果を並べ替えて、購入数の上位 10 か国を抽出します。

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

このクエリは、前のセクションで示した評価クエリと非常によく似ています。ここでは ml.EVALUATE ではなく ml.PREDICT を使用し、クエリの BQML の部分を標準 SQL コマンドでラップします。具体的には、国とその国の購入の合計が必要なので、SELECTGROUP BYORDER BY を使用します。ここでは、LIMIT を使用して結果を上位 10 件に制限しています。以下のような表が表示されます。

e639f7a409741dcb.png

ユーザーごとの購入数を予測する

もう一つ例を示します。今回は、各訪問者による取引の数を予測し、結果を並べ替えて、取引数の上位 10 人の訪問者を抽出します。

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

以下のような表が表示されます。

2be1d8fa96e10178.png

7. 完了

これでこの Codelab は終了です。新しい目標に挑戦しませんか?BQML で線形回帰モデルを作成してみましょう。

学習した内容

  • 2 項ロジスティック回帰モデルを作成する
  • モデルを評価する
  • モデルを使って予測する

次のステップ