BigQuery ML スタートガイド

1. 概要

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

作成するアプリの概要

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

学習内容

BigQuery で機械学習モデルを作成、評価、使用する方法

必要なもの

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 USD 分の無料トライアル プログラムをご利用いただけます。

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 つだけの場合は、これは input_label_cols を設定する代わりの方法です。また、トレーニング データは、2016 年 8 月 1 日から 2017 年 6 月 31 日の間に収集されたものに限定しています。これは「予測」用に最後の月のデータを残しておくためです。さらに、時間を節約するために、データポイントを 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 項ロジスティック回帰モデルを作成する
  • モデルを評価する
  • モデルを使って予測する

次のステップ