arrow_back

BQML で分類モデルを使用して訪問者の購入を予測する

参加 ログイン

BQML で分類モデルを使用して訪問者の購入を予測する

1時間 15分 無料

GSP229

Google Cloud セルフペース ラボ

概要

BigQuery は、低コストでテラバイト規模のデータをクエリできる分析データベースです。Google による一貫管理が行われ、インフラストラクチャの管理やデータベース管理者の設置など、お客様による管理運用の必要がないため、有用な情報取得のためのデータ分析に専念できます。BigQuery は SQL を使用しており、従量課金制モデルでも利用できます。

BigQuery の新機能である BigQuery ML(BQML、ベータ版)を使用すれば、データ アナリストによる最小限のコーディングで、機械学習モデルの作成、トレーニング、評価、予測が可能になります。

Google Merchandise Store に関する数百万件にのぼる Google アナリティクスのレコードが格納された e コマース データセットが新たに BigQuery に読み込まれ、利用できるようになりました。このラボでは、このデータを使用して一般的なクエリを実行し、企業が知りたい顧客の購買習慣に関する情報を取得します。

目標

このラボでは、次のタスクの実行方法について学びます。

  • BigQuery を使用して一般公開データセットを見つける

  • e コマース データセットをクエリし、探索する

  • バッチ予測に使用するトレーニングと評価のデータセットを作成する

  • 分類(ロジスティック回帰)モデルを BQML に作成する

  • 機械学習モデルの性能を評価する

  • 訪問者が購入する見込みを予測し、ランクを付ける

環境の設定

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

必要なもの

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

BigQuery コンソールを開く

  1. Google Cloud コンソールで、ナビゲーション メニュー > [BigQuery] を選択します。

[Cloud コンソールの BigQuery へようこそ] メッセージ ボックスが開きます。このメッセージ ボックスには、クイックスタート ガイドとリリースノートへのリンクが表示されます。

  1. [完了] をクリックします。

BigQuery コンソールが開きます。

コース用データセットへのアクセス

BigQuery を開いたら、新しいタブで次の直接リンクを開いて、一般公開の data-to-insights プロジェクトを BigQuery プロジェクト パネルに取り込みます。

data-to-insight.png

data-to-insights e コマース データセットのフィールド定義はこちらをご覧ください。このリンク先のページは、参照用に新しいタブで開いたままにしておきます。

注:パブリックdata-to-insightsプロジェクトがエクスプローラーパネルに表示されない場合は、+ ADD DATA-><をクリックします。 プロジェクトをピン留めする->プロジェクト名を入力(データからインサイトへ)およびピン留め

e コマースデータを探索する

シナリオ: データ アナリスト チームが e コマース ウェブサイトに関する Google アナリティクスのログを BigQuery にエクスポートし、e コマース訪問者のセッションの生データをすべて含むテーブルを作成してデータを探索できるようにしました。このデータを使用して、いくつかの質問に対する答えを見つけていきます。

質問: ウェブサイトを訪れた訪問者の何パーセントが実際に購入したか。

BigQuery ページで [クエリエディタ] をクリックして、クエリエディタで次をコピーして入力します。

#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 つの商品は何か。

[クエリを新規作成] をクリックして前のクエリをクリアした後、クエリエディタに次のクエリを追加します。

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;

[実行] をクリックします。

結果:

Row

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

質問: ウェブサイトに再訪問して購入した訪問者は何人か。

次のクエリを実行して調べます。

# 再訪問で購入した訪問者数(最初の訪問でも購入した場合も含まれる)
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

結果:

Row

total_visitors

will_buy_on_return_visit

1

729848

0

2

11873

1

結果を分析すると、総訪問者の 1.6%(11,873÷7,41,721)がウェブサイトに戻ってきて、購入していることがわかります。この人数には、最初のセッションで購入し、再度訪問してもう一度購入した訪問者のサブセットも含まれます。

質問: e コマースの利用者の多くが、閲覧するものの再訪問するまで購入しない理由は何か。

回答: 唯一の正解はありませんが、よくある理由ひとつは、最終的に購入を決定する前に、別の e コマースサイトと比較検討してから購入するから、というものです。これは、決定する前に入念な事前調査と比較が必要になる高額な商品(自動車など)の購入の際に顕著ですが、比較的程度は低いものの、このサイトの商品(T シャツやアクセサリなど)の購入にも当てはまります。

オンライン マーケティング業界では今後、初回訪問で観察された特徴に基づいて将来購入に至るユーザーを識別してマーケティング活動を行うことが、コンバージョン率を上げ、競合他社のサイトへの流出を抑える鍵となるでしょう。

対象を特定する

ここからは、BigQuery で機械学習モデルを作成し、新しいユーザーが将来購入しそうかどうかを予測します。こうした高い価値を持つユーザーを識別することで、マーケティング チームがそれらのユーザーにターゲットを絞って特別プロモーションや広告キャンペーンを実施することが可能になり、それらのユーザーが自社の e コマースサイトを再度訪問するまでの間に他のサイトと比較していたとしても、コンバージョンにつなげることができます。

特徴を選択し、トレーニング データセットを作成する

Google アナリティクスは、さまざまなディメンションを捉え、この e コマース ウェブサイトのユーザーの訪問を計測します。フィールドの完全なリストをこちらで確認してからデモ データセットをプレビューし、訪問者のウェブサイトへの初回訪問と、その訪問者が戻ってきて購入するかどうかの関係を、機械学習モデルが理解するのに役立つ特徴を見つけます。

次の 2 つのフィールドが分類モデルに適した入力であるかどうかをテストすることにします。

  • totals.bounces(訪問者がウェブサイトをすぐに離れるかどうか)
  • totals.timeOnSite(訪問者がウェブサイトに留まった期間)

質問: 上記の 2 つのフィールドのみを使用することにはどんなリスクがあるか。

回答: 機械学習の良し悪しは、提供されるトレーニング データにかかっています。入力した特徴とラベル(この場合、訪問者が将来購入するかどうか)の関係をモデルに判断、学習させるための十分な情報が揃わない場合、精度の高いモデルを確立することはできません。これら 2 つのフィールドでモデルをトレーニングすることは出発点にはなりますが、精度の高いモデルを生成するために 2 つのフィールドだけで十分かどうかは、これから見極めていきます。

クエリエディタで次のクエリを実行します。

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;

結果:

Row

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

質問: どのフィールドがモデルの特徴になりますか。どれがラベル(正解)ですか。

回答: 入力は、bouncestime_on_site です。ラベルは、will_buy_on_return_visit です。

質問: 訪問者の最初のセッションの後にわかる 2 つのフィールドはどれか。

回答: bouncestime_on_site は、訪問者の最初のセッションの後に明らかになります。

質問: 後になるまで判明しないフィールドはどれか。

回答: will_buy_on_return_visit は、初回の訪問後にはわかりません。繰り返しになりますが、ここでは、ウェブサイトに戻ってきて購入するユーザーのサブセットを予測します。予測時には将来のことはわからないため、新しい訪問者が後から戻ってきて購入するかどうかについて確かなことは言えません。ML モデルを構築する価値は、最初のセッションについて集められたデータに基づいて、将来購入してもらえる確率を予測できる点にあります。

質問: 最初のデータ結果に注目すると、time_on_sitebounces は、ユーザーが戻ってきて購入するかどうかを示す良い指標になると思うか。

回答: モデルのトレーニングと評価を行う前に結論を出すのは早すぎるかもしれませんが、time_on_site の上位 10 項目を見ると、戻ってきて購入したユーザーは 1 人だけでした。あまり精度は高くなさそうです。モデルがどのように役立っているかに注目してみましょう。

モデルを格納する BigQuery データセットを作成する

次に、新しい BigQuery データセットを作成します。このデータセットに ML モデルも格納します。

  1. 左側のペインの [エクスプローラ] セクションで、プロジェクト名の横にある [アクションの表示] アイコン(qwiklabs-gcp -...で始まる)をクリックし、[データセットの作成] をクリックします。

Create_Dataset1.png

  1. [データセットを作成] ダイアログで、次の操作を行います。

  • [データセット ID] に「ecommerce」と入力します。
  • その他の値はデフォルトのままにします。

dataset_name1.png

  1. [データセットを作成] をクリックします。

[進捗状況を確認] をクリックして目的を確認します。

新しいデータセットを作成する

BQML モデルタイプを選択し、オプションを指定する

最初の特徴を選択したので、最初の ML モデルを BigQuery に作成する準備ができました。

モデルタイプは次の 2 つから選択します。

モデル

モデルタイプ

ラベルのデータ型

予測

linear_reg

数値(通常は整数または浮動小数点数)

過去の売上データから翌年の売上を予測。

分類

logistic_reg

0 または 1 のバイナリ分類

コンテキストに応じて、メールを迷惑メールまたは迷惑メール以外に分類。

どのモデルタイプを選択すればいいでしょうか

訪問者を「将来購入する」か「将来購入しない」にバケット化しているため、分類モデルで logistic_reg を使用します。

次のクエリを入力して、モデルを作成し、モデル オプションを指定します。次に、[実行] をクリックしてモデルのトレーニングを行います。

CREATE OR REPLACE MODEL `ecommerce.classification_model`
OPTIONS
(
model_type='logistic_reg',
labels = ['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 分)。

[進捗状況を確認] をクリックして目的を確認します。

モデルを作成し、モデル オプションを指定する

モデルがトレーニングされると、「このステートメントは qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model という名前の新しいモデルを作成しました」というメッセージが表示されます。

[モデルに移動] をクリックします

ecommerce データセットの内部に注目し、classification_model が表示されていることを確かめます。

Classification_model1.png]

次に、未知の評価データに対してモデルの性能を評価します。

分類モデルの性能を評価する

性能の基準を選択する

ML での分類に関する問題について、偽陽性率(ユーザーが戻ってきて購入すると予測したが、実際には購入しない)を最小限に抑え、真陽性率(ユーザーが戻ってきて購入すると予測し、実際に購入する)を最大限にすることを目指します。

次に示すような ROC(受信者操作特性)曲線でこの関係を視覚化します。ここでは、曲線の下の領域(AUC)を最大限にしようと試みています。

42fc12b6077e4784.png

BQML では、roc_auc は、トレーニングを行った ML モデルを評価するときにクエリ可能なフィールドです。

トレーニングが完了したので、ML.EVALUATE を使用して、このクエリに対するモデルの性能を評価できます。

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
  # features
  (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') # eval on 2 months
  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)
));

次のような結果が表示されます。

Row

roc_auc

model_quality

1

0.724588

decent

モデルを評価すると、roc_auc で 0.72 を取得します。これは、モデルが妥当(decent)なレベルではあるものの、予測力が特に優れているわけではないことを示しています。目標は、曲線の下の領域を可能な限り 1.0 に近づけることであるため、改善の余地はまだ残されています。

[進捗状況を確認] をクリックして目的を確認します。

分類モデルの性能を評価する

特徴エンジニアリングでモデル性能を強化する

これまでもそれとなくふれてきましたが、訪問者の最初のセッションと再度訪問して購入する可能性の関係をモデルに理解させるうえで役立つデータセットの特徴は他にもたくさん存在します。

新しい特徴をいくつか追加し、classification_model_2 という名前の 2 番目の機械学習モデルを作成します。

  • 初回訪問時に訪問者は購入手続きをどこまで進めていたか
  • 訪問者はどこからアクセスしたか(トラフィック ソース: オーガニック検索、参照元サイトなど)
  • デバイスのカテゴリ(モバイル、タブレット、パソコン)
  • 地理情報(国)

次のクエリを実行して、この 2 番目のモデルを作成します。

CREATE OR REPLACE MODEL `ecommerce.classification_model_2`
OPTIONS
  (model_type='logistic_reg', labels = ['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,
      # ラベル
      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,
      # モバイルか PC か
      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
);

データセット クエリのトレーニングに追加された重要な新しい特徴は、各訪問者がセッションで到達した購入手続きの進捗状況で、フィールド hits.eCommerceAction.action_type に記録されます。フィールド定義でそのフィールドを検索すると、「6 = Completed Purchase」のフィールド マッピングが表示されます。

新しいモデルのトレーニングが終わるのを待ちます(5~10 分)。

[進捗状況を確認] をクリックして目的を確認します。

特徴エンジニアリングでモデル性能を強化する(2 番目のモデルを作成する)

この新しいモデルを評価し、より優れた予測能力が備わっているかどうかを確認します。

#standardSQL
#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,
      # ラベル
      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,
      # モバイルか PC か
      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
)
));

(出力)

Row

roc_auc

model_quality

1

0.910382

good

この新しいモデルでは、roc_auc で 0.91 を取得するようになりました。これは、最初のモデルよりも著しく向上しています。

モデルをトレーニングしたので、今度は予測を行います。

[進捗状況を確認] をクリックして目的を確認します。

特徴エンジニアリングでモデル性能を強化する(予測能力を強化する)

新しい訪問者のうち、戻ってきて購入するユーザーを予測する

次に、新しい訪問者がどのくらい戻ってきて購入するかを予測するためのクエリを作成します。

以下の予測クエリでは、強化済みの分類モデルを使用して、Google Merchandise Store への初めての訪問者が後の訪問で購入する確率を予測します。

#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,
      # ラベル
      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,
      # モバイルか PC か
      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;

予測は、最後の 1 か月(12 か月中)のデータセットで行われます。

[進行状況を確認] をクリックして目標を確認します。

新しい訪問者のうち、戻ってきて購入するユーザーを予測する

モデルは、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%)

QueryResult1.png

結果

  • 上位 6% の初回訪問者(予測された確率を降順で並べ替え済み)の 6% 以上が後の訪問で購入しました。

  • これらのユーザーは、後の訪問で購入に至った初回訪問者全体のほぼ 50% に相当します。

  • 全体として、初回訪問者の 0.7% しか後の訪問で購入しませんでした。

  • 初回訪問者の上位 6% にターゲットを絞ると、マーケティング ROI は、全員をターゲットにした場合に比べ 9 倍も向上します。

追加情報

ヒント: 新しいデータで既存のモデルの再トレーニングを行う場合、トレーニング時間を短縮するには、warm_start = true をモデルのオプションに追加します。特徴の列を変更することはできません(変更すると、新しいモデルが必要になります)。

roc_auc は、モデル評価で使用できるパフォーマンス指標のひとつにすぎず、他にも accuracy、precision、recall を使用できます。信頼すべきパフォーマンス指標を知ることは、全体の目標が何かによって大きく左右されます。

探索できるその他のデータセット

タクシー運賃を予測する場合など、他のデータセットに対するモデルの構築を試してみるには、以下のリンクから bigquery-public-data プロジェクトを利用できます。

理解度チェック

クイズに挑戦して Google Cloud Platform に関する自分の知識をチェックしましょう。

これで完了です。

e コマースの訪問者を分類する ML モデルを BigQuery で無事構築できました。

completion_badge_Data_Engineering-135.png completion_badge_BigQuery_for_Machine_Learning-135.png completion_badge_BQML_for_Machine_Learning-135.png

クエストの終了

このセルフペース ラボは、Qwiklabs のクエストである Data EngineeringBigQuery for Machine LearningApplying BQML's Classification, Regression, and Demand Forecasting for Retail Applications の一部です。クエストとは、学習パスを構成する一連のラボのことです。完了すると、その成果が認められて上のバッジを獲得できます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクすることができます。このラボを終えてクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なその他の Qwiklabs のクエストもご覧ください

次のラボの受講

Google Cloud Dataprep の操作、または次のいずれかでクエストを続行してください。

次のステップと詳細情報

Google Cloud Training & Certification

Google Cloud 技術を最大限に活用できるようになります。このクラスでは、必要な技術力とベスト プラクティスを習得し、継続的に学習することができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、仮想環境など、多忙なスケジュールに対応できるオプションが用意されています。認定資格を取得することで、Google Cloud の技術のスキルと知識を証明できます。

マニュアルの最終更新日: 2022 年 28 月 04 日
ラボの最終テスト日: 2020 年 28 月 04 日

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。