1. 概要
BigQuery ML(BQML)を使用すると、BigQuery で SQL クエリを使用して ML モデルを作成、実行できます。ここでは、SQL のユーザーが簡単に ML を利用できるようにすることを目標としています。使い慣れたツールを使用してモデルを構築でき、データ移動の必要もないため、開発スピードを向上させることができます。
作成するアプリの概要
ここでは、アナリティクス 360 のサンプル データセットを使用して、訪問者が取引を行うかどうかを予測するモデルを作成します。
学習内容
BigQuery で機械学習モデルを作成、評価、使用する方法
必要なもの
2. 設定と要件
セルフペース型の環境設定
- Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用しますGmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID
と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、$300 USD 分の無料トライアル プログラムをご利用いただけます。
BigQuery コンソールを開く
Google Developer Console で、画面左上のメニュー アイコンをクリックします。
メニューを下にスクロールして、[BigQuery] をクリックします。
次のように、新しいブラウザタブで BigQuery コンソールが開きます。
ここには何もありませんが、BigQuery では非常に多くの一般公開データセットが利用可能です。
3. データセットを作成する
データセットを作成するには、プロジェクト名の横にある矢印をクリックして [新しいデータセットの作成] を選択します。
次に、データセットに bqml_codelab という名前を付けて [OK] をクリックします。
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 をクリックすると、モデルに関する情報を取得できます。[詳細] の下に、モデルの生成に使用された基本的なモデル情報とトレーニング オプションが表示されます。[トレーニングの統計情報] の下に、次のようなテーブルが表示されます。
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_error
、mean_squared_error
、mean_squared_log_error
、median_absolute_error
、r2_score
、explained_variance
の列を返します。ロジスティック回帰モデルで使用した場合、上記のクエリは precision
、recall
、accuracy
、f1_score
、log_loss
、roc_auc
の列を返します。各指標の算出方法や意味を理解するには、ML の用語集をご覧になるか、Google 検索をご利用ください。
具体的には、クエリの SELECT
と FROM
の部分はトレーニング中に使用したものと同じであることがわかります。WHERE
の部分は期間の変化を反映しており、FROM
の部分は ml.EVALUATE
を呼び出していることを示しています。以下のような表が表示されます。
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 コマンドでラップします。具体的には、国と各国の購入の合計に関心があるので、SELECT
、GROUP BY
、ORDER BY
を行います。LIMIT
は、上位 10 件の結果のみを取得するために使用されています。以下のような表が表示されます。
ユーザーごとの購入数を予測する
もう一つ例を示します。今回は、各訪問者が行うトランザクションの数を予測し、結果を並べ替えてトランザクションごとに上位 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;
以下のような表が表示されます。
7. 完了
この Codelab は終了です。チャレンジをお探しですか?BQML で線形回帰モデルを作成してみましょう。
学習した内容
- 2 項ロジスティック回帰モデルを作成する
- モデルを評価する
- モデルを使って予測する
次のステップ
- BQML の詳細については、ドキュメントをご覧ください。