GSP229

總覽
BigQuery 是 Google 的全代管 NoOps 數據分析資料庫,價格實惠,可用來查詢 TB 規模的資料,不必管理基礎架構,也不需要資料庫管理員。BigQuery 使用 SQL 語法,並提供「即付即用」模式,您可以使用 BigQuery 專心分析資料,找出有意義的洞察資訊。
BigQuery ML 是 BigQuery 的功能之一。有了這項功能,資料分析師只要編寫少量程式碼,就能建立、訓練及評估機器學習模型,並用模型做出預測。
我們已事先將一個特別的電子商務資料集載入 BigQuery,供本實驗室使用。這個資料集有數百萬筆 Google Analytics 記錄的 Google 商品網路商店資料。您需要用這份資料在 BigQuery ML 中建立分類 (邏輯迴歸) 模型,預測消費者的購物習慣。
課程內容
本實驗室將說明如何執行下列工作:
- 使用 BigQuery 尋找公開資料集
 
- 查詢及探索電子商務資料集
 
- 建立訓練和評估資料集,供批次預測使用
 
- 在 BigQuery ML 中建立分類 (邏輯迴歸) 模型
 
- 評估與改進機器學習模型的成效
 
- 預測訪客購物的可能性並做出排名
 
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
 
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
 
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
- 
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
 
- 剩餘時間
 
- 必須在這個研究室中使用的臨時憑證
 
- 完成這個實驗室所需的其他資訊 (如有)
 
 
- 
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
 
- 
如有必要,請將下方的 Username 貼到「登入」對話方塊。
 {{{user_0.username | "Username"}}}
 
您也可以在「Lab Details」窗格找到 Username。
 
- 
點選「下一步」。
 
- 
複製下方的 Password,並貼到「歡迎使用」對話方塊。
 {{{user_0.password | "Password"}}}
 
您也可以在「Lab Details」窗格找到 Password。
 
- 
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
 
- 
按過後續的所有頁面:
- 接受條款及細則。
 
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
 
- 請勿申請免費試用。
 
 
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
開啟 BigQuery 控制台
- 在 Google Cloud 控制台中,依序選取「導覽選單」>「BigQuery」。
 
接著,畫面中會顯示「歡迎使用 Cloud 控制台中的 BigQuery」訊息方塊,當中會列出快速入門導覽課程指南的連結和版本資訊。
- 點選「完成」。
 
BigQuery 控制台會隨即開啟。
存取課程資料集
- 返回「Explorer」窗格,點選「+ 新增資料」。
 
Add data 窗格隨即開啟。
- 
在「其他來源」下方,點選「依據名稱為專案加上星號」。
 
- 
輸入 data-to-insights 並點選「星號」圖示。
 

點選下方的直接連結,即可查看公開的 data-to-insights 專案:
如要查看 data-to-insights 電子商務資料集的欄位定義,請按這裡。您可以在新分頁中開啟該頁面,方便隨時參考。
工作 1:檢查電子商務資料
情境:資料分析師團隊已將電子商務網站的 Google Analytics 記錄匯出至 BigQuery 並建立新資料表,內含所有原始電子商務訪客工作階段的資料。請根據這些資料回答幾個問題。
問題:我們網站的所有訪客當中,購買商品的人占多少百分比?
- 複製下列查詢,貼入 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 
 | 
問題:有多少訪客在回訪網站時購買商品?
- 清除先前的查詢,然後在「編輯器」中新增以下查詢:
 
# visitors who bought on a return visit (could have bought on first as well
WITH all_visitor_stats AS (
SELECT
  fullvisitorid, # 741,721 unique visitors
  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 
 | 
分析結果可知,有 (11873 / 741721) = 1.6% 的訪客會回訪網站並購物,當中包括首次造訪就已消費,後續回訪又再次消費的訪客。
問題:習慣在電子商務平台購物的消費者,在瀏覽當下並未立即購買商品,之後才回訪網站消費,可能有哪些原因?
答案:可能因素很多,但有個常見理由是,消費者想先多方比較不同的電子商務網站,最後再決定於哪個平台消費。對於汽車之類的高價商品,消費者在選購前通常會做足功課、貨比三家,選購這個網站上的 T 恤、配件等商品時,也多少會有這種傾向。
在網路行銷領域,根據訪客首次造訪時展現的特徵,辨識潛在消費者並向他們行銷,不僅能提高轉換率,還能防止他們流向競爭對手的網站。
工作 2:確定目標
現在,您將在 BigQuery 中建立一個機器學習模型,用來預測新使用者日後是否可能購買商品。若能辨識出這些高價值使用者,行銷團隊就能針對他們推出特別促銷和廣告活動,這樣即使他們在您的電子商務網站和其他平台之間來回比較,最終也能實現轉換。
工作 3:選取特徵並建立訓練資料集
Google Analytics 會對使用者造訪這個電子商務網站的行為,擷取各種維度和測量指標。請瀏覽「[通用 Analytics] BigQuery Export 結構定義」一文中的完整欄位清單,接著預覽示範資料集,找出有助機器學習模型分析的特徵,使其能根據訪客首次造訪網站的資料,預測訪客是否會回訪消費。
您的團隊決定測試以下兩個欄位是否適合做為分類模型的輸入內容:
- 
totals.bounces (訪客是否立即離開網站) 
- 
totals.timeOnSite (訪客在網站上停留的時間) 
問題:只用這兩個欄位有何風險?
答案:機器學習成效取決於訓練資料是否完備。如果資訊不足,導致模型無法判斷並學習輸入特徵和標籤之間的關聯性 (在本例中,指的是消費者日後是否會購買商品),您就無法建立準確的模型。雖然初步只用這兩個欄位訓練模型,但這樣可以讓您瞭解此兩欄是否足以產生準確的模型。
- 在 BigQuery 的「編輯器」中執行下列查詢:
 
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)
  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 
 | 
問題:哪些欄位是輸入特徵?哪些是標籤?
答案:bounces 和 time_on_site 是輸入內容,will_buy_on_return_visit 是標籤。
問題:訪客首次造訪後,可獲得哪兩個欄位的資料?
答案:bounces 和 time_on_site 是訪客首次造訪後可獲得資料的欄位。
問題:哪個欄位的資料是後來才取得?
問題:will_buy_on_return_visit 是無法在訪客首次造訪後就取得資料的欄位。別忘了,您要預測的是誰會回到您的網站消費,而您在預測時並不知道未來的情況,無法確定新訪客是否將回訪消費。我們希望根據訪客首次造訪期間的資料,瞭解消費者日後購買商品的可能性,這就是建構機器學習模型的價值所在。
問題:從初步資料結果來看,您認為 time_on_site 和 bounces 能否成為用來預測使用者將回訪消費的良好指標?
回答:在訓練及評估模型前,通常無法下定論,但目前看來,排名前 10 的 time_on_site 中,只有 1 位消費者回訪並購買商品,準確度並不高。接著看看這個模型的成效。
工作 4:建立 BigQuery 資料集來儲存模型
接著請建立新的 BigQuery 資料集,這個資料集也會用於儲存機器學習模型。
- 在左側窗格的「Explorer」專區下,點選專案名稱 (開頭是 
qwiklabs-gcp-...) 旁的「查看動作」圖示,然後點選「建立資料集」。 

- 在「建立資料集」對話方塊中:
 
- 在「資料集 ID」部分輸入「ecommerce」。
 
- 其他設定保留預設值。
 
- 點選「建立資料集」。
 
點選「Check my progress」,確認目標已達成。
    建立新的資料集
工作 5:選取 BigQuery ML 模型類型,並指定選項
您已選取初始特徵,現在可以在 BigQuery 中建立第一個機器學習模型。
有兩種模型可選擇:
| 
 模型 
 | 
 模型類型 
 | 
 標籤資料類型 
 | 
 例子 
 | 
| 
 預測 
 | 
 linear_reg 
 | 
 數值 (通常為整數或浮點值) 
 | 
 根據以往的銷售資料,預測來年的銷售額。 
 | 
| 
 分類 
 | 
 logistic_reg 
 | 
 以 0 或 1 表示的二元分類 
 | 
 根據背景資訊,將電子郵件分為垃圾郵件或非垃圾郵件。 
 | 
注意:機器學習使用的模型類型還有很多種,包括類神經網路和決策樹,可以使用 TensorFlow 之類的程式庫建構。在我們撰寫本文時,BigQuery ML 已支援上述兩種模型。您應該選擇哪一種模型?
為了將訪客分成「日後會消費」與「日後不會消費」兩類,請在分類模型中使用 logistic_reg。
以下查詢會建立模型並指定模型選項。
- 執行以下查詢來訓練模型:
 
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
  # 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 '20160801' AND '20170430') # train on first 9 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)
;
- 等模型訓練完成 (5 至 10 分鐘)。
 
注意:訓練時不能將所有可用資料餵給模型,要保留一些模型未見過的資料點,以備之後評估與測試。為此,請新增 WHERE 子句條件,在 12 個月的資料集中,只篩選出前 9 個月的工作階段資料來訓練模型。
點選「Check my progress」,確認目標已達成。
    建立模型並指定模型選項
模型訓練完成後,畫面會顯示「Successfully created model named classification_model.」訊息。
- 
點選「前往模型」。
 
- 
查看電子商務資料集,確認 classification_model 已出現。
 

接下來,您將使用新資料評估模型成效。
工作 6:評估分類模型的成效
選取成效條件
以機器學習技術的分類問題而言,您的目標在於盡可能降低偽陽率 (預測使用者會回訪並購買商品,結果並非如此),同時盡量提高真陽率 (預測使用者會回訪並購買商品,結果也的確如此)。
這種關係可透過 ROC 曲線呈現,您應設法讓曲線下的面積達到最大:

使用 BigQuery ML 評估訓練過的機器學習模型時,roc_auc 只是一個可查詢的欄位。
- 現在訓練已經完成,您可以執行以下查詢,使用 
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.7238561438561438 
 | 
 decent 
 | 
經過評估,模型的 roc_auc 為 0.72,代表模型的預測能力可以接受,但未臻完美。目標是讓曲線下面積盡可能接近 1.0,所以還有改進空間。
點選「Check my progress」,確認目標已達成。
    評估分類模型成效
工作 7:運用特徵工程提升模型成效
如前所述,資料集中還有許多其他特徵,可能有助模型將訪客首次造訪的情形與後續回訪消費的可能性做出連結。
- 請新增幾項新特徵,建立第二個機器學習模型,並命名為 
classification_model_2: 
- 訪客首次造訪時,完成結帳程序的進度
 
- 訪客來自何處 (流量來源:自然搜尋、網站推薦等)
 
- 裝置類別 (行動裝置、平板電腦、桌上型電腦)
 
- 地理位置資訊 (國家/地區)
 
- 點選「+」(SQL 查詢) 圖示,建立第二個模型:
 
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
)
# add in new features
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,
      # behavior on the site
      IFNULL(totals.bounces, 0) AS bounces,
      IFNULL(totals.timeOnSite, 0) AS time_on_site,
      IFNULL(totals.pageviews, 0) AS pageviews,
      # where the visitor came from
      trafficSource.source,
      trafficSource.medium,
      channelGrouping,
      # mobile or desktop
      device.deviceCategory,
      # geographic
      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
    # only predict for new visits
    AND totals.newVisits = 1
    AND date BETWEEN '20160801' AND '20170430' # train 9 months
  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 代表完成購買。
注意:
網站分析資料集包含 ARRAYS 這樣的巢狀與重複欄位,需要在資料集中拆分成不同資料列。這項作業可透過 UNNEST() 函式完成,如上述查詢所示。
- 等新模型訓練完成 (5 至 10 分鐘)。
 
點選「Check my progress」,確認目標已達成。
    運用特徵工程提升模型成效 (建立第二個模型)
- 評估新模型,看看預測能力是否提升:
 
#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
)
# add in new features
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,
      # behavior on the site
      IFNULL(totals.bounces, 0) AS bounces,
      IFNULL(totals.timeOnSite, 0) AS time_on_site,
      totals.pageviews,
      # where the visitor came from
      trafficSource.source,
      trafficSource.medium,
      channelGrouping,
      # mobile or desktop
      device.deviceCategory,
      # geographic
      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
    # only predict for new visits
    AND totals.newVisits = 1
    AND date BETWEEN '20170501' AND '20170630' # eval 2 months
  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.9094875124875125 
 | 
 good 
 | 
使用新模型後,roc_auc 達到 0.91,結果明顯優於第一個模型。
現在模型已訓練妥當,可以執行預測了。
點選「Check my progress」,確認目標已達成。
    運用特徵工程提升模型成效 (提升預測能力)
工作 8:預測哪些新訪客會回訪消費
現在請編寫查詢,預測哪些新訪客會回訪消費。
- 以下查詢使用經過改善的分類模型,預測 Google 商品網路商店的某位新訪客回訪消費的可能性:
 
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,
      # behavior on the site
      IFNULL(totals.bounces, 0) AS bounces,
      IFNULL(totals.timeOnSite, 0) AS time_on_site,
      totals.pageviews,
      # where the visitor came from
      trafficSource.source,
      trafficSource.medium,
      channelGrouping,
      # mobile or desktop
      device.deviceCategory,
      # geographic
      IFNULL(geoNetwork.country, "") AS country
  FROM `data-to-insights.ecommerce.web_analytics`,
     UNNEST(hits) AS h
    JOIN all_visitor_stats USING(fullvisitorid)
  WHERE
    # only predict for new visits
    totals.newVisits = 1
    AND date BETWEEN '20170701' AND '20170801' # test 1 month
  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 個月) 的資料。
點選「Check my progress」,確認目標已達成。
    預測哪些新訪客會回訪消費
現在模型輸出的是對 2017 年 7 月電子商務工作階段的預測結果,可以看到三個新增欄位:
- predicted_will_buy_on_return_visit:模型是否認為訪客稍後會購買商品 (1 = 是)
 
- predicted_will_buy_on_return_visit_probs.label:是/否的二元分類器
 
- predicted_will_buy_on_return_visit.probs.prob:模型預測結果的可信度 (1 = 100%)
 

工作 9:分析結果和其他資訊
結果
- 在前 6% 的新訪客中 (預測可能性由高至低),超過 6% 在稍後回訪時購買商品。
 
- 在稍後回訪時購買商品的所有新訪客當中,這些使用者占了近 50% 的比例。
 
- 整體來看,只有 0.7% 的新訪客在稍後回訪時購買商品。
 
- 相較於爭取所有新訪客,只鎖定前 6% 的新訪客行銷,能讓投資報酬率增加 9 倍!
 
其他資訊
提示:使用新資料重新訓練現有模型時,可以在模型選項中加入 warm_start = true 來縮短訓練時間。請注意,您無法變更特徵欄,用新模型才能變更。
roc_auc 只是模型評估作業可用的成效指標之一,還能使用準確率、精確度和召回率指標。實際上要依賴哪個成效指標,主要取決於您的整體目標或目的。
其他可瀏覽的資料集
如果想瞭解使用其他資料集建模的情形,例如預測計程車車資,可使用 bigquery-public-data 專案。
- 點選「+ 新增資料」,開啟 bigquery-public-data 資料集。在「其他來源」下方,點選「依據名稱為專案加上星號」。
 
- 寫入名稱 
bigquery-public-data。 
- 點選「星號」圖示。
 
bigquery-public-data 專案會列在「Explorer」專區。
工作 10:學以致用
接受測驗,測試您對 Google Cloud Platform 瞭解多少。
恭喜!
您已使用 BigQuery ML 建構機器學習模型,能順利將電子商務訪客分類並預測購物習慣。
後續行動/瞭解詳情
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 8 月 26 日
實驗室上次測試日期:2025 年 7 月 28 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。