概要
BigQuery は、Google が提供する低コスト、NoOps のフルマネージド分析データベースです。BigQuery では、インフラストラクチャを所有して管理したりデータベース管理者を置いたりすることなく、テラバイト単位の大規模なデータでクエリを実行できます。また、SQL が採用されており、従量課金制というメリットもあります。このような特長を活かし、ユーザーは有用な情報を得るためのデータ分析に専念できます。
BigQuery の新機能である BigQuery ML(BQML、ベータ版)を使用すれば、最小限のコーディングで ML モデルの作成、トレーニング、評価、予測を行うことができます。
Google Merchandise Store に関する多数の Google アナリティクス レコードが格納された e コマース データセットが新たに BigQuery に読み込まれ、利用可能になっています。このラボでは、このデータを使用して一般的なクエリを実行し、企業が知りたい顧客の購買習慣に関する情報を取得します。
目標
このラボでは、次のタスクの実行方法について学びます。
- BigQuery を使用して一般公開データセットを見つける
- ecommerce データセットでクエリを実行して探索する
- バッチ予測に使用するトレーニングと評価のデータセットを作成する
- 分類(ロジスティック回帰)モデルを BQML に作成する
- ML モデルの性能を評価する
- 訪問者が購入する見込みを予測し、ランクを付ける
必要なもの
- Google Cloud Platform プロジェクト
- Google Chrome や Mozilla Firefox などのブラウザ
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
-
利用規約に同意し、再設定用のリソースページをスキップします。
タスク 1. BigQuery でラボのプロジェクトを固定する
-
ナビゲーション メニュー > [BigQuery] をクリックします。

[Cloud Console の BigQuery へようこそ] メッセージ ボックスが開きます。
[Cloud Console の BigQuery へようこそ] メッセージ ボックスには、クイックスタート ガイドと UI アップデートへのリンクが含まれています。
- [完了] をクリックします。
BigQuery 公開データセットは、デフォルトでは BigQuery ウェブ UI に表示されません。公開データセット プロジェクトを開くには

- [+ Add Data] をクリックします。
-
Pin project > プロジェクト名を入力するを選択します。
-
プロジェクト名には、
data-to-insights
を入力します。
- [Pin] をクリックします。

- 左側のペインの [Viewing pinned projects] の下に、固定された data-to-insights プロジェクトが表示されます。

コース用データセットにアクセスする
- BigQuery を開いたら、次の直接リンクをクリックし、一般公開の data-to-insights プロジェクトを BigQuery プロジェクト パネルに取り込みます。
console.cloud.google.com/bigquery?p=data-to-insights&d=ecommerce&t=web_analytics&page=table
data-to-insights e コマース データセットのフィールド定義については、[UA] BigQuery Export スキーマのドキュメントをご覧ください。このリンク先のページは、参照用に新しいタブで開いたままにしておきます。
タスク 2. e コマースデータを調べる
シナリオ: データ アナリスト チームが、e コマース ウェブサイトに関する Google アナリティクスのログを BigQuery にエクスポートし、e コマース訪問者のセッションの生データをすべて含む新しいテーブルを作成して、データを調べられるようにしました。このデータを使用して、いくつかの質問に対する答えを見つけていきましょう。
質問: ウェブサイト訪問者の何パーセントが実際に購入に至りましたか。
- クエリエディタに以下のクエリを追加します。
#standardSQL
WITH visitors AS(
SELECT
COUNT(DISTINCT fullVisitorId) AS total_visitors
FROM `data-to-insights.ecommerce.web_analytics`
),
purchasers AS(
SELECT
COUNT(DISTINCT fullVisitorId) AS total_purchasers
FROM `data-to-insights.ecommerce.web_analytics`
WHERE totals.transactions IS NOT NULL
)
SELECT
total_visitors,
total_purchasers,
total_purchasers / total_visitors AS conversion_rate
FROM visitors, purchasers
- [実行] をクリックします。
結果: 2.69%
質問: 売り上げで上位 5 つの商品は何ですか。
- クエリエディタに以下のクエリを追加して、[実行] をクリックします。
#standardSQL
SELECT
p.v2ProductName,
p.v2ProductCategory,
SUM(p.productQuantity) AS units_sold,
ROUND(SUM(p.localProductRevenue/1000000),2) AS revenue
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h,
UNNEST(h.product) AS p
GROUP BY 1, 2
ORDER BY revenue DESC
LIMIT 5;
結果:
行 |
v2ProductName |
v2ProductCategory |
units_sold |
revenue |
1 |
Nest® Learning Thermostat 3rd Gen-USA - Stainless Steel |
Nest-USA |
17651 |
870976.95 |
2 |
Nest® Cam Outdoor Security Camera - USA |
Nest-USA |
16930 |
684034.55 |
3 |
Nest® Cam Indoor Security Camera - USA |
Nest-USA |
14155 |
548104.47 |
4 |
Nest® Protect Smoke + CO White Wired Alarm-USA |
Nest-USA |
6394 |
178937.6 |
5 |
Nest® Protect Smoke + CO White Battery Alarm-USA |
Nest-USA |
6340 |
178572.4 |
質問: ウェブサイトを再訪問して購入を行った人は何人ですか。
- クエリエディタに以下のクエリを追加して、[実行] をクリックします。
#standardSQL
# 再訪問時に購入した人(最初の訪問時に購入した人も含む)
WITH all_visitor_stats AS (
SELECT
fullvisitorid, # ユニーク ユーザー数 741,721
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM `data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid
)
SELECT
COUNT(DISTINCT fullvisitorid) AS total_visitors,
will_buy_on_return_visit
FROM all_visitor_stats
GROUP BY will_buy_on_return_visit
結果:
行 |
total_visitors |
will_buy_on_return_visit |
1 |
729848 |
0 |
2 |
11873 |
1 |
結果を分析すると、総訪問者の 1.6%(11,873 ÷ 729,848)がウェブサイトに戻ってきて、購入を行ったことがわかります。この人数には、最初のセッションで購入し、再度訪問してもう一度購入した訪問者も含まれます。
質問: e コマースの利用者の多くが、閲覧するものの再訪問するまで購入しない理由は何ですか。
解答: 唯一の正解はありませんが、よくある理由の一つは、最終的に購入を決定する前に、別の e コマースサイトと比較検討してから購入するから、というものです。これは、事前に入念な事前調査と比較が必要になる高額な商品(自動車など)の購入の際に顕著ですが、比較的程度は低いものの、このサイトの商品(T シャツやアクセサリーなど)の購入にも当てはまります。
オンライン マーケティング業界では今後、初回訪問で観察された特徴に基づいて将来購入に至るユーザーを識別し、マーケティング活動を行うことが、コンバージョン率を上げ、競合他社のサイトへのユーザー流出を抑える鍵となるでしょう。
タスク 3. 対象を特定する
ここからは、BigQuery で ML モデルを作成し、新しいユーザーが将来的に購入を行うかどうかを予測します。こうした高い価値を持つユーザーを識別することで、マーケティング チームがそれらのユーザーにターゲットを絞って特別プロモーションや広告キャンペーンを実施することが可能になり、それらのユーザーが自社の e コマースサイトを再度訪問するまでの間に他のサイトと比較していたとしても、コンバージョンにつなげやすくなります。
タスク 4. 特徴量を選択し、トレーニング データセットを作成する
Google アナリティクスでは、この e コマース ウェブサイトのユーザー訪問に関するさまざまなディメンションとメジャーを取得します。フィールドの一覧を確認してからデモ データセットをプレビューし、ユーザーによるウェブサイト初回訪問のデータと、そのユーザーが戻ってきて購入を行うかどうかの関係を、ML モデルが理解するのに役立つ特徴を見つけます。
次の 2 つのフィールドが分類モデルに適した入力であるかどうかをテストしましょう。
-
totals.bounces
(訪問者がウェブサイトをすぐに離れたかどうか)
-
totals.timeOnSite
(訪問者がウェブサイトに留まった期間)
質問: 上記の 2 つのフィールドのみを使用することにはどのようなリスクがありますか。
解答: ML の良し悪しは、提供されるトレーニング データにかかっています。入力した特徴とラベル(ここでは、訪問者が将来購入するかどうか)の関係をモデルに判断、学習させるための十分な情報が揃わない場合、精度の高いモデルを確立することはできません。これら 2 つのフィールドでモデルをトレーニングすることは出発点にはなりますが、精度の高いモデルを生成するために 2 つのフィールドだけで十分かどうかを見極める必要があります。
#standardSQL
SELECT
* EXCEPT(fullVisitorId)
FROM
# 特徴
(SELECT
fullVisitorId,
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site
FROM
`data-to-insights.ecommerce.web_analytics`
WHERE
totals.newVisits = 1)
JOIN
(SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM
`data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid)
USING (fullVisitorId)
ORDER BY time_on_site DESC
LIMIT 10;
- [実行] をクリックします。
結果:
行 |
bounces |
time_on_site |
will_buy_on_return_visit |
1 |
0 |
15047 |
0 |
2 |
0 |
12136 |
0 |
3 |
0 |
11201 |
0 |
4 |
0 |
10046 |
0 |
5 |
0 |
9974 |
0 |
6 |
0 |
9564 |
0 |
7 |
0 |
9520 |
0 |
8 |
0 |
9275 |
1 |
9 |
0 |
9138 |
0 |
10 |
0 |
8872 |
0 |
どのフィールドがモデルの特徴になりますか。どれがラベル(正解)ですか。
入力は、bounces と time_on_site です。ラベルは、will_buy_on_return_visit です。
質問: 訪問者の最初のセッションの後にわかる 2 つのフィールドはどれですか。
解答: bounces と time_on_site は、訪問者の最初のセッションの後に明らかになります。
質問: 後になるまで判明しないフィールドはどれですか?
解答: will_buy_on_return_visit は、初回の訪問後にはわかりません。ここで行うのは、ウェブサイトに戻ってきて購入するユーザーについての予測です。予測時に将来のことはわからないため、新しい訪問者が後から戻ってきて購入を行うかどうかについて確かなことはいえません。ML モデルを構築する価値は、最初のセッションについて収集されたデータに基づいて、将来の購入の確率を予測できる点にあります。
質問: 最初のデータ結果から見て、time_on_site と bounces は、ユーザーが戻ってきて購入を行うかどうかを示す適切な指標だといえますか。
解答: モデルのトレーニングと評価を行う前に結論を出すのは早すぎるかもしれませんが、time_on_site
の上位 10 項目を見ると、戻ってきて購入を行ったユーザーは 1 人だけでした。あまり確率は高くなさそうです。モデルの機能を検証してみましょう。
タスク 5. モデルを格納する BigQuery データセットを作成する
次に、新しい BigQuery データセットを作成し、ML モデルを格納します。
- BigQuery コンソールで、[アクションを表示] アイコン(3 つのドット)をクリックし、[データセットを作成] をクリックします。
![強調表示されている [データセットを作成] オプション](https://cdn.qwiklabs.com/dz4GsMJlQYPUT138V8MnuUbl%2BpTVay1wepTkGk4fB9c%3D)
-
[データセット ID] に「ecommerce」と入力します。その他のオプションはデフォルト値のままにします([データのロケーション]、[デフォルトのテーブルの有効期限])。
-
[データセットを作成] をクリックします。
プロジェクト名の下に ecommerce データセットが表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
新しいデータセットを作成する
タスク 6. BQML モデルタイプを選択してオプションを指定する
最初の特徴を選択したので、最初の ML モデルを BigQuery に作成する準備ができました。
モデルタイプは次の 2 つから選択します。
モデル |
モデルタイプ |
ラベルのデータ型 |
例 |
予測 |
linear_reg |
数値(通常は整数または浮動小数点) |
過去の売り上げデータから翌年の売り上げを予測。 |
分類 |
logistic_reg |
0 または 1 のバイナリ分類 |
コンテキストに応じて、メールを迷惑メールまたは迷惑メール以外に分類。 |
注: ML で使用されるモデルタイプは他にも多数あります(ニューラル ネットワークやディシジョン ツリーなど)。これらは TensorFlow などのライブラリで利用可能です。執筆時点で、BQML は上記の 2 つをサポートしています。
どちらのモデルタイプを選択すればいいでしょうか。
訪問者を「将来購入する」か「将来購入しない」にバケット化しているため、分類モデルで logistic_reg
を使用します。
- クエリエディタに以下のクエリを追加し、モデルを作成してモデル オプションを指定します。
#standardSQL
CREATE OR REPLACE MODEL `ecommerce.classification_model`
OPTIONS
(
model_type='logistic_reg',
input_label_cols = ['will_buy_on_return_visit']
)
AS
#standardSQL
SELECT
* EXCEPT(fullVisitorId)
FROM
# 特徴
(SELECT
fullVisitorId,
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site
FROM
`data-to-insights.ecommerce.web_analytics`
WHERE
totals.newVisits = 1
AND date BETWEEN '20160801' AND '20170430') # 最初の 9 か月分でトレーニング
JOIN
(SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM
`data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid)
USING (fullVisitorId)
;
- 次に、[実行] をクリックしてモデルをトレーニングします。
モデルのトレーニングが終わるのを待ちます(5~10 分)。
注: 利用可能なデータすべてをモデルのトレーニングに使用することはできません。これは、モデルの評価およびテスト用に、モデルにとって未知のデータポイントを残しておく必要があるからです。そのため、WHERE 句の条件を追加し、12 か月のデータセットのうち最初の 9 か月のセッション データのみをフィルタリングしてトレーニングに使用します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
モデルを作成し、モデル オプションを指定する
モデルのトレーニングが終わると、「このステートメントで新しいモデル qwiklabs-gcp-01-00af1a3268df:ecommerce.classification_model が作成されます。モデルのタイプによっては、完了までに数時間かかる場合があります。」というようなメッセージが表示されます。これはモデルのトレーニングが正常に終了したことを示します。
- プロジェクト データセットの内部に、classification_model が表示されているのを確認します。
次に、未知の評価データに対するモデルの性能を評価します。
タスク 7. 分類モデルの性能を評価する
性能の基準を選択する
ML での分類では、偽陽性率(ユーザーが戻ってきて購入を行うと予測したものの、実際には購入しなかった)を最小限に抑え、真陽性率(ユーザーが戻ってきて購入を行うと予測し、実際に購入した)を最大限にすることを目指します。
この関係は次に示すような受信者操作特性(ROC)曲線で可視化できます。ここでは、曲線の下の面積(AUC)を最大限にすることが目標です。

BQML の roc_auc は、トレーニングを行った ML モデルを評価する際にクエリ可能なフィールドです。
トレーニングが完了したので、ML.EVALUATE
を使用したクエリでモデルの性能を評価できます。
- クエリエディタに以下のクエリを追加して、[実行] をクリックします。
#standardSQL
SELECT
roc_auc,
CASE
WHEN roc_auc > .9 THEN 'good'
WHEN roc_auc > .8 THEN 'fair'
WHEN roc_auc > .7 THEN 'decent'
WHEN roc_auc > .6 THEN 'not great'
ELSE 'poor' END AS model_quality
FROM
ML.EVALUATE(MODEL ecommerce.classification_model, (
SELECT
* EXCEPT(fullVisitorId)
FROM
# 特徴
(SELECT
fullVisitorId,
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site
FROM
`data-to-insights.ecommerce.web_analytics`
WHERE
totals.newVisits = 1
AND date BETWEEN '20170501' AND '20170630') # 2 か月分で評価
JOIN
(SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM
`data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid)
USING (fullVisitorId)
));
次のような結果が表示されます。
行 |
roc_auc |
model_quality |
1 |
0.724588 |
decent |
モデルを評価すると、roc_auc が 0.72 となります。これは、モデルが妥当(decent)なレベルではあるものの、予測力が特に優れているわけではないことを示しています。目標は、曲線の下の領域を可能な限り 1.0 に近づけることであるため、改善の余地はまだ残されています。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
分類モデルの性能を評価する
タスク 8. 特徴量エンジニアリングでモデル性能を強化する
先にも少し触れましたが、訪問者の最初のセッションと再度訪問して購入する可能性の関係をモデルに理解させるうえで役立つデータセットの特徴は他にもたくさん存在します。
新しい特徴をいくつか追加し、classification_model_2 という名前の 2 番目の ML モデルを作成しましょう。
- 初回訪問時に訪問者は購入手続きをどこまで進めていたか
- 訪問者はどこからアクセスしたか(トラフィック ソースがオーガニック検索、参照元サイトなど)
- デバイスのカテゴリ(モバイル、タブレット、パソコン)
- 地理情報(国)
- クエリエディタに以下のクエリを追加して [実行] をクリックし、この 2 番目のモデルを作成します。
#standardSQL
CREATE OR REPLACE MODEL `ecommerce.classification_model_2`
OPTIONS
(model_type='logistic_reg', input_label_cols = ['will_buy_on_return_visit']) AS
WITH all_visitor_stats AS (
SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM `data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid
)
# 新しい特徴を追加
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# input_label_cols
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# サイトでの行動
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
IFNULL(totals.pageviews, 0) AS pageviews,
# 訪問経路
trafficSource.source,
trafficSource.medium,
channelGrouping,
# モバイルかデスクトップか
device.deviceCategory,
# 地域
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# 初回訪問のみ予測
AND totals.newVisits = 1
AND date BETWEEN '20160801' AND '20170430' # 9 か月分でトレーニング
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
);
注: これは新しいモデルですが、ここでも同じように最初の 9 か月分のデータを使ってトレーニングします。優れた出力が優れた入力(特徴)に起因することを確認できるように、新しいトレーニング データや異なるトレーニング データではなく、同じトレーニング データセットを使用することが重要です。
トレーニング データセットのクエリに追加された新しい重要な特徴は、各訪問者がセッションで到達した購入手続きの段階です。これは、フィールド hits.eCommerceAction.action_type
に記録されます。フィールド定義でそのフィールドを検索すると、「6 = Completed Purchase」のフィールド マッピングが表示されます。
余談ですが、ウェブ解析データセットには ARRAYS のようなネストされ繰り返されたフィールドがあり、データセットではこれらを別個の行に分ける必要があります。これは、UNNEST() 関数を使用して行います(上記のクエリで確認できます)。
新しいモデルのトレーニングが終わるまで待ちます(5~10 分)。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
特徴量エンジニアリングでモデル性能を強化する(2 番目のモデルを作成する)
この新しいモデルを評価し、より優れた予測力が備わっているかどうかを確認します。
- クエリエディタに以下のクエリを追加して、[実行] をクリックします。
#standardSQL
SELECT
roc_auc,
CASE
WHEN roc_auc > .9 THEN 'good'
WHEN roc_auc > .8 THEN 'fair'
WHEN roc_auc > .7 THEN 'decent'
WHEN roc_auc > .6 THEN 'not great'
ELSE 'poor' END AS model_quality
FROM
ML.EVALUATE(MODEL ecommerce.classification_model_2, (
WITH all_visitor_stats AS (
SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM `data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid
)
# 新しい特徴を追加
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# input_label_cols
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# サイトでの行動
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# 訪問経路
trafficSource.source,
trafficSource.medium,
channelGrouping,
# モバイルかデスクトップか
device.deviceCategory,
# 地域
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# 初回訪問のみ予測
AND totals.newVisits = 1
AND date BETWEEN '20170501' AND '20170630' # 2 か月分で評価
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
));
出力:
行 |
roc_auc |
model_quality |
1 |
0.910382 |
good |
この新しいモデルでは、roc_auc が 0.91 となりました。これは、最初のモデルよりも著しく向上しています。
モデルをトレーニングしたので、今度は予測を行います。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
特徴量エンジニアリングでモデル性能を強化する(予測能力を強化する)
タスク 9. どの新しい訪問者が戻ってきて購入を行うかを予測する
次に、新しい訪問者がどのくらい戻ってきて購入するかを予測するためのクエリを作成します。以下の予測クエリでは、上記でトレーニングした強化済みの分類モデルを使用して、Google Merchandise Store への初めての訪問者が後の訪問で購入する確率を予測します。予測は、最後の 1 か月(12 か月中)のデータセットで行われます。
- クエリエディタに以下のクエリを追加して、[実行] をクリックします。
#standardSQL
SELECT
*
FROM
ml.PREDICT(MODEL `ecommerce.classification_model_2`,
(
WITH all_visitor_stats AS (
SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
FROM `data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid
)
SELECT
CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id,
# input_label_cols
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# サイトでの行動
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# 訪問経路
trafficSource.source,
trafficSource.medium,
channelGrouping,
# モバイルまたはデスクトップ
device.deviceCategory,
# 地域
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE
# 初回訪問のみ予測
totals.newVisits = 1
AND date BETWEEN '20170701' AND '20170801' # 1 か月分でテスト
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
)
ORDER BY
predicted_will_buy_on_return_visit DESC;
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
どの新しい訪問者が戻ってきて購入を行うかを予測する
モデルは、2017 年 7 月の e コマース セッションに対する予測を出力します。ここでは、新しく追加された 3 つのフィールドを確認できます。
- predicted_will_buy_on_return_visit: 訪問者が後で購入を行うことを、モデルが予測しているかどうか(1 = yes)
- predicted_will_buy_on_return_visit_probs.label: yes / no のバイナリ分類器
- predicted_will_buy_on_return_visit.prob: 予測に対するモデルの信頼度(1 = 100%)

結果
- 初回訪問者(予測された確率によって降順で並べ替え)の上位 6% のうち、6% 以上が再訪問時に購入を行いました。
- これらのユーザーは、再訪問で購入に至った初回訪問者全体の 50% 近くに相当します。
- 全体として、初回訪問者の 0.7% しか再訪問で購入しませんでした。
- 初回訪問者の上位 6% にターゲットを絞ると、マーケティング ROI は、全員をターゲットにした場合に比べて 9 倍も向上します。
その他の情報
-
ヒント: 新しいデータで既存のモデルの再トレーニングを行う場合、warm_start = true
をモデルのオプションに追加するとトレーニング時間を短縮できます。特徴の列を変更することはできません(変更すると、新しいモデルが必要になります)。
-
roc_auc は、モデル評価で使用できるパフォーマンス指標の一つにすぎません。他にも accuracy、precision、recall を使用できます。どのパフォーマンス指標を使用するかは、全体の目標にもとづいて決める必要があります。
探索できるその他のデータセット
タクシー運賃を予測するなど、他のデータセットでモデルの構築を試してみる場合は、以下のリンクから bigquery-public-data プロジェクトを利用できます。
タスク 10. 理解度テスト
クイズに挑戦して Google Cloud Platform に関するご自分の知識をチェックしましょう。
お疲れさまでした
e コマースの訪問者を分類する ML モデルを BigQuery で無事構築できました。
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。